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);
|
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");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue