summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2009-02-06 03:30:45 -0400
committerJohn Wiegley <johnw@newartisans.com>2009-02-06 03:30:45 -0400
commita085f8e9aded8a6a198e874fadb580990fd37969 (patch)
tree60dfcf798a093540f455a9ba5ac1ed979df22e4f /src
parentb4662911cc4388f740f73fcc6adad78b6c27a315 (diff)
downloadfork-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.cc25
-rw-r--r--src/amount.h2
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;