Only initialize the amount_t module if it hasn't been already.

This commit is contained in:
John Wiegley 2009-02-06 03:30:45 -04:00
parent b4662911cc
commit a085f8e9ad
2 changed files with 18 additions and 9 deletions

View file

@ -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)

View file

@ -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;