diff options
Diffstat (limited to 'balance.h')
-rw-r--r-- | balance.h | 15 |
1 files changed, 11 insertions, 4 deletions
@@ -97,10 +97,14 @@ class balance_t } balance_t& operator-=(const amount_t& amt) { amounts_map::iterator i = amounts.find(&amt.commodity()); - if (i != amounts.end()) + if (i != amounts.end()) { (*i).second -= amt; - else if (amt) + if (! (*i).second) + amounts.erase(&amt.commodity()); + } + else if (amt) { amounts.insert(amounts_pair(&amt.commodity(), - amt)); + } return *this; } template <typename T> @@ -147,7 +151,10 @@ class balance_t balance_t& operator*=(const amount_t& amt) { // Multiplying by the null commodity causes all amounts to be // increased by the same factor. - if (amt.commodity().symbol.empty()) { + if (! amt) { + amounts.clear(); + } + else if (! amt.commodity()) { for (amounts_map::iterator i = amounts.begin(); i != amounts.end(); i++) @@ -172,7 +179,7 @@ class balance_t balance_t& operator/=(const amount_t& amt) { // Dividing by the null commodity causes all amounts to be // increased by the same factor. - if (amt.commodity().symbol.empty()) { + if (! amt.commodity()) { for (amounts_map::iterator i = amounts.begin(); i != amounts.end(); i++) |