001 package org.codehaus.groovy.runtime.typehandling; 002 003 /** 004 * BigInteger NumberMath operations 005 * 006 * @author Steve Goetze 007 */ 008 public class BigIntegerMath extends NumberMath { 009 010 protected static BigIntegerMath instance = new BigIntegerMath(); 011 012 private BigIntegerMath() {} 013 014 protected Number absImpl(Number number) { 015 return toBigInteger(number).abs(); 016 } 017 018 protected Number addImpl(Number left, Number right) { 019 return toBigInteger(left).add(toBigInteger(right)); 020 } 021 protected Number subtractImpl(Number left, Number right) { 022 return toBigInteger(left).subtract(toBigInteger(right)); 023 } 024 025 protected Number multiplyImpl(Number left, Number right) { 026 return toBigInteger(left).multiply(toBigInteger(right)); 027 } 028 029 protected Number divideImpl(Number left, Number right) { 030 return BigDecimalMath.instance.divideImpl(left, right); 031 } 032 033 protected int compareToImpl(Number left, Number right) { 034 return toBigInteger(left).compareTo(toBigInteger(right)); 035 } 036 037 protected Number intdivImpl(Number left, Number right) { 038 return toBigInteger(left).divide(toBigInteger(right)); 039 } 040 041 protected Number modImpl(Number left, Number right) { 042 return toBigInteger(left).mod(toBigInteger(right)); 043 } 044 045 protected Number negateImpl(Number left) { 046 return toBigInteger(left).negate(); 047 } 048 049 protected Number bitNegateImpl(Number left) { 050 return toBigInteger(left).not(); 051 } 052 053 protected Number orImpl(Number left, Number right) { 054 return toBigInteger(left).or(toBigInteger(right)); 055 } 056 057 protected Number andImpl(Number left, Number right) { 058 return toBigInteger(left).and(toBigInteger(right)); 059 } 060 061 protected Number xorImpl(Number left, Number right) { 062 return toBigInteger(left).xor(toBigInteger(right)); 063 } 064 }