All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.ssssssss.script.runtime.handle.ArithmeticHandle Maven / Gradle / Ivy

The newest version!
package org.ssssssss.script.runtime.handle;

import java.lang.invoke.CallSite;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.Map;

import static java.lang.invoke.MethodHandles.catchException;
import static java.lang.invoke.MethodHandles.dropArguments;
import static java.lang.invoke.MethodType.methodType;

public class ArithmeticHandle {

	private static final MethodHandle FALLBACK;

	private static final Map OPERATORS = new HashMap<>(5);

	static {
		try {
			OPERATORS.put("plus", "+");
			OPERATORS.put("minus", "-");
			OPERATORS.put("mul", "*");
			OPERATORS.put("divide", "/");
			OPERATORS.put("divideAndRemainder", "%");
			MethodHandles.Lookup lookup = MethodHandles.lookup();
			FALLBACK = lookup.findStatic(ArithmeticHandle.class, "fallback", methodType(Object.class, MethodCallSite.class, Object[].class));
		} catch (NoSuchMethodException | IllegalAccessException e) {
			throw new Error("ArithmeticHandle初始化失败", e);
		}
	}

	public static CallSite bootstrap(MethodHandles.Lookup caller, String name, MethodType type, int count) {
		MethodCallSite callSite = new MethodCallSite(caller, name, type, ArithmeticHandle.class);
		MethodHandle fallback = FALLBACK.bindTo(callSite)
				.asCollector(Object[].class, type.parameterCount())
				.asType(type);
		callSite.setTarget(fallback);
		callSite.fallback = fallback;
		return callSite;
	}

	public static Object fallback(MethodCallSite callSite, Object[] args) throws Throwable {
		Class arg1Class = (args[0] == null) ? Object.class : args[0].getClass();
		Class arg2Class = (args[1] == null) ? Object.class : args[1].getClass();
		MethodHandle target;
		try {
			target = callSite.findStatic(methodType(Object.class, arg1Class, arg2Class));
		} catch (Throwable ignored) {
			try {
				target = callSite.findStatic(callSite.methodName + "_fallback", methodType(Object.class, Object.class, Object.class));
			} catch (Throwable t) {
				return reject(args[0], args[1], OPERATORS.getOrDefault(callSite.methodName, callSite.methodName));
			}
		}
		target = target.asType(methodType(Object.class, Object.class, Object.class));
		target = catchException(target, ClassCastException.class, dropArguments(callSite.fallback,0,ClassCastException.class));
		callSite.setTarget(target);
		return target.invokeWithArguments(args);
	}


	/* byte + 操作实现 */
	public static Object plus(Byte a, Byte b) {
		return (byte)(a + b);
	}

	public static Object plus(Byte a, Short b) {
		return (short)(a + b);
	}

	public static Object plus(Byte a, Integer b) {
		return a + b;
	}

	public static Object plus(Byte a, Float b) {
		return a + b;
	}

	public static Object plus(Byte a, Double b) {
		return a + b;
	}

	public static Object plus(Byte a, Long b) {
		return a + b;
	}

	public static Object plus(Byte a, BigDecimal b) {
		return b.add(new BigDecimal(a));
	}

	public static Object plus(Byte a, BigInteger b) {
		return b.add(BigInteger.valueOf(a));
	}

	public static Object plus(Byte a, String b) {
		return a + b;
	}
	/* byte + 操作实现 */

	/* short + 操作实现 */
	public static Object plus(Short a, Byte b) {
		return (short)(a + b);
	}

	public static Object plus(Short a, Short b) {
		return (short)(a + b);
	}

	public static Object plus(Short a, Integer b) {
		return a + b;
	}

	public static Object plus(Short a, Float b) {
		return a + b;
	}

	public static Object plus(Short a, Double b) {
		return a + b;
	}

	public static Object plus(Short a, Long b) {
		return a + b;
	}

	public static Object plus(Short a, BigDecimal b) {
		return b.add(new BigDecimal(a));
	}

	public static Object plus(Short a, BigInteger b) {
		return b.add(BigInteger.valueOf(a));
	}

	public static Object plus(Short a, String b) {
		return a + b;
	}
	/* short + 操作实现 */

	/* int + 操作实现 */
	public static Object plus(Integer a, Byte b) {
		return a + b;
	}

	public static Object plus(Integer a, Short b) {
		return a + b;
	}

	public static Object plus(Integer a, Integer b) {
		return a + b;
	}

	public static Object plus(Integer a, Float b) {
		return a + b;
	}

	public static Object plus(Integer a, Double b) {
		return a + b;
	}

	public static Object plus(Integer a, Long b) {
		return a + b;
	}

	public static Object plus(Integer a, BigDecimal b) {
		return b.add(new BigDecimal(a));
	}

	public static Object plus(Integer a, BigInteger b) {
		return b.add(BigInteger.valueOf(a));
	}

	public static Object plus(Integer a, String b) {
		return a + b;
	}
	/* int + 操作实现 */

	/* float + 操作实现 */
	public static Object plus(Float a, Byte b) {
		return a + b;
	}

	public static Object plus(Float a, Short b) {
		return a + b;
	}

	public static Object plus(Float a, Integer b) {
		return a + b;
	}

	public static Object plus(Float a, Float b) {
		return a + b;
	}

	public static Object plus(Float a, Double b) {
		return a + b;
	}

	public static Object plus(Float a, Long b) {
		return a + b;
	}

	public static Object plus(Float a, BigDecimal b) {
		return b.add(new BigDecimal(a.toString()));
	}

	public static Object plus(Float a, BigInteger b) {
		return new BigDecimal(b).add(new BigDecimal(a.toString()));
	}

	public static Object plus(Float a, String b) {
		return a + b;
	}
	/* float + 操作实现 */

	/* double + 操作实现 */
	public static Object plus(Double a, Byte b) {
		return a + b;
	}

	public static Object plus(Double a, Short b) {
		return a + b;
	}

	public static Object plus(Double a, Integer b) {
		return a + b;
	}

	public static Object plus(Double a, Float b) {
		return a + b;
	}

	public static Object plus(Double a, Double b) {
		return a + b;
	}

	public static Object plus(Double a, Long b) {
		return a + b;
	}

	public static Object plus(Double a, BigDecimal b) {
		return b.add(new BigDecimal(a.toString()));
	}

	public static Object plus(Double a, BigInteger b) {
		return new BigDecimal(b).add(new BigDecimal(a.toString()));
	}

	public static Object plus(Double a, String b) {
		return a + b;
	}
	/* double + 操作实现 */

	/* long + 操作实现 */
	public static Object plus(Long a, Byte b) {
		return a + b;
	}

	public static Object plus(Long a, Short b) {
		return a + b;
	}

	public static Object plus(Long a, Integer b) {
		return a + b;
	}

	public static Object plus(Long a, Float b) {
		return a + b;
	}

	public static Object plus(Long a, Double b) {
		return a + b;
	}

	public static Object plus(Long a, Long b) {
		return a + b;
	}

	public static Object plus(Long a, BigDecimal b) {
		return b.add(new BigDecimal(a));
	}

	public static Object plus(Long a, BigInteger b) {
		return b.add(BigInteger.valueOf(a));
	}

	public static Object plus(Long a, String b) {
		return a + b;
	}
	/* long + 操作实现 */

	/* bigecimal + 操作实现 */
	public static Object plus(BigDecimal a, Byte b) {
		return a.add(new BigDecimal(b));
	}

	public static Object plus(BigDecimal a, Short b) {
		return a.add(new BigDecimal(b));
	}

	public static Object plus(BigDecimal a, Integer b) {
		return a.add(new BigDecimal(b));
	}

	public static Object plus(BigDecimal a, Float b) {
		return a.add(new BigDecimal(b.toString()));
	}

	public static Object plus(BigDecimal a, Double b) {
		return a.add(new BigDecimal(b.toString()));
	}

	public static Object plus(BigDecimal a, Long b) {
		return a.add(new BigDecimal(b));
	}

	public static Object plus(BigDecimal a, BigDecimal b) {
		return a.add(b);
	}

	public static Object plus(BigDecimal a, BigInteger b) {
		return a.add(new BigDecimal(b));
	}

	public static Object plus(BigDecimal a, String b) {
		return a + b;
	}
	/* bigdecimal + 操作实现 */

	/* biginteger + 操作实现 */
	public static Object plus(BigInteger a, Byte b) {
		return a.add(BigInteger.valueOf(b));
	}

	public static Object plus(BigInteger a, Short b) {
		return a.add(BigInteger.valueOf(b));
	}

	public static Object plus(BigInteger a, Integer b) {
		return a.add(BigInteger.valueOf(b));
	}

	public static Object plus(BigInteger a, Float b) {
		return new BigDecimal(a).add(new BigDecimal(b.toString()));
	}

	public static Object plus(BigInteger a, Double b) {
		return new BigDecimal(a).add(new BigDecimal(b.toString()));
	}

	public static Object plus(BigInteger a, Long b) {
		return a.add(BigInteger.valueOf(b));
	}

	public static Object plus(BigInteger a, BigDecimal b) {
		return new BigDecimal(a).add(b);
	}

	public static Object plus(BigInteger a, BigInteger b) {
		return a.add(b);
	}

	public static Object plus(BigInteger a, String b) {
		return a + b;
	}
	/* biginteger + 操作实现 */

	/* string + 操作实现 */
	public static Object plus(String a, Byte b) {
		return a + b;
	}

