001 /*
002 * Created on Mar 5, 2004
003 *
004 */
005 package org.codehaus.groovy.runtime;
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 }