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