	public static Object plus(String a, Short b) {
		return a + b;
	}

	public static Object plus(String a, Integer b) {
		return a + b;
	}

	public static Object plus(String a, Float b) {
		return a + b;
	}

	public static Object plus(String a, Double b) {
		return a + b;
	}

	public static Object plus(String a, Long b) {
		return a + b;
	}

	public static Object plus(String a, BigDecimal b) {
		return a + b;
	}

	public static Object plus(String a, BigInteger b) {
		return a + b;
	}

	public static Object plus(String a, String b) {
		return a + b;
	}

	public static Object plus(String a, Object b) {
		return a + b;
	}
	/* string + 操作实现 */

	public static Object plus_fallback(Object a, Object b) {
		if(a == null && b == null){
			return null;
		}
		return "" + a + b;
	}


	/* byte - 操作实现 */
	public static Object minus(Byte a, Byte b) {
		return (byte)(a - b);
	}

	public static Object minus(Byte a, Short b) {
		return (short)(a - b);
	}

	public static Object minus(Byte a, Integer b) {
		return a - b;
	}

	public static Object minus(Byte a, Float b) {
		return a - b;
	}

	public static Object minus(Byte a, Double b) {
		return a - b;
	}

	public static Object minus(Byte a, Long b) {
		return a - b;
	}

	public static Object minus(Byte a, BigDecimal b) {
		return new BigDecimal(a).subtract(b);
	}

	public static Object minus(Byte a, BigInteger b) {
		return BigInteger.valueOf(a).subtract(b);
	}
	/* byte - 操作实现 */

	/* short - 操作实现 */
	public static Object minus(Short a, Byte b) {
		return (short)(a - b);
	}

	public static Object minus(Short a, Short b) {
		return (short)(a - b);
	}

	public static Object minus(Short a, Integer b) {
		return a - b;
	}

	public static Object minus(Short a, Float b) {
		return a - b;
	}

	public static Object minus(Short a, Double b) {
		return a - b;
	}

	public static Object minus(Short a, Long b) {
		return a - b;
	}

	public static Object minus(Short a, BigDecimal b) {
		return new BigDecimal(a).subtract(b);
	}

	public static Object minus(Short a, BigInteger b) {
		return BigInteger.valueOf(a).subtract(b);
	}
	/* short - 操作实现 */

	/* int - 操作实现 */
	public static Object minus(Integer a, Byte b) {
		return a - b;
	}

	public static Object minus(Integer a, Short b) {
		return a - b;
	}

	public static Object minus(Integer a, Integer b) {
		return a - b;
	}

	public static Object minus(Integer a, Float b) {
		return a - b;
	}

	public static Object minus(Integer a, Double b) {
		return a - b;
	}

	public static Object minus(Integer a, Long b) {
		return a - b;
	}

	public static Object minus(Integer a, BigDecimal b) {
		return new BigDecimal(a).subtract(b);
	}

	public static Object minus(Integer a, BigInteger b) {
		return BigInteger.valueOf(a).subtract(b);
	}
	/* int - 操作实现 */

	/* float - 操作实现 */
	public static Object minus(Float a, Byte b) {
		return a - b;
	}

	public static Object minus(Float a, Short b) {
		return a - b;
	}

	public static Object minus(Float a, Integer b) {
		return a - b;
	}

	public static Object minus(Float a, Float b) {
		return a - b;
	}

	public static Object minus(Float a, Double b) {
		return a - b;
	}

	public static Object minus(Float a, Long b) {
		return a - b;
	}

	public static Object minus(Float a, BigDecimal b) {
		return new BigDecimal(a.toString()).subtract(b);
	}

	public static Object minus(Float a, BigInteger b) {
		return new BigDecimal(b).subtract(new BigDecimal(a.toString()));
	}
	/* float - 操作实现 */

	/* double - 操作实现 */
	public static Object minus(Double a, Byte b) {
		return a - b;
	}

	public static Object minus(Double a, Short b) {
		return a - b;
	}

	public static Object minus(Double a, Integer b) {
		return a - b;
	}

	public static Object minus(Double a, Float b) {
		return a - b;
	}

	public static Object minus(Double a, Double b) {
		return a - b;
	}

	public static Object minus(Double a, Long b) {
		return a - b;
	}

	public static Object minus(Double a, BigDecimal b) {
		return new BigDecimal(a.toString()).subtract(b);
	}

	public static Object minus(Double a, BigInteger b) {
		return new BigDecimal(a.toString()).subtract(new BigDecimal(b));
	}
	/* double - 操作实现 */

	/* long - 操作实现 */
	public static Object minus(Long a, Byte b) {
		return a - b;
	}

	public static Object minus(Long a, Short b) {
		return a - b;
	}

	public static Object minus(Long a, Integer b) {
		return a - b;
	}

