diff options
author | John Wiegley <johnw@newartisans.com> | 2009-02-06 03:30:45 -0400 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2009-02-06 03:30:45 -0400 |
commit | a085f8e9aded8a6a198e874fadb580990fd37969 (patch) | |
tree | 60dfcf798a093540f455a9ba5ac1ed979df22e4f /src | |
parent | b4662911cc4388f740f73fcc6adad78b6c27a315 (diff) | |
download | fork-ledger-a085f8e9aded8a6a198e874fadb580990fd37969.tar.gz fork-ledger-a085f8e9aded8a6a198e874fadb580990fd37969.tar.bz2 fork-ledger-a085f8e9aded8a6a198e874fadb580990fd37969.zip |
Only initialize the amount_t module if it hasn't been already.
Diffstat (limited to 'src')
-rw-r--r-- | src/amount.cc | 25 | ||||
-rw-r--r-- | src/amount.h | 2 |
2 files changed, 18 insertions, 9 deletions
diff --git a/src/amount.cc b/src/amount.cc index bfbb591e..829b31ef 100644 --- a/src/amount.cc +++ b/src/amount.cc @@ -87,13 +87,17 @@ struct amount_t::bigint_t : public supports_flags<> shared_ptr<commodity_pool_t> amount_t::current_pool; +bool amount_t::is_initialized = false; + void amount_t::initialize(shared_ptr<commodity_pool_t> pool) { - mpz_init(temp); - mpq_init(tempq); - mpfr_init(tempf); - mpfr_init(tempfb); - + if (! is_initialized) { + mpz_init(temp); + mpq_init(tempq); + mpfr_init(tempf); + mpfr_init(tempfb); + is_initialized = true; + } current_pool = pool; } @@ -106,10 +110,13 @@ void amount_t::shutdown() { current_pool.reset(); - mpz_clear(temp); - mpq_clear(tempq); - mpfr_clear(tempf); - mpfr_clear(tempfb); + if (is_initialized) { + mpz_clear(temp); + mpq_clear(tempq); + mpfr_clear(tempf); + mpfr_clear(tempfb); + is_initialized = false; + } } void amount_t::_copy(const amount_t& amt) diff --git a/src/amount.h b/src/amount.h index 4405e058..e4abeb0b 100644 --- a/src/amount.h +++ b/src/amount.h @@ -92,6 +92,8 @@ public: @note Normally called by session_t::shutdown(). */ static void shutdown(); + static bool is_initialized; + /** The amount's decimal precision. */ typedef uint_least16_t precision_t; |