01: /*
02: * Created on Mar 5, 2004
03: *
04: */
05: package org.codehaus.groovy.runtime.typehandling;
06:
07: /**
08: * Long NumberMath operations
09: *
10: * @author Steve Goetze
11: */
12: public class LongMath extends NumberMath {
13:
14: protected static LongMath instance = new LongMath();
15:
16: private LongMath() {
17: }
18:
19: protected Number absImpl(Number number) {
20: return new Long(Math.abs(number.longValue()));
21: }
22:
23: protected Number addImpl(Number left, Number right) {
24: return new Long(left.longValue() + right.longValue());
25: }
26:
27: protected Number subtractImpl(Number left, Number right) {
28: return new Long(left.longValue() - right.longValue());
29: }
30:
31: protected Number multiplyImpl(Number left, Number right) {
32: return new Long(left.longValue() * right.longValue());
33: }
34:
35: protected Number divideImpl(Number left, Number right) {
36: return BigDecimalMath.instance.divideImpl(left, right);
37: }
38:
39: protected int compareToImpl(Number left, Number right) {
40: long leftVal = left.longValue();
41: long rightVal = right.longValue();
42: return (leftVal < rightVal ? -1 : (leftVal == rightVal ? 0 : 1));
43: }
44:
45: protected Number intdivImpl(Number left, Number right) {
46: return new Long(left.longValue() / right.longValue());
47: }
48:
49: protected Number modImpl(Number left, Number right) {
50: return new Long(left.longValue() % right.longValue());
51: }
52:
53: protected Number negateImpl(Number left) {
54: return new Long(-left.longValue());
55: }
56:
57: protected Number bitNegateImpl(Number left) {
58: return new Long(~left.longValue());
59: }
60:
61: protected Number orImpl(Number left, Number right) {
62: return new Long(left.longValue() | right.longValue());
63: }
64:
65: protected Number andImpl(Number left, Number right) {
66: return new Long(left.longValue() & right.longValue());
67: }
68:
69: protected Number xorImpl(Number left, Number right) {
70: return new Long(left.longValue() ^ right.longValue());
71: }
72:
73: protected Number leftShiftImpl(Number left, Number right) {
74: return new Long(left.longValue() << right.longValue());
75: }
76:
77: protected Number rightShiftImpl(Number left, Number right) {
78: return new Long(left.longValue() >> right.longValue());
79: }
80:
81: protected Number rightShiftUnsignedImpl(Number left, Number right) {
82: return new Long(left.longValue() >>> right.longValue());
83: }
84:
85: protected Number bitAndImpl(Number left, Number right) {
86: return new Long(left.longValue() & right.longValue());
87: }
88: }
|