template<> Obj GET_INTOBJ(Z_NR<double> &v) { mpz_t z; mpz_init2 (z, 8*sizeof(double)+1); mpz_set_d(z,v.getData()); Obj o = INT_mpz(z); mpz_clear(z); return o; }
template<> Obj GET_INTOBJ(Z_NR<long> &v) { mpz_t z; mpz_init2 (z, 8*sizeof(long)+1); mpz_set_si(z,v.getData()); Obj o = INT_mpz(z); mpz_clear(z); return o; }
template<> Obj GET_INTOBJ(Z_NR<mpz_t> &v) { #ifdef FPLLL_VERSION mpz_t z; mpz_init2 (z, 8*sizeof(long)+1); v.get_mpz(z); Obj o = INT_mpz(z); mpz_clear(z); return o; #else return INT_mpz(v.getData()); #endif }
template<> void SET_INTOBJ(Z_NR<mpz_t> &v, Obj z) { if (IS_INTOBJ(z)) v = INT_INTOBJ(z); else #ifdef FPLLL_VERSION { mpz_t zz; mpz_init(zz); mpz_set(zz, mpz_MPZ(MPZ_LONGINT(z))); v = zz; mpz_clear(zz); } #else mpz_set(v.getData(), mpz_MPZ(MPZ_LONGINT(z))); #endif }
void SET_Z(Integer &s, const Z_NR<long> &t) { s = t.getData(); }
void SET_Z(Integer &s, const Z_NR<double> &t) { s = t.getData(); }
template<> Obj GET_INTOBJ(Z_NR<mpz_t> &v) { return INT_mpz(v.getData()); }
template<> void SET_INTOBJ(Z_NR<mpz_t> &v, Obj z) { if (IS_INTOBJ(z)) v = INT_INTOBJ(z); else mpz_set(v.getData(), mpz_MPZ(MPZ_LONGINT(z))); }