/*++ Copyright (c) 2012 Microsoft Corporation Module Name: sls_powers.h Abstract: Power-of-2 module for SLS Author: Christoph (cwinter) 2012-02-29 Notes: --*/ #pragma once #include "util/mpz.h" #include "util/map.h" class powers : public u_map { unsynch_mpz_manager & m; public: powers(unsynch_mpz_manager & m) : m(m) {} ~powers() { for (iterator it = begin(); it != end(); it++) { m.del(*it->m_value); dealloc(it->m_value); } } const mpz & operator()(unsigned n) { u_map::iterator it = find_iterator(n); if (it != end()) return *it->m_value; else { mpz * new_obj = alloc(mpz); m.mul2k(m.mk_z(1), n, *new_obj); insert(n, new_obj); return *new_obj; } } };