implemented ostream output op for integer.cpp

This commit is contained in:
Pagwin 2024-12-11 15:45:53 -05:00
parent 3b3470ed35
commit 01c0cbb0ec
No known key found for this signature in database
GPG key ID: 81137023740CA260

View file

@ -2,6 +2,8 @@
#include <cassert> #include <cassert>
#include <cstddef> #include <cstddef>
#include <iostream> #include <iostream>
#include <sstream>
#include <string>
#define todo(msg) \ #define todo(msg) \
std::cerr << msg << std::endl; \ std::cerr << msg << std::endl; \
assert(false); assert(false);
@ -115,6 +117,12 @@ public:
ret %= rhs; ret %= rhs;
return ret; return ret;
} }
friend Integer operator%(Integer const &lhs, byte rhs) {
if (lhs.size == 0 || lhs.bytes == nullptr) {
return 0;
}
return lhs.bytes[0] % rhs;
}
friend Integer operator-(Integer const &val) { friend Integer operator-(Integer const &val) {
Integer ret = val; Integer ret = val;
ret.isNegative = !ret.isNegative; ret.isNegative = !ret.isNegative;
@ -135,10 +143,24 @@ public:
} }
friend std::ostream &operator<<(std::ostream &lhs, Integer const &rhs) { friend std::ostream &operator<<(std::ostream &lhs, Integer const &rhs) {
Integer discard = rhs; if (rhs == 0) {
lhs << 0;
return lhs; return lhs;
} }
Integer discard = rhs;
std::stringstream to_output{};
while (discard != 0) {
to_output << discard % 10;
discard /= 10;
}
std::string out;
to_output >> out;
std::reverse(out.begin(), out.end());
lhs << out;
return lhs;
}
explicit operator unsigned long() { explicit operator unsigned long() {
unsigned long ret = 0; unsigned long ret = 0;
for (std::size_t i = 0; i < std::min(size, sizeof(unsigned long)); i++) { for (std::size_t i = 0; i < std::min(size, sizeof(unsigned long)); i++) {