1507ba7a4e90d003330c81c1d9e07ec4e1a50da8
[ipdf/code.git] / src / arbint.h
1 #ifndef _ARBINT_H
2 #define _ARBINT_H
3
4 #include "common.h"
5
6 namespace IPDF
7 {
8         class Arbint
9         {
10                 public:
11                         typedef int64_t digit_t;
12                 
13                         Arbint(digit_t i);
14                         Arbint(unsigned n, digit_t d0, ...);
15                         Arbint(const std::string & str, const std::string & base="0123456789");
16                         ~Arbint() {}
17                         Arbint(const Arbint & cpy);
18                         
19                         
20                         inline bool Sign() const {return m_sign;}
21                         inline char SignChar() const {return (m_sign) ? '-' : '+';}
22                         std::string DigitStr() const;
23
24                         std::string Str(const std::string & base="0123456789") const;
25                         inline std::string Str(const char * base) const
26                         {
27                                 return Str(std::string(base));
28                         }
29                         
30                         Arbint & operator=(const Arbint & equ);
31                         Arbint & operator+=(const Arbint & add);
32                         Arbint & operator-=(const Arbint & sub);
33         
34                         
35                         bool operator==(const Arbint & equ) const;
36                         
37                         
38                         inline Arbint operator+(const Arbint & add) const 
39                         {
40                                 Arbint a(*this);
41                                 a += add;
42                                 return a;
43                         }
44                         inline Arbint operator-(const Arbint & add) const 
45                         {
46                                 Arbint a(*this);
47                                 a -= add;
48                                 return a;
49                         }       
50                         inline bool operator!=(const Arbint & equ) const 
51                         {
52                                 return !this->operator==(equ);
53                         }
54                         
55                         unsigned Shrink();
56                 private:                
57                                 
58                         Arbint & AddBasic(const Arbint & add);
59                         Arbint & SubBasic(const Arbint & sub);
60         
61                         std::vector<digit_t> m_digits;
62                         bool m_sign;
63                         void Zero();
64
65                         
66                         
67                         
68         };      
69
70 extern "C"
71 {
72         typedef int64_t digit_t;
73         digit_t add_digits(digit_t * dst, digit_t * add, digit_t size);
74         digit_t sub_digits(digit_t * dst, digit_t * add, digit_t size);
75 }
76
77 }
78 #endif //_ARBINT_H

UCC git Repository :: git.ucc.asn.au