27 #ifndef EvilNumber_h__
28 #define EvilNumber_h__
30 #define MAX_EVIL_INTEGER 0x7FFFFFFFFFFFFFFFLL // 64-bit signed integer
97 {
return _Add(*
this, val); }
203 #define LOGIC_OPERATOR(a, b) \
204 bool operator a ( b val) \
206 if (this->mType == evil_number_int) { \
207 return this->iVal a static_cast<int64>(val); \
208 } else if (this->mType == evil_number_float) { \
209 return this->fVal a static_cast<double>(val); \
222 #define LOGIC_OPERATORS_FOR( type ) \
223 LOGIC_OPERATOR( <, type ) \
224 LOGIC_OPERATOR( <=, type ) \
225 LOGIC_OPERATOR( >, type ) \
226 LOGIC_OPERATOR( >=, type ) \
227 LOGIC_OPERATOR( ==, type ) \
228 LOGIC_OPERATOR( !=, type )
254 return this->iVal == val.iVal;
256 return this->fVal == val.fVal;
258 return this->fVal == double(val.iVal);
260 return double(this->iVal) == val.fVal;
267 return this->iVal != val.
iVal;
269 return this->fVal != val.
fVal;
271 return this->fVal != double(val.
iVal);
273 return double(this->iVal) != val.
fVal;
279 return this->iVal < val.
iVal;
281 return this->fVal < val.
fVal;
283 return this->fVal < double(val.
iVal);
285 return double(this->iVal) < val.
fVal;
291 return this->iVal > val.
iVal;
293 return this->fVal > val.
fVal;
295 return this->fVal > double(val.
iVal);
297 return double(this->iVal) > val.
fVal;
303 return this->iVal <= val.
iVal;
305 return this->fVal <= val.
fVal;
307 return this->fVal <= double(val.
iVal);
309 return double(this->iVal) <= val.
fVal;
315 return this->iVal >= val.
iVal;
317 return this->fVal >= val.
fVal;
319 return this->fVal >= double(val.
iVal);
321 return double(this->iVal) >= val.
fVal;
369 return std::string(buff);
486 #endif // EvilNumber_h__
EvilNumber operator/(const EvilNumber &val)
EvilNumber operator%=(const EvilNumber &val)
bool operator>(const EvilNumber &val)
EvilNumber _SelfMultiply(const EvilNumber &val)
EvilNumber _Multiply(const EvilNumber &val1, const EvilNumber &val2)
multiply this with
bool operator!=(const EvilNumber &val)
const EvilNumber EvilTime_Month
EvilNumber operator+(const EvilNumber &val)
PyRep * GetPyObject()
converts the EvilNumber into a python object.
EvilNumber operator*=(const EvilNumber &val)
EvilNumber _Divide(const EvilNumber &val1, const EvilNumber &val2)
divide this with
this is a class that kinda mimics how python polymorph's numbers.
EvilNumber operator/=(const EvilNumber &val)
EvilNumber operator*(const EvilNumber &val)
static EvilNumber exp(const EvilNumber &val)
EvilNumber operator-(const EvilNumber &val, const EvilNumber &val2)
const EvilNumber EvilTime_Minute
static EvilNumber log10(const EvilNumber &val)
bool operator<=(const EvilNumber &val)
EvilNumber _SelfAdd(const EvilNumber &val)
EvilNumber _Subtract(const EvilNumber &val1, const EvilNumber &val2)
subtract this with
const EvilNumber EvilTime_Year
static EvilNumber cos(const EvilNumber &val)
EvilNumber operator%(const EvilNumber &val, const EvilNumber &val2)
static EvilNumber sqrt(const EvilNumber &val)
EvilNumber operator--(int)
static EvilNumber asin(const EvilNumber &val)
EvilNumber operator/(const EvilNumber &val, const EvilNumber &val2)
EvilNumber _SelfSubtract(const EvilNumber &val)
static EvilNumber log(const EvilNumber &val)
#define LOGIC_OPERATORS_FOR(type)
Code generation macro to create all comparison operator overload functions for a specified type...
bool operator<(const EvilNumber &val)
EvilNumber operator*(const EvilNumber &val, const EvilNumber &val2)
EvilNumber operator++(int)
const EvilNumber EvilTime_Day
EvilNumber _SelfIncrement()
increment by 1
EvilNumber operator+=(const EvilNumber &val)
bool operator>=(const EvilNumber &val)
static EvilNumber atan(const EvilNumber &val)
EvilNumber _SelfModulus(const EvilNumber &val)
EvilNumber _Add(const EvilNumber &val1, const EvilNumber &val2)
add this with
void CheckIntegrity()
check if its possible a integer and do the conversion
static EvilNumber sin(const EvilNumber &val)
??
EvilNumber _SelfDivide(const EvilNumber &val)
const EvilNumber EvilTime_Hour
static EvilNumber acos(const EvilNumber &val)
static EvilNumber tan(const EvilNumber &val)
static EvilNumber pow(const EvilNumber &val1, const EvilNumber &val2)
EvilNumber operator-(const EvilNumber &val)
const EvilNumber EvilTime_Second
EvilNumber operator%(const EvilNumber &val)
EvilNumber _Modulus(const EvilNumber &val1, const EvilNumber &val2)
modulus this with
EvilNumber _SelfDecrement()
decrement by 1
EVIL_NUMBER_TYPE get_type()
std::string to_str()
converts the EvilNumber value into a string
EvilNumber operator-=(const EvilNumber &val)
EvilNumber operator+(const EvilNumber &val, const EvilNumber &val2)