From 255654b2845044bf537bee042913e4d7db9f1408 Mon Sep 17 00:00:00 2001 From: Pagwin Date: Wed, 11 Dec 2024 16:25:58 -0500 Subject: [PATCH] negatives in addition are handled just need to do abs_sub and I'm done with draft --- integer.cpp | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/integer.cpp b/integer.cpp index 4448de8..3b26cc6 100644 --- a/integer.cpp +++ b/integer.cpp @@ -95,8 +95,8 @@ public: } return false; } - friend Integer &operator+=(Integer &lhs, Integer const &rhs) { - // TODO: negative numbers + + friend Integer &abs_add(Integer &lhs, Integer const &rhs) { bool overflow = false; for (std::size_t i = 0; i < std::min(lhs.size, rhs.size); i++) { if (std::numeric_limits::max() - lhs.bytes[i] <= rhs.bytes[i]) { @@ -124,9 +124,26 @@ public: } return lhs; } + friend Integer &abs_sub(Integer &lhs, Integer const &rhs) { return lhs; } + friend Integer &operator+=(Integer &lhs, Integer const &rhs) { + // TODO: negative numbers + if (lhs.isNegative == rhs.isNegative) { + return abs_add(lhs, rhs); + } else { + if (abs_lt(rhs, lhs)) { + return abs_sub(lhs, rhs); + } else if (abs_lt(lhs, rhs)) { + Integer tmp = std::move(lhs); + lhs = rhs; + return abs_sub(lhs, tmp); + } else { + lhs = 0; + return lhs; + } + } + } friend Integer &operator-=(Integer &lhs, Integer const &rhs) { - todo("-="); - return lhs; + return lhs += -rhs; } friend Integer &operator*=(Integer &lhs, Integer const &rhs) { Integer tmp = std::move(lhs);