	public static Object minus(Long a, Float b) {
		return a - b;
	}

	public static Object minus(Long a, Double b) {
		return a - b;
	}

	public static Object minus(Long a, Long b) {
		return a - b;
	}

	public static Object minus(Long a, BigDecimal b) {
		return new BigDecimal(a).subtract(b);
	}
	/* long - 操作实现 */

	/* bigecimal - 操作实现 */
	public static Object minus(BigDecimal a, Byte b) {
		return a.subtract(new BigDecimal(b));
	}

	public static Object minus(BigDecimal a, Short b) {
		return a.subtract(new BigDecimal(b));
	}

	public static Object minus(BigDecimal a, Integer b) {
		return a.subtract(new BigDecimal(b));
	}

	public static Object minus(BigDecimal a, Float b) {
		return a.subtract(new BigDecimal(b.toString()));
	}

	public static Object minus(BigDecimal a, Double b) {
		return a.subtract(new BigDecimal(b.toString()));
	}

	public static Object minus(BigDecimal a, Long b) {
		return a.subtract(new BigDecimal(b));
	}

	public static Object minus(BigDecimal a, BigDecimal b) {
		return a.subtract(b);
	}

	public static Object minus(BigDecimal a, BigInteger b) {
		return a.subtract(new BigDecimal(b));
	}
	/* bigdecimal - 操作实现 */

	/* biginteger - 操作实现 */
	public static Object minus(BigInteger a, Byte b) {
		return a.subtract(BigInteger.valueOf(b));
	}

	public static Object minus(BigInteger a, Short b) {
		return a.subtract(BigInteger.valueOf(b));
	}

	public static Object minus(BigInteger a, Integer b) {
		return a.subtract(BigInteger.valueOf(b));
	}

	public static Object minus(BigInteger a, Float b) {
		return new BigDecimal(a).subtract(new BigDecimal(b.toString()));
	}

	public static Object minus(BigInteger a, Double b) {
		return new BigDecimal(a).subtract(new BigDecimal(b.toString()));
	}

	public static Object minus(BigInteger a, Long b) {
		return a.subtract(BigInteger.valueOf(b));
	}

	public static Object minus(BigInteger a, BigDecimal b) {
		return new BigDecimal(a).subtract(b);
	}

	public static Object minus(BigInteger a, BigInteger b) {
		return a.subtract(b);
	}
	/* biginteger - 操作实现 */

	/* byte * 操作实现 */
	public static Object mul(Byte a, Byte b) {
		return (byte)(a * b);
	}

	public static Object mul(Byte a, Short b) {
		return (short)(a * b);
	}

	public static Object mul(Byte a, Integer b) {
		return a * b;
	}

	public static Object mul(Byte a, Float b) {
		return a * b;
	}

	public static Object mul(Byte a, Double b) {
		return a * b;
	}

	public static Object mul(Byte a, Long b) {
		return a * b;
	}

	public static Object mul(Byte a, BigDecimal b) {
		return new BigDecimal(a).multiply(b);
	}

	public static Object mul(Byte a, BigInteger b) {
		return BigInteger.valueOf(a).multiply(b);
	}
	/* byte * 操作实现 */

	/* short * 操作实现 */
	public static Object mul(Short a, Byte b) {
		return (short)(a * b);
	}

	public static Object mul(Short a, Short b) {
		return (short)(a * b);
	}

	public static Object mul(Short a, Integer b) {
		return a * b;
	}

	public static Object mul(Short a, Float b) {
		return a * b;
	}

	public static Object mul(Short a, Double b) {
		return a * b;
	}

	public static Object mul(Short a, Long b) {
		return a * b;
	}

	public static Object mul(Short a, BigDecimal b) {
		return new BigDecimal(a).multiply(b);
	}

	public static Object mul(Short a, BigInteger b) {
		return BigInteger.valueOf(a).multiply(b);
	}
	/* short * 操作实现 */

	/* int * 操作实现 */
	public static Object mul(Integer a, Byte b) {
		return a * b;
	}

	public static Object mul(Integer a, Short b) {
		return a * b;
	}

	public static Object mul(Integer a, Integer b) {
		return a * b;
	}

	public static Object mul(Integer a, Float b) {
		return a * b;
	}

	public static Object mul(Integer a, Double b) {
		return a * b;
	}

	public static Object mul(Integer a, Long b) {
		return a * b;
	}

	public static Object mul(Integer a, BigDecimal b) {
		return new BigDecimal(a).multiply(b);
	}

	public static Object mul(Integer a, BigInteger b) {
		return BigInteger.valueOf(a).multiply(b);
	}
	/* int * 操作实现 */

	/* float * 操作实现 */
	public static Object mul(Float a, Byte b) {
		return a * b;
	}

