3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-29 11:55:51 +00:00

add initialization

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2019-06-11 19:28:08 -07:00
parent 583098b8b0
commit 71c38a08e5
13 changed files with 92 additions and 43 deletions

View file

@ -26,6 +26,7 @@ rational rational::m_zero;
rational rational::m_one;
rational rational::m_minus_one;
vector<rational> rational::m_powers_of_two;
static mutex* s_mux = nullptr;
static void mk_power_up_to(vector<rational> & pws, unsigned n) {
if (pws.empty()) {
@ -40,11 +41,10 @@ static void mk_power_up_to(vector<rational> & pws, unsigned n) {
}
}
static mutex g_powers_of_two;
rational rational::power_of_two(unsigned k) {
rational result;
lock_guard lock(g_powers_of_two);
lock_guard lock(*s_mux);
{
if (k >= m_powers_of_two.size())
mk_power_up_to(m_powers_of_two, k+1);
@ -64,6 +64,7 @@ void finalize_inf_int_rational();
void rational::initialize() {
if (!g_mpq_manager) {
g_mpq_manager = alloc(synch_mpq_manager);
s_mux = alloc(mutex);
m().set(m_zero.m_val, 0);
m().set(m_one.m_val, 1);
m().set(m_minus_one.m_val, -1);
@ -81,5 +82,7 @@ void rational::finalize() {
m_minus_one.~rational();
dealloc(g_mpq_manager);
g_mpq_manager = nullptr;
dealloc(s_mux);
s_mux = nullptr;
}