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