budget/src/models/money.cpp

51 lines
1.6 KiB
C++
Raw Normal View History

2023-02-05 18:22:40 -06:00
//
// Created by quentin on 2/5/23.
//
#include "money.h"
long long Budget::Models::Money::getDollars() const { return dollars; }
long long Budget::Models::Money::getCents() const { return cents; }
Budget::Models::Money Budget::Models::operator+(const Budget::Models::Money &lhs, const Budget::Models::Money &rhs) {
long long total_cents = lhs.cents + rhs.cents;
long long total_dollars = lhs.dollars + rhs.dollars + total_cents / 100;
total_cents = total_cents % 100;
return {total_dollars, total_cents};
}
Budget::Models::Money Budget::Models::operator-(const Budget::Models::Money &lhs, const Budget::Models::Money &rhs) {
long long total_cents = lhs.dollars * 100 + lhs.cents - rhs.dollars * 100 - rhs.cents;
return {total_cents / 100, std::abs(total_cents % 100)};
}
bool Budget::Models::operator==(const Budget::Models::Money &lhs, const Budget::Models::Money &rhs) {
return lhs.dollars == rhs.dollars && lhs.cents == rhs.cents;
}
bool Budget::Models::operator<(const Budget::Models::Money &lhs, const Budget::Models::Money &rhs) {
return lhs.dollars * 100 + lhs.cents < rhs.dollars * 100 + rhs.cents;
}
bool Budget::Models::Money::operator>(const Budget::Models::Money &rhs) const {
return rhs < *this;
}
bool Budget::Models::Money::operator<=(const Budget::Models::Money &rhs) const {
return !(rhs < *this);
}
bool Budget::Models::Money::operator>=(const Budget::Models::Money &rhs) const {
return !(*this < rhs);
}
std::ostream &operator<<(std::ostream &os, const Budget::Models::Money &money) {
os << "$" << money.getDollars() << ".";
if (money.getCents() < 10) {
os << "0";
}
os << money.getCents();
return os;
}