	public static Object mul(Float a, Short b) {
		return a * b;
	}

	public static Object mul(Float a, Integer b) {
		return a * b;
	}

	public static Object mul(Float a, Float b) {
		return a * b;
	}

	public static Object mul(Float a, Double b) {
		return a * b;
	}

	public static Object mul(Float a, Long b) {
		return a * b;
	}

	public static Object mul(Float a, BigDecimal b) {
		return b.multiply(new BigDecimal(a.toString()));
	}

	public static Object mul(Float a, BigInteger b) {
		return new BigDecimal(b).multiply(new BigDecimal(a.toString()));
	}
	/* float * 操作实现 */

	/* double * 操作实现 */
	public static Object mul(Double a, Byte b) {
		return a * b;
	}

	public static Object mul(Double a, Short b) {
		return a * b;
	}

	public static Object mul(Double a, Integer b) {
		return a * b;
	}

	public static Object mul(Double a, Float b) {
		return a * b;
	}

	public static Object mul(Double a, Double b) {
		return a * b;
	}

	public static Object mul(Double a, Long b) {
		return a * b;
	}

	public static Object mul(Double a, BigDecimal b) {
		return new BigDecimal(a.toString()).multiply(b);
	}

	public static Object mul(Double a, BigInteger b) {
		return new BigDecimal(a.toString()).multiply(new BigDecimal(b));
	}
	/* double * 操作实现 */

	/* long * 操作实现 */
	public static Object mul(Long a, Byte b) {
		return a * b;
	}

	public static Object mul(Long a, Short b) {
		return a * b;
	}

	public static Object mul(Long a, Integer b) {
		return a * b;
	}

	public static Object mul(Long a, Float b) {
		return a * b;
	}

	public static Object mul(Long a, Double b) {
		return a * b;
	}

	public static Object mul(Long a, Long b) {
		return a * b;
	}

	public static Object mul(Long a, BigDecimal b) {
		return new BigDecimal(a).multiply(b);
	}

	public static Object mul(Long a, BigInteger b) {
		return BigInteger.valueOf(a).multiply(b);
	}
	/* long * 操作实现 */

	/* bigdecimal * 操作实现 */
	public static Object mul(BigDecimal a, Byte b) {
		return a.multiply(new BigDecimal(b));
	}

	public static Object mul(BigDecimal a, Short b) {
		return a.multiply(new BigDecimal(b));
	}

	public static Object mul(BigDecimal a, Integer b) {
		return a.multiply(new BigDecimal(b));
	}

	public static Object mul(BigDecimal a, Float b) {
		return a.multiply(new BigDecimal(b.toString()));
	}

	public static Object mul(BigDecimal a, Double b) {
		return a.multiply(new BigDecimal(b.toString()));
	}

	public static Object mul(BigDecimal a, Long b) {
		return a.multiply(new BigDecimal(b));
	}

	public static Object mul(BigDecimal a, BigDecimal b) {
		return a.multiply(b);
	}

	public static Object mul(BigDecimal a, BigInteger b) {
		return a.multiply(new BigDecimal(b));
	}
	/* bigdecimal * 操作实现 */

	/* biginteger * 操作实现 */
	public static Object mul(BigInteger a, Byte b) {
		return a.multiply(BigInteger.valueOf(b));
	}

	public static Object mul(BigInteger a, Short b) {
		return a.multiply(BigInteger.valueOf(b));
	}

	public static Object mul(BigInteger a, Integer b) {
		return a.multiply(BigInteger.valueOf(b));
	}

	public static Object mul(BigInteger a, Float b) {
		return new BigDecimal(a).multiply(new BigDecimal(b.toString()));
	}

	public static Object mul(BigInteger a, Double b) {
		return new BigDecimal(a).multiply(new BigDecimal(b.toString()));
	}

	public static Object mul(BigInteger a, Long b) {
		return a.multiply(BigInteger.valueOf(b));
	}

	public static Object mul(BigInteger a, BigDecimal b) {
		return new BigDecimal(a).multiply(b);
	}

	public static Object mul(BigInteger a, BigInteger b) {
		return a.multiply(b);
	}
	/* biginteger * 操作实现 */


	/* byte / 操作实现 */
	public static Object divide(Byte a, Byte b) {
		return (byte)(a / b);
	}

	public static Object divide(Byte a, Short b) {
		return (short)(a / b);
	}

	public static Object divide(Byte a, Integer b) {
		return a / b;
	}

	public static Object divide(Byte a, Float b) {
		return a / b;
	}

	public static Object divide(Byte a, Double b) {
		return a / b;
	}

	public static Object divide(Byte a, Long b) {
		return a / b;
	}

	public static Object divide(Byte a, BigDecimal b) {
		return new BigDecimal(a).divide(b);
	}

