Mercurial > projects > dwt2
annotate base/src/java/math/BigInteger.d @ 99:5d5bd660917f
build some databind snippets
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Wed, 22 Apr 2009 18:59:26 +0200 |
parents | 48d4ee626868 |
children | 9f4c18c268b2 |
rev | line source |
---|---|
82 | 1 module java.math.BigInteger; |
2 | |
3 import java.lang.all; | |
4 import java.util.Random; | |
98
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
5 version(Tango){ |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
6 import tango.math.BigInt; |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
7 } else { // Phobos |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
8 } |
82 | 9 |
10 class BigInteger : Number { | |
11 | |
98
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
12 static const BigInteger ZERO; |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
13 static const BigInteger ONE; |
82 | 14 |
98
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
15 private BigInt bi; |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
16 |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
17 static this(){ |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
18 ZERO = BigInteger.valueOf(0); |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
19 ONE = BigInteger.valueOf(1); |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
20 } |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
21 |
82 | 22 this(byte[] val){ |
23 implMissing(__FILE__, __LINE__ ); | |
24 } | |
25 this(int signum, byte[] magnitude){ | |
26 implMissing(__FILE__, __LINE__ ); | |
27 } | |
28 this(int bitLength, int certainty, Random rnd){ | |
29 implMissing(__FILE__, __LINE__ ); | |
30 } | |
31 this(int numBits, Random rnd){ | |
32 implMissing(__FILE__, __LINE__ ); | |
33 } | |
34 this(String val){ | |
98
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
35 bi = BigInt( val ); |
82 | 36 } |
37 this(String val, int radix){ | |
99
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
38 getDwtLogger.error( __FILE__, __LINE__, "this({}, {})", val, radix ); |
98
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
39 if( radix is 10 ){ |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
40 bi = BigInt( val ); |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
41 } |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
42 else if( radix is 16 ){ |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
43 bi = BigInt( "0x" ~ val ); |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
44 } |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
45 else { |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
46 implMissing(__FILE__, __LINE__ ); |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
47 } |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
48 } |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
49 private this( BigInt v ){ |
99
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
50 getDwtLogger.error( __FILE__, __LINE__, "this({})", v.toHex ); |
98
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
51 bi = v; |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
52 } |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
53 private this( BigInteger v ){ |
99
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
54 getDwtLogger.error( __FILE__, __LINE__, "this({})", bi.toHex ); |
98
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
55 bi = v.bi; |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
56 } |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
57 private this( long v ){ |
99
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
58 getDwtLogger.error( __FILE__, __LINE__, "this({})", v ); |
98
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
59 bi = BigInt(v); |
82 | 60 } |
61 BigInteger abs(){ | |
62 implMissing(__FILE__, __LINE__ ); | |
63 return null; | |
64 } | |
65 BigInteger add(BigInteger val){ | |
66 implMissing(__FILE__, __LINE__ ); | |
67 return null; | |
68 } | |
69 BigInteger and(BigInteger val){ | |
70 implMissing(__FILE__, __LINE__ ); | |
71 return null; | |
72 } | |
73 BigInteger andNot(BigInteger val){ | |
74 implMissing(__FILE__, __LINE__ ); | |
75 return null; | |
76 } | |
77 int bitCount(){ | |
78 implMissing(__FILE__, __LINE__ ); | |
79 return 0; | |
80 } | |
81 int bitLength(){ | |
99
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
82 getDwtLogger.error( __FILE__, __LINE__, "bitLength()" ); |
98
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
83 //implMissing(__FILE__, __LINE__ ); |
82 | 84 return 0; |
85 } | |
86 BigInteger clearBit(int n){ | |
87 implMissing(__FILE__, __LINE__ ); | |
88 return null; | |
89 } | |
90 int compareTo(BigInteger val){ | |
91 implMissing(__FILE__, __LINE__ ); | |
92 return 0; | |
93 } | |
94 int compareTo(Object o){ | |
95 implMissing(__FILE__, __LINE__ ); | |
96 return 0; | |
97 } | |
98 BigInteger divide(BigInteger val){ | |
99 implMissing(__FILE__, __LINE__ ); | |
100 return null; | |
101 } | |
102 BigInteger[] divideAndRemainder(BigInteger val){ | |
103 implMissing(__FILE__, __LINE__ ); | |
104 return null; | |
105 } | |
106 double doubleValue(){ | |
107 implMissing(__FILE__, __LINE__ ); | |
108 return 0; | |
109 } | |
110 bool equals(Object x){ | |
111 implMissing(__FILE__, __LINE__ ); | |
112 return 0; | |
113 } | |
114 BigInteger flipBit(int n){ | |
115 implMissing(__FILE__, __LINE__ ); | |
116 return null; | |
117 } | |
118 float floatValue(){ | |
119 implMissing(__FILE__, __LINE__ ); | |
120 return 0; | |
121 } | |
122 BigInteger gcd(BigInteger val){ | |
123 implMissing(__FILE__, __LINE__ ); | |
124 return null; | |
125 } | |
126 int getLowestSetBit(){ | |
127 implMissing(__FILE__, __LINE__ ); | |
128 return 0; | |
129 } | |
130 int hashCode(){ | |
131 implMissing(__FILE__, __LINE__ ); | |
132 return 0; | |
133 } | |
134 int intValue(){ | |
135 implMissing(__FILE__, __LINE__ ); | |
136 return 0; | |
137 } | |
138 bool isProbablePrime(int certainty){ | |
139 implMissing(__FILE__, __LINE__ ); | |
140 return 0; | |
141 } | |
142 long longValue(){ | |
99
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
143 getDwtLogger.error( __FILE__, __LINE__, "{}", bi.toHex ); |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
144 long res = 0; |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
145 auto txt = bi.toHex; |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
146 bool sign = false; |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
147 if( txt[0] is '-' ){ |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
148 sign = true; |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
149 txt = txt[1 .. $]; |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
150 } |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
151 int nibbles = 0; |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
152 foreach( uint idx, char c; txt ){ |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
153 if( c is '_' ) continue; |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
154 void addNibble( int v ){ |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
155 res <<= 4; |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
156 res |= v; |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
157 nibbles++; |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
158 } |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
159 if( c >= '0' && c <= '9' ) { |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
160 addNibble( c - '0' ); |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
161 } |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
162 else if( c >= 'a' && c <= 'f' ) { |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
163 addNibble( c - 'a' + 10 ); |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
164 } |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
165 else if( c >= 'A' && c <= 'F' ) { |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
166 addNibble( c - 'A' + 10 ); |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
167 } |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
168 else{ |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
169 getDwtLogger.error( __FILE__, __LINE__, "unknown char {} @{}", c, idx ); |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
170 } |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
171 } |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
172 if( nibbles > 16 ){ |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
173 getDwtLogger.error( __FILE__, __LINE__, "too much nibbles {}", nibbles ); |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
174 } |
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
175 return res; |
82 | 176 } |
177 BigInteger max(BigInteger val){ | |
178 implMissing(__FILE__, __LINE__ ); | |
179 return null; | |
180 } | |
181 BigInteger min(BigInteger val){ | |
182 implMissing(__FILE__, __LINE__ ); | |
183 return null; | |
184 } | |
185 BigInteger mod(BigInteger m){ | |
186 implMissing(__FILE__, __LINE__ ); | |
187 return null; | |
188 } | |
189 BigInteger modInverse(BigInteger m){ | |
190 implMissing(__FILE__, __LINE__ ); | |
191 return null; | |
192 } | |
193 BigInteger modPow(BigInteger exponent, BigInteger m){ | |
194 implMissing(__FILE__, __LINE__ ); | |
195 return null; | |
196 } | |
197 BigInteger multiply(BigInteger val){ | |
99
5d5bd660917f
build some databind snippets
Frank Benoit <benoit@tionex.de>
parents:
98
diff
changeset
|
198 getDwtLogger.error( __FILE__, __LINE__, "multiply ({})", val.bi.toHex ); |
98
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
199 auto res = new BigInteger(this); |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
200 res.bi *= val.bi; |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
201 return res; |
82 | 202 } |
203 BigInteger negate(){ | |
204 implMissing(__FILE__, __LINE__ ); | |
205 return null; | |
206 } | |
207 BigInteger not(){ | |
208 implMissing(__FILE__, __LINE__ ); | |
209 return null; | |
210 } | |
211 BigInteger or(BigInteger val){ | |
212 implMissing(__FILE__, __LINE__ ); | |
213 return null; | |
214 } | |
215 BigInteger pow(int exponent){ | |
98
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
216 if( exponent < 0 ){ |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
217 throw new ArithmeticException("Negative exponent"); |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
218 } |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
219 if( bi.isZero() ){ |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
220 return exponent is 0 ? ONE : this; |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
221 } |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
222 auto a = bi; |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
223 while(exponent>0){ |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
224 a *= bi; |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
225 exponent--; |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
226 } |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
227 return new BigInteger(a); |
82 | 228 } |
229 static BigInteger probablePrime(int bitLength, Random rnd){ | |
230 implMissing(__FILE__, __LINE__ ); | |
231 return null; | |
232 } | |
233 BigInteger remainder(BigInteger val){ | |
234 implMissing(__FILE__, __LINE__ ); | |
235 return null; | |
236 } | |
237 BigInteger setBit(int n){ | |
238 implMissing(__FILE__, __LINE__ ); | |
239 return null; | |
240 } | |
241 BigInteger shiftLeft(int n){ | |
242 implMissing(__FILE__, __LINE__ ); | |
243 return null; | |
244 } | |
245 BigInteger shiftRight(int n){ | |
246 implMissing(__FILE__, __LINE__ ); | |
247 return null; | |
248 } | |
249 int signum(){ | |
98
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
250 if( bi.isZero() ) return 0; |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
251 if( bi.isNegative() ) return -1; |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
252 return 1; |
82 | 253 } |
254 BigInteger subtract(BigInteger val){ | |
255 implMissing(__FILE__, __LINE__ ); | |
256 return null; | |
257 } | |
258 bool testBit(int n){ | |
259 implMissing(__FILE__, __LINE__ ); | |
260 return 0; | |
261 } | |
262 byte[] toByteArray(){ | |
263 implMissing(__FILE__, __LINE__ ); | |
264 return null; | |
265 } | |
266 String toString(){ | |
267 implMissing(__FILE__, __LINE__ ); | |
268 return null; | |
269 } | |
270 String toString(int radix){ | |
271 implMissing(__FILE__, __LINE__ ); | |
272 return null; | |
273 } | |
274 static BigInteger valueOf(long val){ | |
98
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
275 auto res = new BigInteger(val); |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
82
diff
changeset
|
276 return res; |
82 | 277 } |
278 BigInteger xor(BigInteger val){ | |
279 implMissing(__FILE__, __LINE__ ); | |
280 return null; | |
281 } | |
282 | |
283 } |