//$Id: bignum.h,v 1.2 2006-09-26 19:05:32 cactus Exp $ -*- c++ -*- #ifndef EAF_BIGNUM_H #define EAF_BIGNUM_H #include #include class Bignum { typedef unsigned char digit_t; size_t n; digit_t *d; public: Bignum (); explicit Bignum (const std::string &s); ~Bignum (); Bignum (const Bignum &that); Bignum& operator= (const Bignum &that); std::string str () const; friend bool operator== (const Bignum &x, const Bignum &y); friend bool operator< (const Bignum &x, const Bignum &y); friend Bignum operator+ (const Bignum &x, const Bignum &y); friend Bignum operator* (const Bignum &x, const Bignum &y); Bignum operator+= (const Bignum &y); Bignum operator*= (const Bignum &y); private: explicit Bignum (size_t n); digit_t digit_from_char (char c); static digit_t truncate_digit (digit_t a_plus_b, digit_t &overflow); }; bool operator== (const Bignum &x, const Bignum &y); inline bool operator!= (const Bignum &x, const Bignum &y) { return !(x == y); } bool operator< (const Bignum &x, const Bignum &y); inline bool operator> (const Bignum &x, const Bignum &y) { return y < x; } inline bool operator<= (const Bignum &x, const Bignum &y) { return !(x > y); } inline bool operator>= (const Bignum &x, const Bignum &y) { return !(x < y); } Bignum operator+ (const Bignum &x, const Bignum &y); Bignum operator* (const Bignum &x, const Bignum &y); std::ostream& operator<< (std::ostream &ostr, const Bignum &bignum); std::istream& operator>> (std::istream &ostr, Bignum &bignum); #endif /* EAF_BIGNUM_H */