Guest User

Untitled

a guest
Apr 20th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. friend std::ostream& operator<< (std::ostream &o, const double_uint &x)
  2. {
  3. return o << std::string(x);
  4. }
  5. double_uint& operator= (int x)
  6. {
  7. lo_ = x;
  8. hi_ = T();
  9. return *this;
  10. }
  11. double_uint& operator=(const double_uint &u)
  12. {
  13. lo_ = u.lo_;
  14. hi_ = u.hi_;
  15. return *this;
  16. }
  17. operator T() const {return lo_;}
  18. operator T() {return lo_;}
  19. operator const std::string() const {return tostring();}
  20. operator std::string() {return tostring();
  21. }
  22. double_uint operator+= (const double_uint &u)
  23. {
  24. T old = lo_;
  25. lo_ += u.lo_;
  26. if (lo_ < old) hi_++;
  27. hi_ += u.hi_;
  28. return *this;
  29. }
  30. double_uint operator-= (const double_uint &u)
  31. {
  32. T old = lo_;
  33. lo_ -= u.lo_;
  34. if (lo_ > old) hi_--;
  35. hi_ -= u.lo_;
  36. return *this;
  37. }
  38. double_uint operator+ (const double_uint &u) const
  39. {
  40. double_uint res(*this);
  41. return res += u;
  42. }
  43. double_uint operator- (const double_uint &u) const
  44. {
  45. double_uint res(*this);
  46. return res -= u;
  47. }
  48. double_uint operator++ (void)
  49. {
  50. return *this += double_uint(1);
  51. }
  52. double_uint operator++ (int)
  53. {
  54. double_uint res(*this);
  55. *this += double_uint(0, 1);
  56. return res;
  57. }
  58. double_uint operator- (void)
  59. {
  60. return double_uint(0) - *this;
  61. }
  62. double_uint operator+ (void) const
  63. {
  64. return *this;
  65. }
  66. double_uint operator<<= (int x)
  67. {
  68. x &= (tsize - 1);
  69. if (x >= hsize)
  70. {
  71. hi_ = lo_ << (x - hsize);
  72. lo_ = 0;
  73. return *this;
  74. }
  75. hi_ <<= x;
  76. hi_ += lo_ >> (hsize - x);
  77. lo_ <<= x;
  78. return *this;
  79. }
  80. double_uint operator>>= (int x)
  81. {
  82. x &= (tsize - 1);
  83. if (x >= hsize)
  84. {
  85. lo_ = hi_ >> (x - hsize);
  86. hi_ = 0;
  87. return *this;
  88. }
  89. lo_ >>= x;
  90. lo_ += hi_ << (hsize - x);
  91. hi_ >>= x;
  92. return *this;
  93. }
  94. double_uint operator<< (int x) const
  95. {
  96. double_uint res(*this);
  97. return res <<= x;
  98. }
  99. double_uint operator>> (int x) const
  100. {
  101. double_uint res(*this);
  102. return res >>= x;
  103. }
Add Comment
Please, Sign In to add comment