1 #ifndef _PARANOIDNUMBER_H
2 #define _PARANOIDNUMBER_H
14 typedef enum {ADD, SUBTRACT, MULTIPLY, DIVIDE} Optype;
16 ParanoidNumber(float value=0, Optype type = ADD) : m_value(value), m_op(type), m_next(NULL)
21 ParanoidNumber(const ParanoidNumber & cpy) : m_value(cpy.m_value), m_op(cpy.m_op), m_next(NULL)
23 if (cpy.m_next != NULL)
25 m_next = new ParanoidNumber(*(cpy.m_next));
29 ParanoidNumber(const ParanoidNumber & cpy, Optype type) : ParanoidNumber(cpy)
34 ParanoidNumber(const char * str);
36 virtual ~ParanoidNumber()
43 double ToDouble() const;
45 ParanoidNumber & operator+=(const ParanoidNumber & a);
46 ParanoidNumber & operator-=(const ParanoidNumber & a);
47 ParanoidNumber & operator*=(const ParanoidNumber & a);
48 ParanoidNumber & operator/=(const ParanoidNumber & a);
49 ParanoidNumber & operator=(const ParanoidNumber & a);
52 bool operator<(const ParanoidNumber & a) const {return ToDouble() < a.ToDouble();}
53 bool operator<=(const ParanoidNumber & a) const {return this->operator<(a) || this->operator==(a);}
54 bool operator>(const ParanoidNumber & a) const {return !(this->operator<=(a));}
55 bool operator>=(const ParanoidNumber & a) const {return !(this->operator<(a));}
56 bool operator==(const ParanoidNumber & a) const {return ToDouble() == a.ToDouble();}
57 bool operator!=(const ParanoidNumber & a) const {return !(this->operator==(a));}
59 ParanoidNumber operator+(const ParanoidNumber & a) const
61 ParanoidNumber result(*this);
65 ParanoidNumber operator-(const ParanoidNumber & a) const
67 ParanoidNumber result(*this);
71 ParanoidNumber operator*(const ParanoidNumber & a) const
73 ParanoidNumber result(*this);
77 ParanoidNumber operator/(const ParanoidNumber & a) const
79 ParanoidNumber result(*this);
84 std::string Str() const;
88 ParanoidNumber * InsertAfter(ParanoidNumber * insert);
89 ParanoidNumber * InsertAfter(float value, Optype op);
93 ParanoidNumber * m_next;
103 #endif //_PARANOIDNUMBER_H