	public static Object divide(Byte a, BigInteger b) {
		return BigInteger.valueOf(a).divide(b);
	}
	/* byte / 操作实现 */

	/* short / 操作实现 */
	public static Object divide(Short a, Byte b) {
		return (short)(a / b);
	}

	public static Object divide(Short a, Short b) {
		return (short)(a / b);
	}

	public static Object divide(Short a, Integer b) {
		return a / b;
	}

	public static Object divide(Short a, Float b) {
		return a / b;
	}

	public static Object divide(Short a, Double b) {
		return a / b;
	}

	public static Object divide(Short a, Long b) {
		return a / b;
	}

	public static Object divide(Short a, BigDecimal b) {
		return new BigDecimal(a).divide(b);
	}

	public static Object divide(Short a, BigInteger b) {
		return BigInteger.valueOf(a).divide(b);
	}
	/* short / 操作实现 */

	/* int / 操作实现 */
	public static Object divide(Integer a, Byte b) {
		return a / b;
	}

	public static Object divide(Integer a, Short b) {
		return a / b;
	}

	public static Object divide(Integer a, Integer b) {
		return a / b;
	}

	public static Object divide(Integer a, Float b) {
		return a / b;
	}

	public static Object divide(Integer a, Double b) {
		return a / b;
	}

	public static Object divide(Integer a, Long b) {
		return a / b;
	}

	public static Object divide(Integer a, BigDecimal b) {
		return new BigDecimal(a).divide(b);
	}

	public static Object divide(Integer a, BigInteger b) {
		return BigInteger.valueOf(a).divide(b);
	}
	/* int / 操作实现 */

	/* float / 操作实现 */
	public static Object divide(Float a, Byte b) {
		return a / b;
	}

	public static Object divide(Float a, Short b) {
		return a / b;
	}

	public static Object divide(Float a, Integer b) {
		return a / b;
	}

	public static Object divide(Float a, Float b) {
		return a / b;
	}

	public static Object divide(Float a, Double b) {
		return a / b;
	}

	public static Object divide(Float a, Long b) {
		return a / b;
	}

	public static Object divide(Float a, BigDecimal b) {
		return new BigDecimal(a.toString()).divide(b);
	}

	public static Object divide(Float a, BigInteger b) {
		return new BigDecimal(a.toString()).divide(new BigDecimal(b));
	}
	/* float / 操作实现 */

	/* double / 操作实现 */
	public static Object divide(Double a, Byte b) {
		return a / b;
	}

	public static Object divide(Double a, Short b) {
		return a / b;
	}

	public static Object divide(Double a, Integer b) {
		return a / b;
	}

	public static Object divide(Double a, Float b) {
		return a / b;
	}

	public static Object divide(Double a, Double b) {
		return a / b;
	}

	public static Object divide(Double a, Long b) {
		return a / b;
	}

	public static Object divide(Double a, BigDecimal b) {
		return new BigDecimal(a.toString()).divide(b);
	}

	public static Object divide(Double a, BigInteger b) {
		return new BigDecimal(a.toString()).divide(new BigDecimal(b));
	}
	/* double / 操作实现 */

	/* long / 操作实现 */
	public static Object divide(Long a, Byte b) {
		return a / b;
	}

	public static Object divide(Long a, Short b) {
		return a / b;
	}

	public static Object divide(Long a, Integer b) {
		return a / b;
	}

	public static Object divide(Long a, Float b) {
		return a / b;
	}

	public static Object divide(Long a, Double b) {
		return a / b;
	}

	public static Object divide(Long a, Long b) {
		return a / b;
	}

	public static Object divide(Long a, BigDecimal b) {
		return new BigDecimal(a).divide(b);
	}

	public static Object divide(Long a, BigInteger b) {
		return BigInteger.valueOf(a).divide(b);
	}


	/* long / 操作实现 */

	/* bigecimal / 操作实现 */
	public static Object divide(BigDecimal a, Byte b) {
		return a.divide(new BigDecimal(b));
	}

	public static Object divide(BigDecimal a, Short b) {
		return a.divide(new BigDecimal(b));
	}

	public static Object divide(BigDecimal a, Integer b) {
		return a.divide(new BigDecimal(b));
	}

	public static Object divide(BigDecimal a, Float b) {
		return a.divide(new BigDecimal(b.toString()));
	}

	public static Object divide(BigDecimal a, Double b) {
		return a.divide(new BigDecimal(b.toString()));
	}

	public static Object divide(BigDecimal a, Long b) {
		return a.divide(new BigDecimal(b));
	}

	public static Object divide(BigDecimal a, BigDecimal b) {
		return a.divide(b);
	}

	public static Object divide(BigDecimal a, BigInteger b) {
		return a.divide(new BigDecimal(b));
	}
	/* bigdecimal / 操作实现 */

