/************************************************************************* ** ** ** kbn.h (header file for kbn.cxx) ** ** ** ** C++ CLASS FOR BIG INTEGER ARITHMETIC ** ** ** ** Copyright (c)1996 Markku-Juhani O. Saarinen ** ** ** *************************************************************************/ #include #include #include #include typedef unsigned short kbn_s; typedef unsigned long kbn_l; #define KBN_BASE_BITS 12 #define KBN_BASE (1<> (istream&, kbn&); // funktiot int log2(); kbn& sqr(); void load(unsigned char *, size_t); size_t save(unsigned char *); int testbit(int); void setbit(int, int); // sijoitusoperaattorit kbn& operator= (kbn&); kbn& operator+= (kbn&); kbn& operator-= (kbn&); kbn& operator*= (kbn&); kbn& operator/= (kbn&); kbn& operator%= (kbn&); kbn& operator<<= (long); kbn& operator>>= (long); // sijoitusoperaattori: long int kbn& operator= (long); // binääriset operaattorit kbn& operator+ (kbn&); kbn& operator- (kbn&); kbn& operator* (kbn&); kbn& operator/ (kbn&); kbn& operator% (kbn&); kbn& operator<< (long); kbn& operator>> (long); // 1 operandin operaattorit kbn& operator++ (); kbn& operator-- (); kbn& operator~ (); // vertailuoperaattorit int operator== (kbn &); int operator!= (kbn &); int operator<= (kbn &); int operator>= (kbn &); int operator< (kbn &); int operator> (kbn &); private: void copy(kbn_s *, kbn_s *); char *sprint (kbn_s *); int setlong (unsigned long, kbn_s *); int cmp(kbn_s *, kbn_s *); void add(kbn_s *, kbn_s *, kbn_s *); void sub (kbn_s *, kbn_s *, kbn_s *); void mul (kbn_s *, kbn_s *, kbn_s *); void rol(kbn_s *, int); void ror(kbn_s *, int); void div(kbn_s *, kbn_s *, kbn_s *); void mod(kbn_s *, kbn_s *, kbn_s *); int cntbits(short unsigned int *); void addlong(short unsigned int *, long int); void hexconv(char *, kbn_s *); };