Create an unrounded global amount variable 'one' for creating inverse price

mappings.
This commit is contained in:
John Wiegley 2009-01-19 16:24:06 -04:00
parent 0ec53e4a6c
commit 60f9748da1
2 changed files with 11 additions and 3 deletions

View file

@ -115,11 +115,15 @@ uint_fast32_t amount_t::sizeof_bigint_t()
return sizeof(bigint_t); return sizeof(bigint_t);
} }
amount_t * one = NULL;
void amount_t::initialize() void amount_t::initialize()
{ {
mpz_init(temp); mpz_init(temp);
mpz_init(divisor); mpz_init(divisor);
one = new amount_t(amount_t(1L).unround());
if (! current_pool) if (! current_pool)
current_pool = new commodity_pool_t; current_pool = new commodity_pool_t;
@ -140,6 +144,8 @@ void amount_t::shutdown()
mpz_clear(temp); mpz_clear(temp);
mpz_clear(divisor); mpz_clear(divisor);
delete one;
if (current_pool) { if (current_pool) {
checked_delete(current_pool); checked_delete(current_pool);
current_pool = NULL; current_pool = NULL;
@ -661,9 +667,9 @@ optional<amount_t> amount_t::value(const optional<datetime_t>& moment) const
{ {
if (quantity) { if (quantity) {
// jww (2008-09-21): 'none' is not the right argument here. // jww (2008-09-21): 'none' is not the right argument here.
optional<amount_t> amt(commodity().find_price(none, moment)); optional<price_point_t> point(commodity().find_price(none, moment));
if (amt) if (point)
return (*amt * number()).round(); return (point->price * number()).round();
} else { } else {
throw_(amount_error, "Cannot determine value of an uninitialized amount"); throw_(amount_error, "Cannot determine value of an uninitialized amount");
} }

View file

@ -722,6 +722,8 @@ public:
bool valid() const; bool valid() const;
}; };
extern amount_t * one;
inline amount_t amount_t::exact(const string& value) { inline amount_t amount_t::exact(const string& value) {
amount_t temp; amount_t temp;
temp.parse(value, AMOUNT_PARSE_NO_MIGRATE); temp.parse(value, AMOUNT_PARSE_NO_MIGRATE);