negatives in addition are handled just need to do abs_sub and I'm done with draft

This commit is contained in:
Pagwin 2024-12-11 16:25:58 -05:00
parent 35efa772f0
commit 255654b284
No known key found for this signature in database
GPG key ID: 81137023740CA260

View file

@ -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<byte>::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);