EvEmu  0.8.4
11 September 2021
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
EvilNumber Class Reference

this is a class that kinda mimics how python polymorph's numbers. More...

#include "EvilNumber.h"

Public Member Functions

 EvilNumber ()
 
 EvilNumber (int8 val)
 
 EvilNumber (uint8 val)
 
 EvilNumber (int16 val)
 
 EvilNumber (uint16 val)
 
 EvilNumber (int32 val)
 
 EvilNumber (uint32 val)
 
 EvilNumber (int64 val)
 
 EvilNumber (float val)
 
 EvilNumber (double val)
 
EvilNumber operator* (const EvilNumber &val)
 
EvilNumber operator*= (const EvilNumber &val)
 
EvilNumber operator/ (const EvilNumber &val)
 
EvilNumber operator/= (const EvilNumber &val)
 
EvilNumber operator+ (const EvilNumber &val)
 
EvilNumber operator+= (const EvilNumber &val)
 
EvilNumber operator- (const EvilNumber &val)
 
EvilNumber operator- ()
 
EvilNumber operator-= (const EvilNumber &val)
 
EvilNumber operator% (const EvilNumber &val)
 
EvilNumber operator%= (const EvilNumber &val)
 
EvilNumber operator++ ()
 
EvilNumber operator++ (int)
 
EvilNumber operator-- ()
 
EvilNumber operator-- (int)
 
bool operator== (const EvilNumber &val)
 '==' operator overload More...
 
bool operator!= (const EvilNumber &val)
 
bool operator< (const EvilNumber &val)
 
bool operator> (const EvilNumber &val)
 
bool operator<= (const EvilNumber &val)
 
bool operator>= (const EvilNumber &val)
 
std::string to_str ()
 converts the EvilNumber value into a string More...
 
PyRepGetPyObject ()
 converts the EvilNumber into a python object. More...
 
EVIL_NUMBER_TYPE get_type ()
 
bool isInt ()
 
bool isFloat ()
 
bool isNaN ()
 
bool isInf ()
 
bool get_bool ()
 
int64 get_int ()
 
uint32 get_uint32 ()
 
float get_float ()
 
double get_double ()
 

Static Public Member Functions

static EvilNumber sin (const EvilNumber &val)
 ?? More...
 
static EvilNumber cos (const EvilNumber &val)
 
static EvilNumber tan (const EvilNumber &val)
 
static EvilNumber asin (const EvilNumber &val)
 
static EvilNumber acos (const EvilNumber &val)
 
static EvilNumber atan (const EvilNumber &val)
 
static EvilNumber sqrt (const EvilNumber &val)
 
static EvilNumber pow (const EvilNumber &val1, const EvilNumber &val2)
 
static EvilNumber log (const EvilNumber &val)
 
static EvilNumber log10 (const EvilNumber &val)
 
static EvilNumber exp (const EvilNumber &val)
 

Protected Member Functions

void CheckIntegrity ()
 check if its possible a integer and do the conversion More...
 
EvilNumber _Multiply (const EvilNumber &val1, const EvilNumber &val2)
 multiply this with More...
 
EvilNumber _SelfMultiply (const EvilNumber &val)
 
EvilNumber _Divide (const EvilNumber &val1, const EvilNumber &val2)
 divide this with More...
 
EvilNumber _SelfDivide (const EvilNumber &val)
 
EvilNumber _Add (const EvilNumber &val1, const EvilNumber &val2)
 add this with More...
 
EvilNumber _SelfAdd (const EvilNumber &val)
 
EvilNumber _Subtract (const EvilNumber &val1, const EvilNumber &val2)
 subtract this with More...
 
EvilNumber _SelfSubtract (const EvilNumber &val)
 
EvilNumber _Modulus (const EvilNumber &val1, const EvilNumber &val2)
 modulus this with More...
 
EvilNumber _SelfModulus (const EvilNumber &val)
 
EvilNumber _SelfIncrement ()
 increment by 1 More...
 
EvilNumber _SelfDecrement ()
 decrement by 1 More...
 

Private Attributes

double fVal
 
int64 iVal
 
EVIL_NUMBER_TYPE mType
 

Detailed Description

this is a class that kinda mimics how python polymorph's numbers.

This is a class that kinda mimics how python polymorph's numbers. VARIANT design style number class.

Author
Captnoord.
Date
Juni 2010
Todo:
try to create a performance test for this.

Definition at line 59 of file EvilNumber.h.

Constructor & Destructor Documentation

EvilNumber::EvilNumber ( )

Definition at line 46 of file EvilNumber.cpp.

References fVal, and iVal.

Referenced by _Add(), _Divide(), _Modulus(), _Multiply(), _Subtract(), acos(), asin(), atan(), cos(), exp(), log(), log10(), operator-(), pow(), sin(), sqrt(), and tan().

