*** no comment ***

This commit is contained in:
John Wiegley 2006-03-04 14:46:04 +00:00
parent 6375730fc9
commit 581b3d5b9a
3 changed files with 33 additions and 65 deletions

View file

@ -97,14 +97,10 @@ 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;
if (! (*i).second)
amounts.erase(&amt.commodity());
}
else if (amt) {
else
amounts.insert(amounts_pair(&amt.commodity(), - amt));
}
return *this;
}
template <typename T>
@ -151,10 +147,7 @@ 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) {
amounts.clear();
}
else if (! amt.commodity()) {
if (! amt.commodity()) {
for (amounts_map::iterator i = amounts.begin();
i != amounts.end();
i++)

View file

@ -19,27 +19,6 @@ void value_t::destroy()
}
}
void value_t::simplify()
{
if (! *this) {
*this = 0L;
return;
}
if (type == BALANCE_PAIR &&
(! ((balance_pair_t *) data)->cost ||
! *((balance_pair_t *) data)->cost))
cast(BALANCE);
if (type == BALANCE &&
((balance_t *) data)->amounts.size() == 1)
cast(AMOUNT);
if (type == AMOUNT &&
! ((amount_t *) data)->commodity())
cast(INTEGER);
}
value_t& value_t::operator=(const value_t& value)
{
if (this == &value)
@ -336,18 +315,11 @@ value_t& value_t::operator-=(const value_t& value)
break;
}
simplify();
return *this;
}
value_t& value_t::operator*=(const value_t& value)
{
if (! value) {
*this = 0L;
return *this;
}
switch (type) {
case BOOLEAN:
case INTEGER:

57
value.h
View file

@ -121,40 +121,43 @@ class value_t
return *this = amount_t(value);
}
value_t& operator=(const amount_t& value) {
if ((amount_t *) data != &value) {
if (! value) {
return *this = 0L;
} else {
destroy();
new((amount_t *)data) amount_t(value);
type = AMOUNT;
}
}
if (type == AMOUNT &&
(amount_t *) data == &value)
return *this;
destroy();
new((amount_t *)data) amount_t(value);
type = AMOUNT;
return *this;
}
value_t& operator=(const balance_t& value) {
if ((balance_t *) data != &value) {
if (value.amounts.size() == 1) {
return *this = (*value.amounts.begin()).second;
} else {
destroy();
new((balance_t *)data) balance_t(value);
type = BALANCE;
}
if (type == BALANCE &&
(balance_t *) data == &value)
return *this;
if (value.amounts.size() == 1) {
return *this = (*value.amounts.begin()).second;
} else {
destroy();
new((balance_t *)data) balance_t(value);
type = BALANCE;
return *this;
}
return *this;
}
value_t& operator=(const balance_pair_t& value) {
if ((balance_pair_t *) data != &value) {
if (! value.cost) {
return *this = value.quantity;
} else {
destroy();
new((balance_pair_t *)data) balance_pair_t(value);
type = BALANCE_PAIR;
}
if (type == BALANCE_PAIR &&
(balance_pair_t *) data == &value)
return *this;
if (! value.cost) {
return *this = value.quantity;
} else {
destroy();
new((balance_pair_t *)data) balance_pair_t(value);
type = BALANCE_PAIR;
return *this;
}
return *this;
}
value_t& operator+=(const value_t& value);