#ifndef _ADV_DOUBLE_HPP
#define _ADV_DOUBLE_HPP
namespace adv
{
class Double
{
public:
~Double();
Double();
Double(double);
Double(const Double&);
Double(Double&&);
Double& operator=(const Double&);
Double& operator=(Double&&);
Double operator+(const Double&) const;
Double operator-(const Double&) const;
Double operator*(const Double&) const;
Double operator/(const Double&) const;
private:
struct Impl;
Impl* m_impl;
Double(void* impl);
const void* get_impl() const;
friend class Context;
friend Double operator+(double, const Double&);
friend Double operator-(double, const Double&);
friend Double operator*(double, const Double&);
friend Double operator/(double, const Double&);
friend Double sin(const Double&);
friend Double cos(const Double&);
friend Double tan(const Double&);
friend Double abs(const Double&);
friend Double exp(const Double&);
friend Double ln(const Double&);
friend Double min(const Double&, const Double&);
friend Double max(const Double&, const Double&);
};
Double operator+(double, const Double&);
Double operator-(double, const Double&);
Double operator*(double, const Double&);
Double operator/(double, const Double&);
Double sin(const Double&);
Double cos(const Double&);
Double tan(const Double&);
Double abs(const Double&);
Double exp(const Double&);
Double ln(const Double&);
double sin(double);
double cos(double);
double tan(double);
double abs(double);
double exp(double);
double ln(double);
Double min(const Double&, const Double&);
Double max(const Double&, const Double&);
double min(double, double);
double max(double, double);
}
#endif