diff options
Diffstat (limited to 'number.cpp')
-rw-r--r-- | number.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
@@ -1,5 +1,46 @@ #include "number.h" +/* Operations {{{ */ + +number +number::operator+(const number &n) const +{ + /* We make sure our object is greater than or equal to n. */ + if (*this < n) { + return n.operator+(*this); + } + + number result; + + auto it = _operands.cbegin(); + auto it_n = n._operands.cbegin(); + + bool carry = false; + + while (it != _operands.cend()) { + const auto n1 = *it; + const auto n2 = *it_n; + + result._operands.push_back(n1 + n2 + (carry ? 1 : 0)); + + if (carry && (n1 == UINT64_MAX)) { + carry = true; + } else { + carry = ((UINT64_MAX - n1 - (carry ? 1 : 0)) < n2); + } + + ++it; + ++it_n; + } + + if (carry) { + result._operands.push_back(1); + } + + return result; +} + +/* }}} */ /* Comparison operators {{{ */ bool |