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 }