def _init_mpz_cache(): global mpz_cache, in_mpz_cache mpz_cache = [] in_mpz_cache = cache_size for _ in xrange(cache_size): mpz = ffi.new("mpz_t") gmp.mpz_init(mpz) mpz_cache.append(mpz)
def _new_mpz(): """Return an initialized mpz_t.""" global in_mpz_cache if in_mpz_cache: in_mpz_cache -= 1 return mpz_cache[in_mpz_cache] else: mpz = ffi.new("mpz_t") gmp.mpz_init(mpz) return mpz
def _pyint_to_mpfr(n, a): if -sys.maxsize - 1 <= n <= sys.maxsize: gmp.mpfr_set_si(a, n, gmp.MPFR_RNDN) elif sys.maxsize < n <= MAX_UI: gmp.mpfr_set_ui(a, n, gmp.MPFR_RNDN) else: assert isinstance(n, long) tmp_mpz = ffi.new('mpz_t') gmp.mpz_init(tmp_mpz) _pylong_to_mpz(n, tmp_mpz) gmp.mpfr_set_z(a, tmp_mpz, gmp.MPFR_RNDN) gmp.mpz_clear(tmp_mpz)