negatives in addition are handled just need to do abs_sub and I'm done with draft
This commit is contained in:
parent
35efa772f0
commit
255654b284
1 changed files with 21 additions and 4 deletions
25
integer.cpp
25
integer.cpp
|
@ -95,8 +95,8 @@ public:
|
||||||
}
|
}
|
||||||
return false;
|
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;
|
bool overflow = false;
|
||||||
for (std::size_t i = 0; i < std::min(lhs.size, rhs.size); i++) {
|
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]) {
|
if (std::numeric_limits<byte>::max() - lhs.bytes[i] <= rhs.bytes[i]) {
|
||||||
|
@ -124,9 +124,26 @@ public:
|
||||||
}
|
}
|
||||||
return lhs;
|
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) {
|
friend Integer &operator-=(Integer &lhs, Integer const &rhs) {
|
||||||
todo("-=");
|
return lhs += -rhs;
|
||||||
return lhs;
|
|
||||||
}
|
}
|
||||||
friend Integer &operator*=(Integer &lhs, Integer const &rhs) {
|
friend Integer &operator*=(Integer &lhs, Integer const &rhs) {
|
||||||
Integer tmp = std::move(lhs);
|
Integer tmp = std::move(lhs);
|
||||||
|
|
Loading…
Reference in a new issue