/* * lib_z.h * * Created on: Sep 28, 2010 * Author: anders */ #ifndef LIB_Z_H_ #define LIB_Z_H_ #include #include #include "gmp.h" namespace gfan{ class Rational; class Integer { friend class Rational; mpz_t value; public: static bool isField() { return false; } Integer() { mpz_init(value); } Integer(signed long int value_) { mpz_init(value); mpz_set_si(value,value_); } Integer(Integer const & value_) { mpz_init_set(value,value_.value); } Integer(mpz_t value_) { mpz_init_set(value,value_); } ~Integer() { mpz_clear(value); } Integer& operator=(const Integer& a) { const Integer *A=(const Integer*)&a; if (this != A) { mpz_clear(value); mpz_init_set(value, a.value); } return *this; } bool isZero()const{ return mpz_sgn(value)==0; } friend std::ostream &operator<<(std::ostream &f, Integer const &a) { void (*freefunc)(void *, size_t); mp_get_memory_functions(0,0,&freefunc); char *str=mpz_get_str(0,10,a.value); f<setGmp(v); bool ret=(mpz_fits_sint_p(v)!=0); mpz_clear(v); return ret; } int toInt()const { mpz_t v; mpz_init(v); this->setGmp(v); int ret=0; if(mpz_fits_sint_p(v)) ret=mpz_get_si(v); // else // ok=false; mpz_clear(v); return ret; } }; } #endif /* LIB_Z_H_ */