47 {
48  iVal = 0;
49  fVal = 0.0;
50 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64

Here is the caller graph for this function:

EvilNumber::EvilNumber ( int8  val)

Definition at line 52 of file EvilNumber.cpp.

References fVal, and iVal.

53 {
54  iVal = val;
55  fVal = 0.0;
56 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64
EvilNumber::EvilNumber ( uint8  val)

Definition at line 58 of file EvilNumber.cpp.

References fVal, and iVal.

59 {
60  iVal = val;
61  fVal = 0.0;
62 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64
EvilNumber::EvilNumber ( int16  val)

Definition at line 64 of file EvilNumber.cpp.

References fVal, and iVal.

65 {
66  iVal = val;
67  fVal = 0.0;
68 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64
EvilNumber::EvilNumber ( uint16  val)

Definition at line 70 of file EvilNumber.cpp.

References fVal, and iVal.

71 {
72  iVal = val;
73  fVal = 0.0;
74 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64
EvilNumber::EvilNumber ( int32  val)

Definition at line 76 of file EvilNumber.cpp.

References fVal, and iVal.

77 {
78  iVal = val;
79  fVal = 0.0;
80 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64
EvilNumber::EvilNumber ( uint32  val)

Definition at line 82 of file EvilNumber.cpp.

References fVal, and iVal.

83 {
84  iVal = val;
85  fVal = 0.0;
86 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64
EvilNumber::EvilNumber ( int64  val)

Definition at line 88 of file EvilNumber.cpp.

References fVal, and iVal.

89 {
90  iVal = val;
91  fVal = 0.0;
92 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64
EvilNumber::EvilNumber ( float  val)

Definition at line 94 of file EvilNumber.cpp.

References fVal, and iVal.

95 {
96  fVal = val;
97  iVal = 0;
98 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64
EvilNumber::EvilNumber ( double  val)

Definition at line 100 of file EvilNumber.cpp.

References fVal, and iVal.

101 {
102  fVal = val;
103  iVal = 0;
104 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64

Member Function Documentation

EvilNumber EvilNumber::_Add ( const EvilNumber val1,
const EvilNumber val2 
)
protected

add this with

Add this with .

Parameters
[in]valthe value we are adding by.

Definition at line 456 of file EvilNumber.cpp.

References evil_number_float, evil_number_int, EvilNumber(), fVal, iVal, and mType.

Referenced by operator+().

457 {
458  EvilNumber result = EvilNumber();
459 
460  // WARNING! There should be NO implicit or explicit use of the 'this' pointer here!
461  if (val2.mType == val1.mType) {
462  if (val1.mType == evil_number_float) {
463  result.fVal = val1.fVal + val2.fVal;
464  result.mType = evil_number_float;
465  } else if (val1.mType == evil_number_int) {
466  result.iVal = val1.iVal + val2.iVal;
467  result.mType = evil_number_int;
468  } else {
469  assert(false); // crash
470  }
471  } else {
472  // we assume that the val argument is the opposite of the 'this' type
473  if (val1.mType == evil_number_float) {
474  result.fVal = val1.fVal + val2.iVal;
475  } else if (val1.mType == evil_number_int) {
476  result.fVal = val1.iVal + val2.fVal;
477  } else {
478  assert(false); // crash
479  }
480  result.mType = evil_number_float;
481  }
482  //result.CheckIntegrity();
483 
484  return result;
485 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
int64 iVal
Definition: EvilNumber.h:64

Here is the call graph for this function:

Here is the caller graph for this function:

EvilNumber EvilNumber::_Divide ( const EvilNumber val1,
const EvilNumber val2 
)
protected

divide this with

Divide this with .

Parameters
[in]valthe value we are dividing by.
Todo:
handle "int(2) / int(4) = float(0.5)" in a fast enough way

Definition at line 398 of file EvilNumber.cpp.

References evil_number_float, evil_number_int, EvilNumber(), fVal, iVal, and mType.

Referenced by operator/().

399 {
400  EvilNumber result = EvilNumber();
401 
402  // WARNING! There should be NO implicit or explicit use of the 'this' pointer here!
403  if (val2.mType == val1.mType) {
404  if (val1.mType == evil_number_float) {
405  result.fVal = val1.fVal / val2.fVal;
406  } else if (val1.mType == evil_number_int) {
407  // make sure we can do things like 2 / 4 = 0.5f
408  result.fVal = double(val1.iVal) / double(val2.iVal);
409  } else {
410  assert(false); // crash
411  }
412  } else {
413  // we assume that the val1 argument type is the opposite of the val2 argument type
414  if (val1.mType == evil_number_float) {
415  result.fVal = val1.fVal / val2.iVal;
416  } else if (val1.mType == evil_number_int) {
417  result.fVal = val1.iVal / val2.fVal;
418  } else {
419  assert(false); // crash
420  }
421  }
422  result.mType = evil_number_float;
423  // result.CheckIntegrity();
424 
425  return result;
426 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
int64 iVal
Definition: EvilNumber.h:64

Here is the call graph for this function:

Here is the caller graph for this function:

EvilNumber EvilNumber::_Modulus ( const EvilNumber val1,
const EvilNumber val2 
)
protected

modulus this with

this modulus .

Parameters
[in]valthe value we are using as the rvalue in the modulus.

Definition at line 574 of file EvilNumber.cpp.

References evil_number_float, evil_number_int, EvilNumber(), fVal, iVal, and mType.

Referenced by operator%().

575 {
576  EvilNumber result = EvilNumber();
577 
578  // WARNING! There should be NO implicit or explicit use of the 'this' pointer here!
579  if (val2.mType == val1.mType) {
580  if (val1.mType == evil_number_float) {
581  result.iVal = (int64)(val1.fVal) % (int64)(val2.fVal);
582  result.mType = evil_number_int;
583  } else if (val1.mType == evil_number_int) {
584  result.iVal = val1.iVal % val2.iVal;
585  result.mType = evil_number_int;
586  } else {
587  assert(false); // crash
588  }
589  } else {
590  // we assume that the val1 argument type is the opposite of the val2 argument type
591  if (val1.mType == evil_number_float) {
592  result.iVal = (int64)(val1.fVal) % val2.iVal;
593  result.mType = evil_number_int;
594  } else if (val1.mType == evil_number_int) {
595  result.iVal = val1.iVal % (int64)(val2.fVal);
596  result.mType = evil_number_int;
597  } else {
598  assert(false); // crash
599  }
600  }
601  // result.CheckIntegrity();
602 
603  return result;
604 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
int64 iVal
Definition: EvilNumber.h:64
signed __int64 int64
Definition: eve-compat.h:51

Here is the call graph for this function:

Here is the caller graph for this function:

EvilNumber EvilNumber::_Multiply ( const EvilNumber val1,
const EvilNumber val2 
)
protected

multiply this with

Multiply this with .

Parameters
[in]valthe value we are multiplying with.

Definition at line 342 of file EvilNumber.cpp.

References evil_number_float, evil_number_int, EvilNumber(), fVal, iVal, and mType.

Referenced by operator*(), and operator-().

343 {
344  EvilNumber result = EvilNumber();
345  // WARNING! There should be NO implicit or explicit use of the 'this' pointer here!
346  if (val2.mType == val1.mType) {
347  if (val1.mType == evil_number_float) {
348  result.fVal = val1.fVal * val2.fVal;
349  result.mType = evil_number_float;
350  } else if (val1.mType == evil_number_int) {
351  result.iVal = val1.iVal * val2.iVal;
352  result.mType = evil_number_int;
353  } else {
354  assert(false); // crash
355  }
356  } else {
357  // we assume that the val1 argument type is the opposite of the val2 argument type
358  if (val1.mType == evil_number_float) {
359  result.fVal = val1.fVal * val2.iVal;
360  } else if (val1.mType == evil_number_int) {
361  result.fVal = val2.fVal * val1.iVal;
362  } else {
363  assert(false); // crash
364  }
365  result.mType = evil_number_float;
366  }
367  //result.CheckIntegrity();
368 
369  return result;
370 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
int64 iVal
Definition: EvilNumber.h:64

Here is the call graph for this function:

Here is the caller graph for this function:

EvilNumber EvilNumber::_SelfAdd ( const EvilNumber val)
protected

Definition at line 487 of file EvilNumber.cpp.

References evil_number_float, evil_number_int, fVal, iVal, and mType.

Referenced by _SelfIncrement(), and operator+=().

488 {
489  if (val.mType == mType) {
490  if (mType == evil_number_float) {
491  this->fVal = this->fVal + val.fVal;
492  } else if (mType == evil_number_int) {
493  this->iVal = this->iVal + val.iVal;
494  } else {
495  assert(false); // crash
496  }
497  } else {
498  // we assume that the val argument is the opposite of the 'this' type
499  if (mType == evil_number_float) {
500  this->fVal = this->fVal + double(val.iVal);
501  } else if (mType == evil_number_int) {
502  double tVal = (double)iVal; // normal integer number
503  this->fVal = tVal + val.fVal;
505  } else {
506  assert(false); // crash
507  }
508  }
509  //CheckIntegrity();
510 
511  return *this;
512 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64

Here is the caller graph for this function:

EvilNumber EvilNumber::_SelfDecrement ( )
protected

decrement by 1

decrement by 1

Definition at line 641 of file EvilNumber.cpp.

References _SelfSubtract().

Referenced by operator--().

642 {
643  return _SelfSubtract(EvilOne);
644 }
EvilNumber _SelfSubtract(const EvilNumber &val)
Definition: EvilNumber.cpp:547
EvilNumber EvilOne
Definition: EvilNumber.cpp:34

Here is the call graph for this function:

Here is the caller graph for this function:

EvilNumber EvilNumber::_SelfDivide ( const EvilNumber val)
protected

Definition at line 428 of file EvilNumber.cpp.

References evil_number_float, evil_number_int, fVal, iVal, and mType.

Referenced by operator/=().

429 {
430  if (val.mType == mType) {
431  if (mType == evil_number_float) {
432  this->fVal = this->fVal / val.fVal;
433  } else if (mType == evil_number_int) {
434  // make sure we can do things like 2 / 4 = 0.5f
435  this->fVal = double(this->iVal) / double(val.iVal);
437  } else {
438  assert(false); // crash
439  }
440  } else {
441  // we assume that the val argument is the opposite of the 'this' type
442  if (mType == evil_number_float) {
443  this->fVal = this->fVal / val.iVal;
444  } else if (mType == evil_number_int) {
445  this->fVal = iVal / val.fVal;
447  } else {
448  assert(false); // crash
449  }
450  }
451  //CheckIntegrity();
452 
453  return *this;
454 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64

Here is the caller graph for this function:

EvilNumber EvilNumber::_SelfIncrement ( )
protected

increment by 1

increment by 1

Definition at line 636 of file EvilNumber.cpp.

References _SelfAdd().

Referenced by operator++().

637 {
638  return _SelfAdd(EvilOne);
639 }
EvilNumber _SelfAdd(const EvilNumber &val)
Definition: EvilNumber.cpp:487
EvilNumber EvilOne
Definition: EvilNumber.cpp:34

Here is the call graph for this function:

Here is the caller graph for this function:

EvilNumber EvilNumber::_SelfModulus ( const EvilNumber val)
protected

Definition at line 606 of file EvilNumber.cpp.

References evil_number_float, evil_number_int, fVal, iVal, and mType.

Referenced by operator%=().

607 {
608  if (val.mType == mType) {
609  if (mType == evil_number_float) {
610  this->iVal = (int64)(this->fVal) % (int64)(val.fVal);
612  } else if (mType == evil_number_int) {
613  this->iVal = this->iVal % val.iVal;
615  } else {
616  assert(false); // crash
617  }
618 
619  } else {
620  // we assume that the val argument is the opposite of the 'this' type
621  if (mType == evil_number_float) {
622  this->iVal = (int64)(this->fVal) % val.iVal;
624  } else if (mType == evil_number_int) {
625  this->iVal = this->iVal % (int64)(val.fVal);
627  } else {
628  assert(false); // crash
629  }
630  }
631  // CheckIntegrity();
632 
633  return *this;
634 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64
signed __int64 int64
Definition: eve-compat.h:51

Here is the caller graph for this function:

EvilNumber EvilNumber::_SelfMultiply ( const EvilNumber val)
protected

Definition at line 372 of file EvilNumber.cpp.

References evil_number_float, evil_number_int, fVal, iVal, and mType.

Referenced by operator*=().

373 {
374  if (val.mType == mType) {
375  if (mType == evil_number_float) {
376  this->fVal = this->fVal * val.fVal;
377  } else if (mType == evil_number_int) {
378  this->iVal = this->iVal * val.iVal;
379  } else {
380  assert(false); // crash
381  }
382  } else {
383  // we assume that the val argument is the opposite of the 'this' type
384  if (mType == evil_number_float) {
385  this->fVal = this->fVal * val.iVal;
386  } else if (mType == evil_number_int) {
387  this->fVal = val.fVal * iVal;
389  } else {
390  assert(false); // crash
391  }
392  }
393  // CheckIntegrity();
394 
395  return *this;
396 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64

Here is the caller graph for this function:

EvilNumber EvilNumber::_SelfSubtract ( const EvilNumber val)
protected

Definition at line 547 of file EvilNumber.cpp.

References evil_number_float, evil_number_int, fVal, iVal, and mType.

Referenced by _SelfDecrement(), and operator-=().

548 {
549  if (val.mType == mType) {
550  if (mType == evil_number_float) {
551  this->fVal = this->fVal - val.fVal;
552  } else if (mType == evil_number_int) {
553  this->iVal = this->iVal - val.iVal;
554  } else {
555  assert(false); // crash
556  }
557  } else {
558  // we assume that the val argument is the opposite of the 'this' type
559  if (mType == evil_number_float) {
560  this->fVal = this->fVal - double(val.iVal);
561  } else if (mType == evil_number_int) {
562  double tVal = (double)iVal; // normal integer number
563  this->fVal = tVal - val.fVal;
565  } else {
566  assert(false); // crash
567  }
568  }
569  //CheckIntegrity();
570 
571  return *this;
572 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64

Here is the caller graph for this function:

EvilNumber EvilNumber::_Subtract ( const EvilNumber val1,
const EvilNumber val2 
)
protected

subtract this with

Subtract this with .

Parameters
[in]valthe value we are subtracting by.

Definition at line 514 of file EvilNumber.cpp.

References evil_number_float, evil_number_int, EvilNumber(), fVal, iVal, and mType.

Referenced by operator-().

515 {
516  EvilNumber result = EvilNumber();
517 
518  // WARNING! There should be NO implicit or explicit use of the 'this' pointer here!
519  if (val2.mType == val1.mType) {
520  if (val1.mType == evil_number_float) {
521  result.fVal = val1.fVal - val2.fVal;
522  result.mType = evil_number_float;
523  } else if (val1.mType == evil_number_int) {
524  result.iVal = val1.iVal - val2.iVal;
525  result.mType = evil_number_int;
526  } else {
527  assert(false); // crash
528  }
529  } else {
530  // we assume that the val argument is the opposite of the 'this' type
531  if (val1.mType == evil_number_float) {
532  result.fVal = val1.fVal - double(val2.iVal);
533  result.mType = evil_number_float;
534  } else if (val1.mType == evil_number_int) {
535  double tVal = (double)val1.iVal; // normal integer number
536  result.fVal = tVal - val2.fVal;
537  result.mType = evil_number_float;
538  } else {
539  assert(false); // crash
540  }
541  }
542  //result.CheckIntegrity();
543 
544  return result;
545 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
int64 iVal
Definition: EvilNumber.h:64

Here is the call graph for this function:

Here is the caller graph for this function:

EvilNumber EvilNumber::acos ( const EvilNumber val)
static

Definition at line 248 of file EvilNumber.cpp.

References evil_number_float, EvilNumber(), fVal, iVal, and mType.

Referenced by utils_EvilNumberTest().

249 {
250  EvilNumber result = EvilNumber();
251  if ( val.mType == evil_number_float )
252  result.fVal = std::acos( val.fVal );
253  else
254  result.fVal = std::acos( (double)(val.iVal) );
255 
256  result.mType = evil_number_float;
257  return result;
258 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
int64 iVal
Definition: EvilNumber.h:64

Here is the call graph for this function:

Here is the caller graph for this function:

EvilNumber EvilNumber::asin ( const EvilNumber val)
static

Definition at line 236 of file EvilNumber.cpp.

References evil_number_float, EvilNumber(), fVal, iVal, and mType.

Referenced by utils_EvilNumberTest().

237 {
238  EvilNumber result = EvilNumber();
239  if ( val.mType == evil_number_float )
240  result.fVal = std::asin( val.fVal );
241  else
242  result.fVal = std::asin( (double)(val.iVal) );
243 
244  result.mType = evil_number_float;
245  return result;
246 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
int64 iVal
Definition: EvilNumber.h:64

Here is the call graph for this function:

Here is the caller graph for this function:

EvilNumber EvilNumber::atan ( const EvilNumber val)
static

Definition at line 260 of file EvilNumber.cpp.

References evil_number_float, EvilNumber(), fVal, iVal, and mType.

Referenced by utils_EvilNumberTest().

261 {
262  EvilNumber result = EvilNumber();
263  if ( val.mType == evil_number_float )
264  result.fVal = std::atan( val.fVal );
265  else
266  result.fVal = std::atan( (double)(val.iVal) );
267 
268  result.mType = evil_number_float;
269  return result;
270 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
int64 iVal
Definition: EvilNumber.h:64

Here is the call graph for this function:

Here is the caller graph for this function:

void EvilNumber::CheckIntegrity ( )
inlineprotected

check if its possible a integer and do the conversion

checking every calculation for float/int conversion can be a drain on performance. But integer math is faster than floating point math.

Definition at line 126 of file EvilNumber.cpp.

References evil_number_int, fVal, iVal, and mType.

127 {
128  // check if we are already an integer
129  if (mType == evil_number_int)
130  return;
131  int64 cmp_val = (int64)fVal;
132  if (double(cmp_val) == fVal) {
133  iVal = cmp_val;
134  fVal = 0;
136  }
137 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64
signed __int64 int64
Definition: eve-compat.h:51
EvilNumber EvilNumber::cos ( const EvilNumber val)
static

Definition at line 212 of file EvilNumber.cpp.

References evil_number_float, EvilNumber(), fVal, iVal, and mType.

Referenced by utils_EvilNumberTest().

213 {
214  EvilNumber result = EvilNumber();
215  if ( val.mType == evil_number_float )
216  result.fVal = std::cos( val.fVal );
217  else
218  result.fVal = std::cos( (double)(val.iVal) );
219 
220  result.mType = evil_number_float;
221  return result;
222 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
int64 iVal
Definition: EvilNumber.h:64

Here is the call graph for this function:

Here is the caller graph for this function:

EvilNumber EvilNumber::exp ( const EvilNumber val)
static

Definition at line 327 of file EvilNumber.cpp.

References evil_number_float, EvilNumber(), fVal, iVal, and mType.

Referenced by utils_EvilNumberTest().

328 {
329  EvilNumber result = EvilNumber();
330  if ( val.mType == evil_number_float )
331  result.fVal = std::exp( val.fVal );
332  else
333  result.fVal = std::exp( (double)(val.iVal) );
334 
335  result.mType = evil_number_float;
336  return result;
337 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
int64 iVal
Definition: EvilNumber.h:64

Here is the call graph for this function:

Here is the caller graph for this function:

bool EvilNumber::get_bool ( )

Definition at line 157 of file EvilNumber.cpp.

References evil_number_float, evil_number_int, fVal, iVal, and mType.

Referenced by ModuleManager::AddModule(), InventoryItem::IsOnline(), ShipItem::MoveModuleSlot(), and InventoryItem::Populate().

158 {
159  if (mType == evil_number_float)
160  return (fVal != 0.0);
161  if (mType == evil_number_int)
162  return (iVal != 0);
163  return false;
164 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64

Here is the caller graph for this function:

float EvilNumber::get_float ( )

Definition at line 184 of file EvilNumber.cpp.

References evil_number_int, fVal, iVal, and mType.

Referenced by Concord::_UpdateDamage(), StructureSE::Activate(), ActiveModule::ActiveModule(), AnomalyMgr::AddSignal(), ShipSE::ApplyBoost(), TurretModule::ApplyDamage(), SystemEntity::ApplyDamage(), FxProc::ApplyEffects(), DroneAIMgr::AttackTarget(), ConcordAI::AttackTarget(), SystemEntity::AwardSecurityStatus(), RamMethods::Calculate(), MiningLaser::CanActivate(), ActiveModule::CanActivate(), Command_status(), Concord::Concord(), ConcordAI::ConcordAI(), CynoModule::CynoModule(), Damage::Damage(), ModuleManager::DamageModule(), ActiveModule::DeactivateCycle(), DroneSE::DroneSE(), ShipItem::GenerateHeat(), TurretFormulas::GetDroneToHit(), PIDataMgr::GetMaxOutput(), MiningLaser::GetMiningVolume(), TurretFormulas::GetNPCToHit(), TurretFormulas::GetSentryToHit(), ShipItem::GetShipArmorHP(), ShipItem::GetShipCapacitorLevel(), ShipItem::GetShipCPULevel(), ShipItem::GetShipHullHP(), ShipItem::GetShipPGLevel(), ShipItem::GetShipShieldHP(), SentryAI::GetTargetTime(), NPCAIMgr::GetTargetTime(), ConcordAI::GetTargetTime(), TurretFormulas::GetToHit(), ShipItem::HeatDamageCheck(), Missile::HitTarget(), ModuleManager::Initialize(), ModuleManager::InstallRig(), ActiveModule::LaunchMissile(), TurretModule::LoadCharge(), MiningLaser::LoadCharge(), ModuleManager::LoadCharge(), Concord::MakeDamageState(), Missile::MakeDamageState(), DroneSE::MakeDamageState(), CelestialSE::MakeDamageState(), ShipSE::MakeDamageState(), DestinyManager::MakeMissile(), NPCAIMgr::MissileLaunched(), NPC::NPC(), NPCAIMgr::NPCAIMgr(), GenericModule::Online(), DestinyManager::Orbit(), ProbeSE::ProbeSE(), ShipSE::Process(), ActiveModule::ProcessActiveCycle(), MiningLaser::ProcessCycle(), ShipItem::ProcessHeat(), Prospector::Prospector(), ProbeSE::RecoverProbe(), Sentry::Sentry(), SentryAI::SentryAI(), AttributeMap::SetAttribute(), DestinyManager::SetMaxVelocity(), ModuleItem::SetOnline(), ShipItem::SetShipArmor(), ShipItem::SetShipCapacitorLevel(), ShipItem::SetShipHull(), ShipItem::SetShipShield(), DestinyManager::SpeedBoost(), DestinyManager::TractorBeamStart(), ModuleManager::UninstallRig(), ActiveModule::UnloadCharge(), Prospector::Update(), ActiveModule::Update(), ProbeSE::UpdateProbe(), DestinyManager::UpdateShipVariables(), Concord::UseArmorRepairer(), NPC::UseArmorRepairer(), Concord::UseShieldRecharge(), NPC::UseShieldRecharge(), DestinyManager::WarpTo(), and DestinyManager::WebbedMe().

185 {
186  if (mType == evil_number_int)
187  return (float)iVal;
188  return (float)fVal;
189 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64
EVIL_NUMBER_TYPE EvilNumber::get_type ( )
inline

Definition at line 379 of file EvilNumber.h.

References mType.

379 { return mType; }
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
uint32 EvilNumber::get_uint32 ( )

Definition at line 173 of file EvilNumber.cpp.

References evil_number_float, fVal, iVal, and mType.

Referenced by StructureSE::Activate(), ActiveModule::ActiveModule(), ShipItem::AddItem(), ModuleManager::addModuleRef(), Character::AddToSkillQueue(), ShipSE::ApplyBoost(), DroneAIMgr::AttackTarget(), NPCAIMgr::AttackTarget(), ActiveModule::CanActivate(), Character::CancelSkillInTraining(), ModuleManager::deleteModuleRef(), ActiveModule::DoCycle(), Skill::FitModuleSkillCheck(), ModuleManager::GetAvailableSlotInBank(), Skill::GetCurrentSP(), PIDataMgr::GetMaxOutput(), Skill::GetRemainingSP(), Character::GetSPPerMin(), TurretFormulas::GetToHit(), Skill::GetTrainingTime(), StructureSE::Init(), ModuleManager::Initialize(), Character::InjectSkillIntoBrain(), StructureSE::Killed(), Character::LoadPausedSkillQueue(), NPCAIMgr::NPCAIMgr(), Scan::ProcessScan(), StructureSE::PullAnchor(), ProbeSE::RecoverProbe(), ShipItem::RemoveItem(), Scan::RequestScans(), StructureSE::SetAnchor(), Skill::SkillPrereqsComplete(), TargetManager::StartTargeting(), DroneAIMgr::Target(), TargetManager::TimeToLock(), ShipItem::TryModuleLimitChecks(), ProbeSE::UpdateProbe(), ShipItem::ValidateBoardShip(), and ShipItem::VerifyHoldType().

174 {
175  uint32 value(0);
176  if (mType == evil_number_float)
177  value = (uint32)floor(fVal);
178  else
179  value = (uint32)iVal;
180 
181  return value;
182 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64
unsigned __int32 uint32
Definition: eve-compat.h:50

Here is the caller graph for this function:

PyRep * EvilNumber::GetPyObject ( )

converts the EvilNumber into a python object.

Returns
the python object of the EvilNumber.

Definition at line 109 of file EvilNumber.cpp.

References evil_number_float, evil_number_int, fVal, iVal, mType, PyStatic, sLog, and EvE::traceStack().

Referenced by AttributeMap::Add(), AttributeMap::Change(), and InventoryItem::Populate().

110 {
111  if (mType == evil_number_int) {
112  if ( iVal > INT_MAX || iVal < INT_MIN)
113  return (PyRep*)new PyLong(iVal);
114  else
115  return (PyRep*)new PyInt((int32)(iVal));
116  } else if (mType == evil_number_float) {
117  return (PyRep*)new PyFloat(fVal);
118  } else {
119  sLog.Error("EvilNumber::GetPyObject()", "EvilNumber is neither integer nor float. Returning None");
120  EvE::traceStack();
121  assert(false);
122  return PyStatic.NewNone();
123  }
124 }
Base Python wire object.
Definition: PyRep.h:66
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
Python floating point number.
Definition: PyRep.h:292
int64 iVal
Definition: EvilNumber.h:64
signed __int32 int32
Definition: eve-compat.h:49
#define sLog
Evaluates to a NewLog instance.
Definition: LogNew.h:250
Python integer.
Definition: PyRep.h:231
#define PyStatic
Definition: PyRep.h:1209
void traceStack(void)
Definition: misc.cpp:169
Python long integer.
Definition: PyRep.h:261

Here is the call graph for this function:

Here is the caller graph for this function:

bool EvilNumber::isFloat ( )
inline

Definition at line 382 of file EvilNumber.h.

References evil_number_float.

Referenced by AttributeMap::SetAttribute().

382 { return ( mType == evil_number_float ); }
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65

Here is the caller graph for this function:

bool EvilNumber::isInf ( )

Definition at line 148 of file EvilNumber.cpp.

References evil_number_int, evil_number_nan, fVal, and mType.

Referenced by AttributeMap::MultiplyAttribute(), and AttributeMap::SetAttribute().

149 {
150  if ( mType == evil_number_nan )
151  return true;
152  if ( mType == evil_number_int )
153  return false;
154  return std::isinf(fVal);
155 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65

Here is the caller graph for this function:

bool EvilNumber::isInt ( )
inline

Definition at line 381 of file EvilNumber.h.

References evil_number_int.

381 { return ( mType == evil_number_int ); }
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
bool EvilNumber::isNaN ( )

Definition at line 139 of file EvilNumber.cpp.

References evil_number_int, evil_number_nan, fVal, and mType.

Referenced by AttributeMap::MultiplyAttribute(), and AttributeMap::SetAttribute().

140 {
141  if( mType == evil_number_nan )
142  return true;
143  if ( mType == evil_number_int )
144  return false;
145  return std::isnan(fVal);
146 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65

Here is the caller graph for this function:

EvilNumber EvilNumber::log ( const EvilNumber val)
static

Definition at line 303 of file EvilNumber.cpp.

References evil_number_float, EvilNumber(), fVal, iVal, and mType.

Referenced by utils_EvilNumberTest().

304 {
305  EvilNumber result = EvilNumber();
306  if ( val.mType == evil_number_float )
307  result.fVal = std::log( val.fVal );
308  else
309  result.fVal = std::log( (double)(val.iVal) );
310 
311  result.mType = evil_number_float;
312  return result;
313 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
int64 iVal
Definition: EvilNumber.h:64

Here is the call graph for this function:

Here is the caller graph for this function:

EvilNumber EvilNumber::log10 ( const EvilNumber val)
static

Definition at line 315 of file EvilNumber.cpp.

References evil_number_float, EvilNumber(), fVal, iVal, and mType.

Referenced by utils_EvilNumberTest().

316 {
317  EvilNumber result = EvilNumber();
318  if ( val.mType == evil_number_float )
319  result.fVal = std::log10( val.fVal );
320  else
321  result.fVal = std::log10( (double)(val.iVal) );
322 
323  result.mType = evil_number_float;
324  return result;
325 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
int64 iVal
Definition: EvilNumber.h:64

Here is the call graph for this function:

Here is the caller graph for this function:

bool EvilNumber::operator!= ( const EvilNumber val)
inline

Definition at line 264 of file EvilNumber.h.

References evil_number_float, evil_number_int, fVal, iVal, and mType.

265  {
266  if (this->mType == evil_number_int && val.mType == evil_number_int)
267  return this->iVal != val.iVal;
268  else if (this->mType == evil_number_float && val.mType == evil_number_float)
269  return this->fVal != val.fVal;
270  else if (this->mType == evil_number_float)
271  return this->fVal != double(val.iVal);
272  else
273  return double(this->iVal) != val.fVal;
274  }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64
EvilNumber EvilNumber::operator% ( const EvilNumber val)
inline

Definition at line 111 of file EvilNumber.h.

References _Modulus().

112  { return _Modulus(*this, val); }
EvilNumber _Modulus(const EvilNumber &val1, const EvilNumber &val2)
modulus this with
Definition: EvilNumber.cpp:574

Here is the call graph for this function:

EvilNumber EvilNumber::operator%= ( const EvilNumber val)
inline

Definition at line 114 of file EvilNumber.h.

References _SelfModulus().

115  { return _SelfModulus(val); }
EvilNumber _SelfModulus(const EvilNumber &val)
Definition: EvilNumber.cpp:606

Here is the call graph for this function:

EvilNumber EvilNumber::operator* ( const EvilNumber val)
inline

Definition at line 84 of file EvilNumber.h.

References _Multiply().

85  { return _Multiply(*this, val); }
EvilNumber _Multiply(const EvilNumber &val1, const EvilNumber &val2)
multiply this with
Definition: EvilNumber.cpp:342

Here is the call graph for this function:

EvilNumber EvilNumber::operator*= ( const EvilNumber val)
inline

Definition at line 87 of file EvilNumber.h.

References _SelfMultiply().

88  { return _SelfMultiply(val); }
EvilNumber _SelfMultiply(const EvilNumber &val)
Definition: EvilNumber.cpp:372

Here is the call graph for this function:

EvilNumber EvilNumber::operator+ ( const EvilNumber val)
inline

Definition at line 96 of file EvilNumber.h.

References _Add().

97  { return _Add(*this, val); }
EvilNumber _Add(const EvilNumber &val1, const EvilNumber &val2)
add this with
Definition: EvilNumber.cpp:456

Here is the call graph for this function:

EvilNumber EvilNumber::operator++ ( )
inline

Definition at line 117 of file EvilNumber.h.

References _SelfIncrement().

118  { return _SelfIncrement(); }
EvilNumber _SelfIncrement()
increment by 1
Definition: EvilNumber.cpp:636

Here is the call graph for this function:

EvilNumber EvilNumber::operator++ ( int  )
inline

Definition at line 120 of file EvilNumber.h.

References _SelfIncrement().

121  {
122  EvilNumber temp = *this;
123  _SelfIncrement();
124  return temp;
125  }
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
EvilNumber _SelfIncrement()
increment by 1
Definition: EvilNumber.cpp:636

Here is the call graph for this function:

EvilNumber EvilNumber::operator+= ( const EvilNumber val)
inline

Definition at line 99 of file EvilNumber.h.

References _SelfAdd().

100  { return _SelfAdd(val); }
EvilNumber _SelfAdd(const EvilNumber &val)
Definition: EvilNumber.cpp:487

Here is the call graph for this function:

EvilNumber EvilNumber::operator- ( const EvilNumber val)
inline

Definition at line 102 of file EvilNumber.h.

References _Subtract().

103  { return _Subtract(*this, val); }
EvilNumber _Subtract(const EvilNumber &val1, const EvilNumber &val2)
subtract this with
Definition: EvilNumber.cpp:514

Here is the call graph for this function:

EvilNumber EvilNumber::operator- ( )
inline

Definition at line 105 of file EvilNumber.h.

References _Multiply(), and EvilNumber().

106  { return _Multiply(EvilNumber(-1.0), *this); }
EvilNumber _Multiply(const EvilNumber &val1, const EvilNumber &val2)
multiply this with
Definition: EvilNumber.cpp:342

Here is the call graph for this function:

EvilNumber EvilNumber::operator-- ( )
inline

Definition at line 127 of file EvilNumber.h.

References _SelfDecrement().

128  { return _SelfDecrement(); }
EvilNumber _SelfDecrement()
decrement by 1
Definition: EvilNumber.cpp:641

Here is the call graph for this function:

EvilNumber EvilNumber::operator-- ( int  )
inline

Definition at line 130 of file EvilNumber.h.

References _SelfDecrement().

131  {
132  EvilNumber temp = *this;
133  _SelfDecrement();
134  return temp;
135  }
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
EvilNumber _SelfDecrement()
decrement by 1
Definition: EvilNumber.cpp:641

Here is the call graph for this function:

EvilNumber EvilNumber::operator-= ( const EvilNumber val)
inline

Definition at line 108 of file EvilNumber.h.

References _SelfSubtract().

109  { return _SelfSubtract(val); }
EvilNumber _SelfSubtract(const EvilNumber &val)
Definition: EvilNumber.cpp:547

Here is the call graph for this function:

EvilNumber EvilNumber::operator/ ( const EvilNumber val)
inline

Definition at line 90 of file EvilNumber.h.

References _Divide().

91  { return _Divide(*this, val); }
EvilNumber _Divide(const EvilNumber &val1, const EvilNumber &val2)
divide this with
Definition: EvilNumber.cpp:398

Here is the call graph for this function:

EvilNumber EvilNumber::operator/= ( const EvilNumber val)
inline

Definition at line 93 of file EvilNumber.h.

References _SelfDivide().

94  { return _SelfDivide(val); }
EvilNumber _SelfDivide(const EvilNumber &val)
Definition: EvilNumber.cpp:428

Here is the call graph for this function:

bool EvilNumber::operator< ( const EvilNumber val)
inline

Definition at line 276 of file EvilNumber.h.

References evil_number_float, evil_number_int, fVal, iVal, and mType.

277  {
278  if (this->mType == evil_number_int && val.mType == evil_number_int)
279  return this->iVal < val.iVal;
280  else if (this->mType == evil_number_float && val.mType == evil_number_float)
281  return this->fVal < val.fVal;
282  else if (this->mType == evil_number_float)
283  return this->fVal < double(val.iVal);
284  else
285  return double(this->iVal) < val.fVal;
286  }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64
bool EvilNumber::operator<= ( const EvilNumber val)
inline

Definition at line 300 of file EvilNumber.h.

References evil_number_float, evil_number_int, fVal, iVal, and mType.

301  {
302  if (this->mType == evil_number_int && val.mType == evil_number_int)
303  return this->iVal <= val.iVal;
304  else if (this->mType == evil_number_float && val.mType == evil_number_float)
305  return this->fVal <= val.fVal;
306  else if (this->mType == evil_number_float)
307  return this->fVal <= double(val.iVal);
308  else
309  return double(this->iVal) <= val.fVal;
310  }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64
bool EvilNumber::operator== ( const EvilNumber val)
inline

'==' operator overload

Parameters
[in]val
Returns
will return true when this and val are equal
Note
can I create 2 floats that would be equal when doing normal float compare and not equal when doing integer compare.

Definition at line 251 of file EvilNumber.h.

References evil_number_float, and evil_number_int.

252  {
253  if (this->mType == evil_number_int && val.mType == evil_number_int)
254  return this->iVal == val.iVal;
255  else if (this->mType == evil_number_float && val.mType == evil_number_float)
256  return this->fVal == val.fVal;
257  else if (this->mType == evil_number_float)
258  return this->fVal == double(val.iVal);
259  else
260  return double(this->iVal) == val.fVal;
261  }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64
bool EvilNumber::operator> ( const EvilNumber val)
inline

Definition at line 288 of file EvilNumber.h.

References evil_number_float, evil_number_int, fVal, iVal, and mType.

289  {
290  if (this->mType == evil_number_int && val.mType == evil_number_int)
291  return this->iVal > val.iVal;
292  else if (this->mType == evil_number_float && val.mType == evil_number_float)
293  return this->fVal > val.fVal;
294  else if (this->mType == evil_number_float)
295  return this->fVal > double(val.iVal);
296  else
297  return double(this->iVal) > val.fVal;
298  }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64
bool EvilNumber::operator>= ( const EvilNumber val)
inline

Definition at line 312 of file EvilNumber.h.

References evil_number_float, evil_number_int, fVal, iVal, and mType.

313  {
314  if (this->mType == evil_number_int && val.mType == evil_number_int)
315  return this->iVal >= val.iVal;
316  else if (this->mType == evil_number_float && val.mType == evil_number_float)
317  return this->fVal >= val.fVal;
318  else if (this->mType == evil_number_float)
319  return this->fVal >= double(val.iVal);
320  else
321  return double(this->iVal) >= val.fVal;
322  }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64
EvilNumber EvilNumber::pow ( const EvilNumber val1,
const EvilNumber val2 
)
static

Definition at line 284 of file EvilNumber.cpp.

References evil_number_float, EvilNumber(), fVal, iVal, and mType.

Referenced by utils_EvilNumberTest().

285 {
286  EvilNumber exponent = EvilNumber();
287  EvilNumber result = EvilNumber();
288  if ( val2.mType == evil_number_float )
289  exponent.fVal = val2.fVal;
290  else
291  exponent.fVal = (double)(val2.iVal);
292  exponent.mType = evil_number_float;
293 
294  if( val1.mType == evil_number_float )
295  result.fVal = std::pow( val1.fVal, exponent.fVal );
296  else
297  result.fVal = std::pow( (double)(val1.iVal), exponent.fVal );
298 
299  result.mType = evil_number_float;
300  return result;
301 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
int64 iVal
Definition: EvilNumber.h:64

Here is the call graph for this function:

Here is the caller graph for this function:

EvilNumber EvilNumber::sin ( const EvilNumber val)
static

??

Parameters
[in]val
Returns

Definition at line 200 of file EvilNumber.cpp.

References evil_number_float, EvilNumber(), fVal, iVal, and mType.

Referenced by utils_EvilNumberTest().

201 {
202  EvilNumber result = EvilNumber();
203  if ( val.mType == evil_number_float )
204  result.fVal = std::sin( val.fVal );
205  else
206  result.fVal = std::sin( (double)(val.iVal) );
207 
208  result.mType = evil_number_float;
209  return result;
210 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
int64 iVal
Definition: EvilNumber.h:64

Here is the call graph for this function:

Here is the caller graph for this function:

EvilNumber EvilNumber::sqrt ( const EvilNumber val)
static

Definition at line 272 of file EvilNumber.cpp.

References evil_number_float, EvilNumber(), fVal, iVal, and mType.

Referenced by utils_EvilNumberTest().

273 {
274  EvilNumber result = EvilNumber();
275  if ( val.mType == evil_number_float )
276  result.fVal = std::sqrt( val.fVal );
277  else
278  result.fVal = std::sqrt( (double)(val.iVal) );
279 
280  result.mType = evil_number_float;
281  return result;
282 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
int64 iVal
Definition: EvilNumber.h:64

Here is the call graph for this function:

Here is the caller graph for this function:

EvilNumber EvilNumber::tan ( const EvilNumber val)
static

Definition at line 224 of file EvilNumber.cpp.

References evil_number_float, EvilNumber(), fVal, iVal, and mType.

Referenced by utils_EvilNumberTest().

225 {
226  EvilNumber result = EvilNumber();
227  if ( val.mType == evil_number_float )
228  result.fVal = std::tan( val.fVal );
229  else
230  result.fVal = std::tan( (double)(val.iVal) );
231 
232  result.mType = evil_number_float;
233  return result;
234 }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
int64 iVal
Definition: EvilNumber.h:64

Here is the call graph for this function:

Here is the caller graph for this function:

std::string EvilNumber::to_str ( )
inline

converts the EvilNumber value into a string

Returns
the text representative of the value.

Definition at line 360 of file EvilNumber.h.

References evil_number_float, evil_number_int, and snprintf.

Referenced by utils_EvilNumberTest().

361  {
362  char buff[32]; // max uint32 will result in a 10 char string, a float will result in a ? char string.
363  if (mType == evil_number_int)
364  snprintf(buff, 32, "%li", iVal);
365  else if (mType == evil_number_float)
366  snprintf(buff, 32, "%f", fVal);
367  else
368  assert(false); // bleh crash..
369  return std::string(buff);
370  }
double fVal
Definition: EvilNumber.h:63
EVIL_NUMBER_TYPE mType
Definition: EvilNumber.h:65
int64 iVal
Definition: EvilNumber.h:64
#define snprintf
Definition: eve-compat.h:184

Here is the caller graph for this function:

Member Data Documentation


The documentation for this class was generated from the following files: