amount_t::in_place_* now returns void. Added value_t::unreduce.

This commit is contained in:
John Wiegley 2009-02-07 22:50:19 -04:00
parent cb0faac58d
commit b662509ee9
4 changed files with 32 additions and 9 deletions

View file

@ -434,7 +434,7 @@ amount_t::precision_t amount_t::display_precision() const
return quantity->prec;
}
amount_t& amount_t::in_place_negate()
void amount_t::in_place_negate()
{
if (quantity) {
_dup();
@ -442,7 +442,6 @@ amount_t& amount_t::in_place_negate()
} else {
throw_(amount_error, "Cannot negate an uninitialized amount");
}
return *this;
}
amount_t amount_t::inverted() const
@ -485,7 +484,7 @@ amount_t amount_t::unrounded() const
return t;
}
amount_t& amount_t::in_place_reduce()
void amount_t::in_place_reduce()
{
if (! quantity)
throw_(amount_error, "Cannot reduce an uninitialized amount");
@ -494,10 +493,9 @@ amount_t& amount_t::in_place_reduce()
*this *= commodity().smaller()->number();
commodity_ = commodity().smaller()->commodity_;
}
return *this;
}
amount_t& amount_t::in_place_unreduce()
void amount_t::in_place_unreduce()
{
if (! quantity)
throw_(amount_error, "Cannot unreduce an uninitialized amount");
@ -508,7 +506,6 @@ amount_t& amount_t::in_place_unreduce()
if (abs() < amount_t(1L))
break;
}
return *this;
}
optional<amount_t> amount_t::value(const optional<datetime_t>& moment,

View file

@ -296,7 +296,7 @@ public:
temp.in_place_negate();
return temp;
}
amount_t& in_place_negate();
void in_place_negate();
amount_t operator-() const {
return negate();
@ -335,7 +335,7 @@ public:
temp.in_place_reduce();
return temp;
}
amount_t& in_place_reduce();
void in_place_reduce();
/** unreduce(), if used with a "scaling commodity", yields the most
compact form greater than one. That is, \c 3599s will unreduce to
@ -346,7 +346,7 @@ public:
temp.in_place_unreduce();
return temp;
}
amount_t& in_place_unreduce();
void in_place_unreduce();
/** Returns the historical value for an amount -- the default moment
returns the most recently known price -- based on the price history

View file

@ -1404,6 +1404,25 @@ void value_t::in_place_reduce()
//throw_(value_error, "Cannot reduce " << label());
}
void value_t::in_place_unreduce()
{
switch (type()) {
case AMOUNT:
as_amount_lval().in_place_unreduce();
return;
case BALANCE:
as_balance_lval().in_place_unreduce();
return;
case BALANCE_PAIR:
as_balance_pair_lval().in_place_unreduce();
return;
default:
return;
}
//throw_(value_error, "Cannot reduce " << label());
}
value_t value_t::abs() const
{
switch (type()) {

View file

@ -421,6 +421,13 @@ public:
}
void in_place_reduce(); // exists for efficiency's sake
value_t unreduce() const {
value_t temp(*this);
temp.in_place_unreduce();
return temp;
}
void in_place_unreduce(); // exists for efficiency's sake
// Return the "market value" of a given value at a specific time.
value_t value(const optional<datetime_t>& moment = none,
const optional<commodity_t&>& in_terms_of = none) const;