Create an unrounded global amount variable 'one' for creating inverse price
mappings.
This commit is contained in:
parent
0ec53e4a6c
commit
60f9748da1
2 changed files with 11 additions and 3 deletions
|
|
@ -115,11 +115,15 @@ uint_fast32_t amount_t::sizeof_bigint_t()
|
|||
return sizeof(bigint_t);
|
||||
}
|
||||
|
||||
amount_t * one = NULL;
|
||||
|
||||
void amount_t::initialize()
|
||||
{
|
||||
mpz_init(temp);
|
||||
mpz_init(divisor);
|
||||
|
||||
one = new amount_t(amount_t(1L).unround());
|
||||
|
||||
if (! current_pool)
|
||||
current_pool = new commodity_pool_t;
|
||||
|
||||
|
|
@ -140,6 +144,8 @@ void amount_t::shutdown()
|
|||
mpz_clear(temp);
|
||||
mpz_clear(divisor);
|
||||
|
||||
delete one;
|
||||
|
||||
if (current_pool) {
|
||||
checked_delete(current_pool);
|
||||
current_pool = NULL;
|
||||
|
|
@ -661,9 +667,9 @@ optional<amount_t> amount_t::value(const optional<datetime_t>& moment) const
|
|||
{
|
||||
if (quantity) {
|
||||
// jww (2008-09-21): 'none' is not the right argument here.
|
||||
optional<amount_t> amt(commodity().find_price(none, moment));
|
||||
if (amt)
|
||||
return (*amt * number()).round();
|
||||
optional<price_point_t> point(commodity().find_price(none, moment));
|
||||
if (point)
|
||||
return (point->price * number()).round();
|
||||
} else {
|
||||
throw_(amount_error, "Cannot determine value of an uninitialized amount");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -722,6 +722,8 @@ public:
|
|||
bool valid() const;
|
||||
};
|
||||
|
||||
extern amount_t * one;
|
||||
|
||||
inline amount_t amount_t::exact(const string& value) {
|
||||
amount_t temp;
|
||||
temp.parse(value, AMOUNT_PARSE_NO_MIGRATE);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue