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