	/* biginteger / 操作实现 */
	public static Object divide(BigInteger a, Byte b) {
		return a.divide(BigInteger.valueOf(b));
	}

	public static Object divide(BigInteger a, Short b) {
		return a.divide(BigInteger.valueOf(b));
	}

	public static Object divide(BigInteger a, Integer b) {
		return a.divide(BigInteger.valueOf(b));
	}

	public static Object divide(BigInteger a, Float b) {
		return new BigDecimal(a).divide(new BigDecimal(b.toString()));
	}

	public static Object divide(BigInteger a, Double b) {
		return new BigDecimal(a).divide(new BigDecimal(b.toString()));
	}

	public static Object divide(BigInteger a, Long b) {
		return a.divide(BigInteger.valueOf(b));
	}

	public static Object divide(BigInteger a, BigDecimal b) {
		return new BigDecimal(a).divide(b);
	}

	public static Object divide(BigInteger a, BigInteger b) {
		return a.divide(b);
	}
	/* biginteger / 操作实现 */


	/* byte % 操作实现 */
	public static Object divideAndRemainder(Byte a, Byte b) {
		return (byte)(a % b);
	}

	public static Object divideAndRemainder(Byte a, Short b) {
		return (short)(a % b);
	}

	public static Object divideAndRemainder(Byte a, Integer b) {
		return a % b;
	}

	public static Object divideAndRemainder(Byte a, Float b) {
		return a % b;
	}

	public static Object divideAndRemainder(Byte a, Double b) {
		return a % b;
	}

	public static Object divideAndRemainder(Byte a, Long b) {
		return a % b;
	}

	public static Object divideAndRemainder(Byte a, BigDecimal b) {
		return new BigDecimal(a).divideAndRemainder(b);
	}
	/* byte % 操作实现 */

	/* short % 操作实现 */
	public static Object divideAndRemainder(Short a, Byte b) {
		return (short)(a % b);
	}

	public static Object divideAndRemainder(Short a, Short b) {
		return (short)(a % b);
	}

	public static Object divideAndRemainder(Short a, Integer b) {
		return a % b;
	}

	public static Object divideAndRemainder(Short a, Float b) {
		return a % b;
	}

	public static Object divideAndRemainder(Short a, Double b) {
		return a % b;
	}

	public static Object divideAndRemainder(Short a, Long b) {
		return a % b;
	}

	public static Object divideAndRemainder(Short a, BigDecimal b) {
		return new BigDecimal(a).divideAndRemainder(b);
	}

	public static Object divideAndRemainder(Short a, BigInteger b) {
		return BigInteger.valueOf(a).divideAndRemainder(b);
	}
	/* short % 操作实现 */

	/* int % 操作实现 */
	public static Object divideAndRemainder(Integer a, Byte b) {
		return a % b;
	}

	public static Object divideAndRemainder(Integer a, Short b) {
		return a % b;
	}

	public static Object divideAndRemainder(Integer a, Integer b) {
		return a % b;
	}

	public static Object divideAndRemainder(Integer a, Float b) {
		return a % b;
	}

	public static Object divideAndRemainder(Integer a, Double b) {
		return a % b;
	}

	public static Object divideAndRemainder(Integer a, Long b) {
		return a % b;
	}

	public static Object divideAndRemainder(Integer a, BigDecimal b) {
		return new BigDecimal(a).divideAndRemainder(b);
	}

	public static Object divideAndRemainder(Integer a, BigInteger b) {
		return BigInteger.valueOf(a).divideAndRemainder(b);
	}
	/* int % 操作实现 */

	/* float % 操作实现 */
	public static Object divideAndRemainder(Float a, Byte b) {
		return a % b;
	}

	public static Object divideAndRemainder(Float a, Short b) {
		return a % b;
	}

	public static Object divideAndRemainder(Float a, Integer b) {
		return a % b;
	}

	public static Object divideAndRemainder(Float a, Float b) {
		return a % b;
	}

	public static Object divideAndRemainder(Float a, Double b) {
		return a % b;
	}

	public static Object divideAndRemainder(Float a, Long b) {
		return a % b;
	}

	public static Object divideAndRemainder(Float a, BigDecimal b) {
		return new BigDecimal(a.toString()).divideAndRemainder(b);
	}

	public static Object divideAndRemainder(Float a, BigInteger b) {
		return new BigDecimal(a.toString()).divideAndRemainder(new BigDecimal(b));
	}
	/* float % 操作实现 */

	/* double % 操作实现 */
	public static Object divideAndRemainder(Double a, Byte b) {
		return a % b;
	}

	public static Object divideAndRemainder(Double a, Short b) {
		return a % b;
	}

	public static Object divideAndRemainder(Double a, Integer b) {
		return a % b;
	}

	public static Object divideAndRemainder(Double a, Float b) {
		return a % b;
	}

