modulo_num.cc 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include <cassert>
  2. #include "modulo_num.h"
  3. ModuloNum::ModuloNum(UInt32 max_value, UInt32 value) :
  4. m_value(value),
  5. m_max_value(max_value)
  6. {}
  7. ModuloNum::~ModuloNum()
  8. {}
  9. ModuloNum
  10. ModuloNum::operator+(const ModuloNum& num) const
  11. {
  12. ModuloNum new_num(m_max_value);
  13. assert(m_max_value == num.getMaxValue());
  14. new_num.setValue((m_value + num.getValue()) % m_max_value);
  15. return new_num;
  16. }
  17. ModuloNum
  18. ModuloNum::operator-(const ModuloNum& num) const
  19. {
  20. ModuloNum new_num(m_max_value);
  21. assert(m_max_value == num.getMaxValue());
  22. if (m_value >= num.getValue())
  23. new_num.setValue(m_value - num.getValue());
  24. else
  25. new_num.setValue(m_max_value - num.getValue() + m_value);
  26. return new_num;
  27. }
  28. ModuloNum
  29. ModuloNum::operator+(UInt32 value) const
  30. {
  31. ModuloNum num(m_max_value);
  32. num.setValue(value % m_max_value);
  33. return (*this + num);
  34. }
  35. ModuloNum
  36. ModuloNum::operator-(UInt32 value) const
  37. {
  38. ModuloNum num(m_max_value);
  39. num.setValue(value % m_max_value);
  40. return (*this - num);
  41. }
  42. bool
  43. ModuloNum::operator==(const ModuloNum& num) const
  44. {
  45. return ((m_value == num.getValue()) && (m_max_value == num.getMaxValue()));
  46. }
  47. bool
  48. ModuloNum::operator!=(const ModuloNum& num) const
  49. {
  50. return (!(*this == num));
  51. }