Double.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. /*
  2. * Author: Patrick-Christopher Mattulat
  3. * Company: Lynar Studios
  4. * E-Mail: webmaster@lynarstudios.com
  5. * Created: 2020-08-14
  6. * Changed: 2023-02-04
  7. *
  8. * */
  9. #include <cmath>
  10. #include <ls-std/boxing/Double.hpp>
  11. #include <ls-std/core/exception/IllegalArgumentException.hpp>
  12. ls::std::boxing::Double::Double() : ls::std::core::Class("Double")
  13. {
  14. this->_assignEpsilon(0.00000001);
  15. }
  16. ls::std::boxing::Double::Double(double _value)
  17. : ls::std::core::Class("Double"),
  18. value(_value)
  19. {
  20. this->_assignEpsilon(0.00000001);
  21. }
  22. ls::std::boxing::Double::~Double() = default;
  23. ls::std::boxing::Double::operator double() const
  24. {
  25. return this->value;
  26. }
  27. ls::std::boxing::Double &ls::std::boxing::Double::operator=(double _value)
  28. {
  29. this->value = _value;
  30. return *this;
  31. }
  32. double ls::std::boxing::Double::operator-() const
  33. {
  34. return -this->value;
  35. }
  36. double ls::std::boxing::Double::operator+(const ls::std::boxing::Double &_double) const
  37. {
  38. return this->value + _double;
  39. }
  40. double ls::std::boxing::Double::operator+(double _value) const
  41. {
  42. return this->value + _value;
  43. }
  44. double ls::std::boxing::Double::operator*(const ls::std::boxing::Double &_double) const
  45. {
  46. return this->value * _double;
  47. }
  48. double ls::std::boxing::Double::operator*(double _value) const
  49. {
  50. return this->value * _value;
  51. }
  52. double ls::std::boxing::Double::operator-(const ls::std::boxing::Double &_double) const
  53. {
  54. return this->value - _double;
  55. }
  56. double ls::std::boxing::Double::operator-(double _value) const
  57. {
  58. return this->value - _value;
  59. }
  60. double ls::std::boxing::Double::operator/(const ls::std::boxing::Double &_double) const
  61. {
  62. return this->value / _double;
  63. }
  64. double ls::std::boxing::Double::operator/(double _value) const
  65. {
  66. return this->value / _value;
  67. }
  68. ls::std::boxing::Double &ls::std::boxing::Double::operator+=(const ls::std::boxing::Double &_double)
  69. {
  70. this->value += _double;
  71. return *this;
  72. }
  73. ls::std::boxing::Double &ls::std::boxing::Double::operator+=(double _value)
  74. {
  75. this->value += _value;
  76. return *this;
  77. }
  78. ls::std::boxing::Double &ls::std::boxing::Double::operator-=(const ls::std::boxing::Double &_double)
  79. {
  80. this->value -= _double;
  81. return *this;
  82. }
  83. ls::std::boxing::Double &ls::std::boxing::Double::operator-=(double _value)
  84. {
  85. this->value -= _value;
  86. return *this;
  87. }
  88. ls::std::boxing::Double &ls::std::boxing::Double::operator*=(const ls::std::boxing::Double &_double)
  89. {
  90. this->value *= _double;
  91. return *this;
  92. }
  93. ls::std::boxing::Double &ls::std::boxing::Double::operator*=(double _value)
  94. {
  95. this->value *= _value;
  96. return *this;
  97. }
  98. ls::std::boxing::Double &ls::std::boxing::Double::operator/=(const ls::std::boxing::Double &_double)
  99. {
  100. this->value /= _double;
  101. return *this;
  102. }
  103. ls::std::boxing::Double &ls::std::boxing::Double::operator/=(double _value)
  104. {
  105. this->value /= _value;
  106. return *this;
  107. }
  108. bool ls::std::boxing::Double::operator==(const ls::std::boxing::Double &_double) const
  109. {
  110. return ::std::fabs(this->value - _double) < this->epsilon;
  111. }
  112. bool ls::std::boxing::Double::operator==(double _value) const
  113. {
  114. return ::std::fabs(this->value - _value) < this->epsilon;
  115. }
  116. bool ls::std::boxing::Double::operator!=(const ls::std::boxing::Double &_double) const
  117. {
  118. return ::std::fabs(this->value - _double) >= this->epsilon;
  119. }
  120. bool ls::std::boxing::Double::operator!=(double _value) const
  121. {
  122. return ::std::fabs(this->value - _value) >= this->epsilon;
  123. }
  124. bool ls::std::boxing::Double::operator>(const ls::std::boxing::Double &_double) const
  125. {
  126. return this->value > _double;
  127. }
  128. bool ls::std::boxing::Double::operator>(double _value) const
  129. {
  130. return this->value > _value;
  131. }
  132. bool ls::std::boxing::Double::operator>=(const ls::std::boxing::Double &_double) const
  133. {
  134. return this->value >= _double;
  135. }
  136. bool ls::std::boxing::Double::operator>=(double _value) const
  137. {
  138. return this->value >= _value;
  139. }
  140. bool ls::std::boxing::Double::operator<(const ls::std::boxing::Double &_double) const
  141. {
  142. return this->value < _double;
  143. }
  144. bool ls::std::boxing::Double::operator<(double _value) const
  145. {
  146. return this->value < _value;
  147. }
  148. bool ls::std::boxing::Double::operator<=(const ls::std::boxing::Double &_double) const
  149. {
  150. return this->value <= _double;
  151. }
  152. bool ls::std::boxing::Double::operator<=(double _value) const
  153. {
  154. return this->value <= _value;
  155. }
  156. void ls::std::boxing::Double::operator++()
  157. {
  158. this->value += 1.0f;
  159. }
  160. void ls::std::boxing::Double::operator--()
  161. {
  162. this->value -= 1.0f;
  163. }
  164. void ls::std::boxing::Double::parse(::std::string _parseText)
  165. {
  166. this->value = ::std::stod(_parseText);
  167. }
  168. ::std::string ls::std::boxing::Double::toString()
  169. {
  170. return ::std::to_string(this->value);
  171. }
  172. double ls::std::boxing::Double::getEpsilon()
  173. {
  174. return this->epsilon;
  175. }
  176. double ls::std::boxing::Double::getValue()
  177. {
  178. return this->value;
  179. }
  180. void ls::std::boxing::Double::setEpsilon(double _epsilon)
  181. {
  182. this->_assignEpsilon(_epsilon);
  183. }
  184. void ls::std::boxing::Double::_assignEpsilon(double _epsilon)
  185. {
  186. if (_epsilon <= 0.0)
  187. {
  188. throw ls::std::core::IllegalArgumentException{};
  189. }
  190. this->epsilon = _epsilon;
  191. }