	public static Object divideAndRemainder(Double a, Double b) {
		return a % b;
	}

	public static Object divideAndRemainder(Double a, Long b) {
		return a % b;
	}

	public static Object divideAndRemainder(Double a, BigDecimal b) {
		return new BigDecimal(a.toString()).divideAndRemainder(b);
	}

	public static Object divideAndRemainder(Double a, BigInteger b) {
		return new BigDecimal(a.toString()).divideAndRemainder(new BigDecimal(b));
	}
	/* double % 操作实现 */

	/* long % 操作实现 */
	public static Object divideAndRemainder(Long a, Byte b) {
		return a % b;
	}

	public static Object divideAndRemainder(Long a, Short b) {
		return a % b;
	}

	public static Object divideAndRemainder(Long a, Integer b) {
		return a % b;
	}

	public static Object divideAndRemainder(Long a, Float b) {
		return a % b;
	}

	public static Object divideAndRemainder(Long a, Double b) {
		return a % b;
	}

	public static Object divideAndRemainder(Long a, Long b) {
		return a % b;
	}

	public static Object divideAndRemainder(Long a, BigDecimal b) {
		return new BigDecimal(a).divideAndRemainder(b);
	}

	public static Object divideAndRemainder(Long a, BigInteger b) {
		return BigInteger.valueOf(a).divideAndRemainder(b);
	}
	/* long % 操作实现 */

	/* bigdecimal % 操作实现 */
	public static Object divideAndRemainder(BigDecimal a, Byte b) {
		return a.divideAndRemainder(new BigDecimal(b));
	}

	public static Object divideAndRemainder(BigDecimal a, Short b) {
		return a.divideAndRemainder(new BigDecimal(b));
	}

	public static Object divideAndRemainder(BigDecimal a, Integer b) {
		return a.divideAndRemainder(new BigDecimal(b));
	}

	public static Object divideAndRemainder(BigDecimal a, Float b) {
		return a.divideAndRemainder(new BigDecimal(b.toString()));
	}

	public static Object divideAndRemainder(BigDecimal a, Double b) {
		return a.divideAndRemainder(new BigDecimal(b.toString()));
	}

	public static Object divideAndRemainder(BigDecimal a, Long b) {
		return a.divideAndRemainder(new BigDecimal(b));
	}

	public static Object divideAndRemainder(BigDecimal a, BigDecimal b) {
		return a.divideAndRemainder(b);
	}

	public static Object divideAndRemainder(BigDecimal a, BigInteger b) {
		return a.divideAndRemainder(new BigDecimal(b));
	}
	/* bigdecimal % 操作实现 */

	/* biginteger % 操作实现 */
	public static Object divideAndRemainder(BigInteger a, Byte b) {
		return a.divideAndRemainder(BigInteger.valueOf(b));
	}

	public static Object divideAndRemainder(BigInteger a, Short b) {
		return a.divideAndRemainder(BigInteger.valueOf(b));
	}

	public static Object divideAndRemainder(BigInteger a, Integer b) {
		return a.divideAndRemainder(BigInteger.valueOf(b));
	}

	public static Object divideAndRemainder(BigInteger a, Float b) {
		return new BigDecimal(a).divideAndRemainder(new BigDecimal(b.toString()));
	}

	public static Object divideAndRemainder(BigInteger a, Double b) {
		return new BigDecimal(a).divideAndRemainder(new BigDecimal(b.toString()));
	}

	public static Object divideAndRemainder(BigInteger a, Long b) {
		return a.divideAndRemainder(BigInteger.valueOf(b));
	}

	public static Object divideAndRemainder(BigInteger a, BigDecimal b) {
		return new BigDecimal(a).divideAndRemainder(b);
	}

	public static Object divideAndRemainder(BigInteger a, BigInteger b) {
		return a.divideAndRemainder(b);
	}
	/* biginteger % 操作实现 */

	/* neg - 操作实现 */
	public static Object neg(Byte a, Object v){
		return (byte)-a;
	}

	public static Object neg(Short a, Object v){
		return (short)-a;
	}

	public static Object neg(Float a, Object v){
		return -a;
	}

	public static Object neg(Double a, Object v){
		return -a;
	}

	public static Object neg(Integer a, Object v){
		return -a;
	}

	public static Object neg(Long a, Object v){
		return -a;
	}
	public static Object neg(BigInteger a, Object v){
		return a.negate();
	}
	public static Object neg(BigDecimal a, Object v){
		return a.negate();
	}

	private static Object reject(Object a, Object b, String symbol) throws IllegalArgumentException {
		throw new IllegalArgumentException(String.format("`%s` 运算不支持 (%s,%s) 类型", symbol, a == null ? "null" : a.getClass().getName(), b == null ? "null" : b.getClass().getName()));
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy