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