diff options
Diffstat (limited to 'number.cpp')
-rw-r--r-- | number.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
@@ -106,6 +106,33 @@ number::operator*(const number &n) const return result; } +number +number::operator<<(std::uint32_t shift) const +{ + if (shift > 32) { + /* TODO */ + throw std::out_of_range("> 32"); + } + + number result(*this); + + std::uint32_t carry = 0; + + for (auto &operand: result._operands) { + std::uint32_t tmp = ((1ull * operand) << shift) + carry; + + carry = ((1ull * operand) >> (32 - shift)); + + operand = tmp; + } + + if (carry) { + result._operands.push_back(carry); + } + + return result; +} + /* }}} */ /* Comparison operators {{{ */ @@ -174,6 +201,14 @@ number::operator+=(const number &n) } number & +number::operator<<=(std::uint32_t n) +{ + *this = *this << n; + + return *this; +} + +number & number::operator++() { *this = *this + 1; |