1 package org.codehaus.groovy.runtime;
2
3 /***
4 * BigInteger NumberMath operations
5 *
6 * @author Steve Goetze
7 */
8 public class BigIntegerMath extends NumberMath {
9
10 protected static BigIntegerMath instance = new BigIntegerMath();
11
12 private BigIntegerMath() {}
13
14 protected Number absImpl(Number number) {
15 return toBigInteger(number).abs();
16 }
17
18 protected Number addImpl(Number left, Number right) {
19 return toBigInteger(left).add(toBigInteger(right));
20 }
21 protected Number subtractImpl(Number left, Number right) {
22 return toBigInteger(left).subtract(toBigInteger(right));
23 }
24
25 protected Number multiplyImpl(Number left, Number right) {
26 return toBigInteger(left).multiply(toBigInteger(right));
27 }
28
29 protected Number divideImpl(Number left, Number right) {
30 return BigDecimalMath.instance.divideImpl(left, right);
31 }
32
33 protected int compareToImpl(Number left, Number right) {
34 return toBigInteger(left).compareTo(toBigInteger(right));
35 }
36
37 protected Number intdivImpl(Number left, Number right) {
38 return toBigInteger(left).divide(toBigInteger(right));
39 }
40
41 protected Number modImpl(Number left, Number right) {
42 return toBigInteger(left).mod(toBigInteger(right));
43 }
44
45 protected Number negateImpl(Number left) {
46 return toBigInteger(left).negate();
47 }
48
49 protected Number bitNegateImpl(Number left) {
50 return toBigInteger(left).not();
51 }
52
53 protected Number orImpl(Number left, Number right) {
54 return toBigInteger(left).or(toBigInteger(right));
55 }
56
57 protected Number andImpl(Number left, Number right) {
58 return toBigInteger(left).and(toBigInteger(right));
59 }
60
61 protected Number xorImpl(Number left, Number right) {
62 return toBigInteger(left).xor(toBigInteger(right));
63 }
64 }