001 /*
002 * Created on Mar 5, 2004
003 *
004 */
005 package org.codehaus.groovy.runtime;
006
007 /**
008 * Integer NumberMath operations
009 *
010 * @author Steve Goetze
011 */
012 public class IntegerMath extends NumberMath {
013
014 protected static IntegerMath instance = new IntegerMath();
015
016 private IntegerMath() {}
017
018 protected Number absImpl(Number number) {
019 return new Integer(Math.abs(number.intValue()));
020 }
021
022 protected Number addImpl(Number left, Number right) {
023 return new Integer(left.intValue() + right.intValue());
024 }
025
026 protected Number subtractImpl(Number left, Number right) {
027 return new Integer(left.intValue() - right.intValue());
028 }
029
030 protected Number multiplyImpl(Number left, Number right) {
031 return new Integer(left.intValue() * right.intValue());
032 }
033
034 protected Number divideImpl(Number left, Number right) {
035 return BigDecimalMath.instance.divideImpl(left, right);
036 }
037
038 protected int compareToImpl(Number left, Number right) {
039 int leftVal = left.intValue();
040 int rightVal = right.intValue();
041 return (leftVal<rightVal ? -1 : (leftVal==rightVal ? 0 : 1));
042 }
043
044 protected Number orImpl(Number left, Number right) {
045 return new Integer(left.intValue() | right.intValue());
046 }
047
048 protected Number andImpl(Number left, Number right) {
049 return new Integer(left.intValue() & right.intValue());
050 }
051
052 protected Number xorImpl(Number left, Number right) {
053 return new Integer(left.intValue() ^ right.intValue());
054 }
055
056 protected Number intdivImpl(Number left, Number right) {
057 return new Integer(left.intValue() / right.intValue());
058 }
059
060 protected Number modImpl(Number left, Number right) {
061 return new Integer(left.intValue() % right.intValue());
062 }
063
064 protected Number negateImpl(Number left) {
065 return new Integer(-left.intValue());
066 }
067
068 protected Number bitNegateImpl(Number left) {
069 return new Integer(~left.intValue());
070 }
071
072 protected Number leftShiftImpl(Number left, Number right) {
073 return new Integer(left.intValue() << right.intValue());
074 }
075
076 protected Number rightShiftImpl(Number left, Number right) {
077 return new Integer(left.intValue() >> right.intValue());
078 }
079
080 protected Number rightShiftUnsignedImpl(Number left, Number right) {
081 return new Integer(left.intValue() >>> right.intValue());
082 }
083 }