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