/** * Copyright (c) 2011 committers of YAKINDU and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * committers of YAKINDU - initial API and implementation */ package org.yakindu.sct.simulation.core.sexec.interpreter; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.util.EcoreUtil; import com.google.common.base.Objects; public class CoreFunction extends Function { public static final String EQUALS = "=="; public static final String NOT_EQUALS = "!="; public static final String SMALLER = "<"; public static final String SMALLER_EQUAL = "<="; public static final String GREATER = ">"; public static final String GREATER_EQUAL = ">="; public static final String BIT_AND = "&"; public static final String BIT_OR = "|"; public static final String BIT_XOR = "^"; public static final String BIT_LSHIFT = "<<"; public static final String BIT_RSHIFT = ">>"; public static final String BIT_COMPLEMENT = "~"; public static final String PLUS = "+"; public static final String MINUS = "-"; public static final String MULTIPLY = "*"; public static final String DIVIDE = "/"; public static final String MODULO = "%"; public static final String POSITIVE = PLUS; public static final String NEGATIVE = MINUS; public static final String NOT = "!"; @FunctionMethod(PLUS) public Integer plus(Integer i1, Integer i2) { return i1 + i2; } @FunctionMethod(PLUS) public Float plus(Float f1, Float f2) { return f1 + f2; } @FunctionMethod(PLUS) public Double plus(Double d1, Double d2) { return d1 + d2; } @FunctionMethod(PLUS) public Long plus(Long l1, Long l2) { return l1 + l2; } @FunctionMethod(PLUS) public Float plus(Integer f1, Float f2) { return f1 + f2; } @FunctionMethod(PLUS) public Double plus(Integer i1, Double d1) { return i1 + d1; } @FunctionMethod(PLUS) public Long plus(Integer i1, Long l1) { return i1 + l1; } @FunctionMethod(PLUS) public Float plus(Float f1, Integer i1) { return f1 + i1; } @FunctionMethod(PLUS) public Double plus(Float f1, Double d2) { return f1 + d2; } @FunctionMethod(PLUS) public Float plus(Float f1, Long l2) { return f1 + l2; } @FunctionMethod(PLUS) public Double plus(Double d1, Integer i1) { return d1 + i1; } @FunctionMethod(PLUS) public Double plus(Double d1, Float i1) { return d1 + i1; } @FunctionMethod(PLUS) public Double plus(Double d1, Long i1) { return d1 + i1; } @FunctionMethod(PLUS) public Float plus(Long l1, Float f1) { return l1 + f1; } @FunctionMethod(PLUS) public Long plus(Long l1, Integer i2) { return l1 + i2; } @FunctionMethod(PLUS) public Double plus(Long l1, Double d2) { return l1 + d2; } @FunctionMethod(PLUS) public Integer positive(Integer i) { return i; } @FunctionMethod(PLUS) public Float positive(Float f) { return f; } @FunctionMethod(PLUS) public Long positive(Long l) { return l; } @FunctionMethod(PLUS) public Double positive(Double d) { return d; } @FunctionMethod(PLUS) public Boolean positive(Boolean b) { return b; } @FunctionMethod(PLUS) public String positive(String s) { return s; } @FunctionMethod(MINUS) public Integer negative(Integer i) { return -i; } @FunctionMethod(MINUS) public Float negative(Float f) { return -f; } @FunctionMethod(MINUS) public Double negative(Double d) { return -d; } @FunctionMethod(MINUS) public Long negative(Long d) { return -d; } @FunctionMethod(MINUS) public Integer minus(Integer i1, Integer i2) { return i1 - i2; } @FunctionMethod(MINUS) public Float minus(Float f1, Float f2) { return f1 - f2; } @FunctionMethod(MINUS) public Double minus(Double d1, Double d2) { return d1 - d2; } @FunctionMethod(MINUS) public Long minus(Long l1, Long l2) { return l1 - l2; } @FunctionMethod(MINUS) public Float minus(Integer f1, Float f2) { return f1 - f2; } @FunctionMethod(MINUS) public Double minus(Integer i1, Double d1) { return i1 - d1; } @FunctionMethod(MINUS) public Long minus(Integer i1, Long l1) { return i1 - l1; } @FunctionMethod(MINUS) public Float minus(Float f1, Integer i1) { return f1 - i1; } @FunctionMethod(MINUS) public Double minus(Float f1, Double d2) { return f1 - d2; } @FunctionMethod(MINUS) public Float minus(Float f1, Long l2) { return f1 - l2; } @FunctionMethod(MINUS) public Double minus(Double d1, Integer i1) { return d1 - i1; } @FunctionMethod(MINUS) public Double minus(Double d1, Float i1) { return d1 - i1; } @FunctionMethod(MINUS) public Double minus(Double d1, Long i1) { return d1 - i1; } @FunctionMethod(MINUS) public Long minus(Long l1, Integer i1) { return l1 - i1; } @FunctionMethod(MINUS) public Float minus(Long l1, Float f1) { return l1 - f1; } @FunctionMethod(MINUS) public Double minus(Long l1, Double d1) { return l1 - d1; } @FunctionMethod(MULTIPLY) public Integer mul(Integer i1, Integer i2) { return i1 * i2; } @FunctionMethod(MULTIPLY) public Float mul(Float f1, Float f2) { return f1 * f2; } @FunctionMethod(MULTIPLY) public Double mul(Double d1, Double d2) { return d1 * d2; } @FunctionMethod(MULTIPLY) public Long mul(Long l1, Long l2) { return l1 * l2; } @FunctionMethod(MULTIPLY) public Float mul(Integer f1, Float f2) { return f1 * f2; } @FunctionMethod(MULTIPLY) public Double mul(Integer i1, Double d1) { return i1 * d1; } @FunctionMethod(MULTIPLY) public Long mul(Integer i1, Long l1) { return i1 * l1; } @FunctionMethod(MULTIPLY) public Float mul(Float f1, Integer i1) { return f1 * i1; } @FunctionMethod(MULTIPLY) public Double mul(Float f1, Double d2) { return f1 * d2; } @FunctionMethod(MULTIPLY) public Float mul(Float f1, Long d2) { return f1 * d2; } @FunctionMethod(MULTIPLY) public Double mul(Double d1, Integer i1) { return d1 * i1; } @FunctionMethod(MULTIPLY) public Double mul(Double d1, Float i1) { return d1 * i1; } @FunctionMethod(MULTIPLY) public Double mul(Double d1, Long i1) { return d1 * i1; } @FunctionMethod(MULTIPLY) public Long mul(Long l1, Integer i1) { return l1 * i1; } @FunctionMethod(MULTIPLY) public Float mul(Long d1, Float f2) { return d1 * f2; } @FunctionMethod(MULTIPLY) public Double mul(Long l1, Double d2) { return l1 * d2; } @FunctionMethod(DIVIDE) public Integer div(Integer i1, Integer i2) { return i1 / i2; } @FunctionMethod(DIVIDE) public Float div(Float f1, Float f2) { return f1 / f2; } @FunctionMethod(DIVIDE) public Double div(Double d1, Double d2) { return d1 / d2; } @FunctionMethod(DIVIDE) public Long div(Long l1, Long l2) { return l1 / l2; } @FunctionMethod(DIVIDE) public Float div(Integer f1, Float f2) { return f1 / f2; } @FunctionMethod(DIVIDE) public Double div(Integer i1, Double d1) { return i1 / d1; } @FunctionMethod(DIVIDE) public Long div(Integer i1, Long l1) { return i1 / l1; } @FunctionMethod(DIVIDE) public Float div(Float f1, Integer i1) { return f1 / i1; } @FunctionMethod(DIVIDE) public Double div(Float f1, Double d2) { return f1 / d2; } @FunctionMethod(DIVIDE) public Float div(Float f1, Long d2) { return f1 / d2; } @FunctionMethod(DIVIDE) public Double div(Double d1, Integer i1) { return d1 / i1; } @FunctionMethod(DIVIDE) public Double div(Double d1, Float i1) { return d1 / i1; } @FunctionMethod(DIVIDE) public Double div(Double d1, Long i1) { return d1 / i1; } @FunctionMethod(DIVIDE) public Long div(Long l1, Integer i1) { return l1 / i1; } @FunctionMethod(DIVIDE) public Float div(Long d1, Float f1) { return d1 / f1; } @FunctionMethod(DIVIDE) public Double div(Long l1, Double d1) { return l1 / d1; } @FunctionMethod(MODULO) public Integer mod(Integer i1, Integer i2) { return i1 % i2; } @FunctionMethod(MODULO) public Float mod(Float f1, Float f2) { return f1 % f2; } @FunctionMethod(MODULO) public Double mod(Double d1, Double d2) { return d1 % d2; } @FunctionMethod(MODULO) public Long mod(Long l1, Long l2) { return l1 % l2; } @FunctionMethod(MODULO) public Float mod(Integer f1, Float f2) { return f1 % f2; } @FunctionMethod(MODULO) public Double mod(Integer i1, Double d1) { return i1 % d1; } @FunctionMethod(MODULO) public Long mod(Integer i1, Long l1) { return i1 % l1; } @FunctionMethod(MODULO) public Float mod(Float f1, Integer i1) { return f1 % i1; } @FunctionMethod(MODULO) public Double mod(Float f1, Double d2) { return f1 % d2; } @FunctionMethod(MODULO) public Float mod(Float f1, Long d2) { return f1 % d2; } @FunctionMethod(MODULO) public Double mod(Double d1, Integer i1) { return d1 % i1; } @FunctionMethod(MODULO) public Double mod(Double d1, Float i1) { return d1 % i1; } @FunctionMethod(MODULO) public Double mod(Double d1, Long i1) { return d1 % i1; } @FunctionMethod(MODULO) public Float mod(Long d1, Float f1) { return d1 % f1; } @FunctionMethod(MODULO) public Double mod(Long l1, Double d1) { return l1 % d1; } @FunctionMethod(MODULO) public Long mod(Long l1, Integer i1) { return l1 % i1; } @FunctionMethod(BIT_LSHIFT) public Integer left(Integer i1, Integer i2) { return i1 << i2; } @FunctionMethod(BIT_LSHIFT) public Long left(Long l1, Long l2) { return l1 << l2; } @FunctionMethod(BIT_LSHIFT) public Long left(Long l1, Integer l2) { return l1 << l2; } @FunctionMethod(BIT_LSHIFT) public Integer left(Integer l1, Long l2) { return l1 << l2; } @FunctionMethod(BIT_RSHIFT) public Integer right(Integer i1, Integer i2) { return i1 >> i2; } @FunctionMethod(BIT_RSHIFT) public Long right(Long l1, Long l2) { return l1 >> l2; } @FunctionMethod(BIT_RSHIFT) public Long right(Long l1, Integer l2) { return l1 >> l2; } @FunctionMethod(BIT_RSHIFT) public Integer right(Integer l1, Long l2) { return l1 >> l2; } @FunctionMethod(BIT_AND) public Integer bitwiseAnd(Integer i1, Integer i2) { return i1 & i2; } @FunctionMethod(BIT_AND) public Long bitwiseAnd(Long l1, Long l2) { return l1 & l2; } @FunctionMethod(BIT_AND) public Long bitwiseAnd(Long l1, Integer l2) { return l1 & l2; } @FunctionMethod(BIT_AND) public Long bitwiseAnd(Integer l1, Long l2) { return l1 & l2; } @FunctionMethod(BIT_OR) public Integer bitwiseOr(Integer i1, Integer i2) { return i1 | i2; } @FunctionMethod(BIT_OR) public Long bitwiseOr(Long l1, Long l2) { return l1 | l2; } @FunctionMethod(BIT_OR) public Long bitwiseOr(Long l1, Integer l2) { return l1 | l2; } @FunctionMethod(BIT_OR) public Long bitwiseOr(Integer l1, Long l2) { return l1 | l2; } @FunctionMethod(BIT_XOR) public Integer bitwiseXor(Integer i1, Integer i2) { return i1 ^ i2; } @FunctionMethod(BIT_XOR) public Long bitwiseXor(Long l1, Long l2) { return l1 ^ l2; } @FunctionMethod(BIT_XOR) public Long bitwiseXor(Long l1, Integer l2) { return l1 ^ l2; } @FunctionMethod(BIT_XOR) public Long bitwiseXor(Integer l1, Long l2) { return l1 ^ l2; } @FunctionMethod(EQUALS) public Boolean equals(Boolean b1, Boolean b2) { return b1.equals(b2); } @FunctionMethod(EQUALS) public Boolean equals(EObject e1, EObject e2) { return EcoreUtil.equals(e1, e2); } @FunctionMethod(EQUALS) public Boolean equals(Object e1, Object e2) { return Objects.equal(e1, e2); } @FunctionMethod(EQUALS) public Boolean equals(String string1, String string2) { return string1.equals(string2); } @FunctionMethod(EQUALS) public Boolean equals(Integer i1, Integer i2) { return i1.intValue() == i2.intValue(); } @FunctionMethod(EQUALS) public Boolean equals(Float f1, Float f2) { return f1.floatValue() == f2.floatValue(); } @FunctionMethod(EQUALS) public Boolean equals(Double d1, Double d2) { return d1.doubleValue() == d2.doubleValue(); } @FunctionMethod(EQUALS) public Boolean equals(Long l1, Long l2) { return l1.longValue() == l2.longValue(); } @FunctionMethod(EQUALS) public Boolean equals(Integer f1, Float f2) { return f1.intValue() == f2.floatValue(); } @FunctionMethod(EQUALS) public Boolean equals(Integer i1, Double d1) { return i1.intValue() == d1.doubleValue(); } @FunctionMethod(EQUALS) public Boolean equals(Integer i1, Long l1) { return i1.intValue() == l1.longValue(); } @FunctionMethod(EQUALS) public Boolean equals(Float f1, Integer i1) { return f1.floatValue() == i1.intValue(); } @FunctionMethod(EQUALS) public Boolean equals(Float f1, Double d2) { return f1.floatValue() == d2.doubleValue(); } @FunctionMethod(EQUALS) public Boolean equals(Float f1, Long l2) { return f1.floatValue() == l2.longValue(); } @FunctionMethod(EQUALS) public Boolean equals(Double d1, Integer i1) { return d1.doubleValue() == i1.intValue(); } @FunctionMethod(EQUALS) public Boolean equals(Double d1, Float i1) { return d1.doubleValue() == i1.floatValue(); } @FunctionMethod(EQUALS) public Boolean equals(Double d1, Long i1) { return d1.doubleValue() == i1.longValue(); } @FunctionMethod(EQUALS) public Boolean equals(Long l1, Integer i1) { return l1.longValue() == i1.intValue(); } @FunctionMethod(EQUALS) public Boolean equals(Long l1, Float f1) { return l1.longValue() == f1.floatValue(); } @FunctionMethod(EQUALS) public Boolean equals(Long l1, Double d1) { return l1.longValue() == d1.doubleValue(); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(EObject e1, EObject e2) { return !EcoreUtil.equals(e1, e2); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(Object e1, Object e2) { return !Objects.equal(e1, e2); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(Boolean b1, Boolean b2) { return b1.booleanValue() != b2.booleanValue(); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(String i1, String i2) { return !i1.equals(i2); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(Integer i1, Integer i2) { return i1.intValue() != i2.intValue(); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(Float f1, Float f2) { return f1.floatValue() != f2.floatValue(); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(Double d1, Double d2) { return d1.doubleValue() != d2.doubleValue(); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(Long l1, Long l2) { return l1.longValue() != l2.longValue(); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(Integer f1, Float f2) { return f1.intValue() != f2.floatValue(); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(Integer i1, Double d1) { return i1.intValue() != d1.doubleValue(); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(Integer i1, Long l1) { return i1.intValue() != l1.longValue(); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(Float f1, Integer i1) { return f1.floatValue() != i1.intValue(); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(Float f1, Double d2) { return f1.floatValue() != d2.doubleValue(); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(Float f1, Long d2) { return f1.floatValue() != d2.doubleValue(); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(Double d1, Integer i1) { return d1.doubleValue() != i1.intValue(); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(Double d1, Float i1) { return d1.doubleValue() != i1.floatValue(); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(Double d1, Long i1) { return d1.doubleValue() != i1.longValue(); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(Long l1, Integer i1) { return l1.longValue() != i1.intValue(); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(Long l1, Float f1) { return l1.longValue() != f1.floatValue(); } @FunctionMethod(NOT_EQUALS) public Boolean notEquals(Long l1, Double d1) { return l1.longValue() != d1.doubleValue(); } @FunctionMethod(GREATER_EQUAL) public Boolean greaterEqual(Integer i1, Integer i2) { return i1 >= i2; } @FunctionMethod(GREATER_EQUAL) public Boolean greaterEqual(Float f1, Float f2) { return f1 >= f2; } @FunctionMethod(GREATER_EQUAL) public Boolean greaterEqual(Double d1, Double d2) { return d1 >= d2; } @FunctionMethod(GREATER_EQUAL) public Boolean greaterEqual(Long l1, Long l2) { return l1 >= l2; } @FunctionMethod(GREATER_EQUAL) public Boolean greaterEqual(Integer f1, Float f2) { return f1 >= f2; } @FunctionMethod(GREATER_EQUAL) public Boolean greaterEqual(Integer i1, Double d1) { return i1 >= d1; } @FunctionMethod(GREATER_EQUAL) public Boolean greaterEqual(Integer i1, Long l1) { return i1 >= l1; } @FunctionMethod(GREATER_EQUAL) public Boolean greaterEqual(Float f1, Integer i1) { return f1 >= i1; } @FunctionMethod(GREATER_EQUAL) public Boolean greaterEqual(Float f1, Double d2) { return f1 >= d2; } @FunctionMethod(GREATER_EQUAL) public Boolean greaterEqual(Float f1, Long d2) { return f1 >= d2; } @FunctionMethod(GREATER_EQUAL) public Boolean greaterEqual(Double d1, Integer i1) { return d1 >= i1; } @FunctionMethod(GREATER_EQUAL) public Boolean greaterEqual(Double d1, Float i1) { return d1 >= i1; } @FunctionMethod(GREATER_EQUAL) public Boolean greaterEqual(Double d1, Long i1) { return d1 >= i1; } @FunctionMethod(GREATER_EQUAL) public Boolean greaterEqual(Long l1, Integer i1) { return l1 >= i1; } @FunctionMethod(GREATER_EQUAL) public Boolean greaterEqual(Long l1, Float f1) { return l1 >= f1; } @FunctionMethod(GREATER_EQUAL) public Boolean greaterEqual(Long l1, Double d1) { return l1 >= d1; } @FunctionMethod(SMALLER_EQUAL) public Boolean smallerEqual(Integer i1, Integer i2) { return i1 <= i2; } @FunctionMethod(SMALLER_EQUAL) public Boolean smallerEqual(Float f1, Float f2) { return f1 <= f2; } @FunctionMethod(SMALLER_EQUAL) public Boolean smallerEqual(Double d1, Double d2) { return d1 <= d2; } @FunctionMethod(SMALLER_EQUAL) public Boolean smallerEqual(Long l1, Long l2) { return l1 <= l2; } @FunctionMethod(SMALLER_EQUAL) public Boolean smallerEqual(Integer f1, Float f2) { return f1 <= f2; } @FunctionMethod(SMALLER_EQUAL) public Boolean smallerEqual(Integer i1, Double d1) { return i1 <= d1; } @FunctionMethod(SMALLER_EQUAL) public Boolean smallerEqual(Integer i1, Long l1) { return i1 <= l1; } @FunctionMethod(SMALLER_EQUAL) public Boolean smallerEqual(Float f1, Integer i1) { return f1 <= i1; } @FunctionMethod(SMALLER_EQUAL) public Boolean smallerEqual(Float f1, Double d2) { return f1 <= d2; } @FunctionMethod(SMALLER_EQUAL) public Boolean smallerEqual(Float f1, Long d2) { return f1 <= d2; } @FunctionMethod(SMALLER_EQUAL) public Boolean smallerEqual(Double d1, Integer i1) { return d1 <= i1; } @FunctionMethod(SMALLER_EQUAL) public Boolean smallerEqual(Double d1, Float i1) { return d1 <= i1; } @FunctionMethod(SMALLER_EQUAL) public Boolean smallerEqual(Double d1, Long i1) { return d1 <= i1; } @FunctionMethod(SMALLER_EQUAL) public Boolean smallerEqual(Long l1, Integer i1) { return l1 <= i1; } @FunctionMethod(SMALLER_EQUAL) public Boolean smallerEqual(Long l1, Float f1) { return l1 <= f1; } @FunctionMethod(SMALLER_EQUAL) public Boolean smallerEqual(Long l1, Double d1) { return l1 <= d1; } @FunctionMethod(GREATER) public Boolean greater(Integer i1, Integer i2) { return i1 > i2; } @FunctionMethod(GREATER) public Boolean greater(Float f1, Float f2) { return f1 > f2; } @FunctionMethod(GREATER) public Boolean greater(Double d1, Double d2) { return d1 > d2; } @FunctionMethod(GREATER) public Boolean greater(Long l1, Long l2) { return l1 > l2; } @FunctionMethod(GREATER) public Boolean greater(Integer f1, Float f2) { return f1 > f2; } @FunctionMethod(GREATER) public Boolean greater(Integer i1, Double d1) { return i1 > d1; } @FunctionMethod(GREATER) public Boolean greater(Integer i1, Long l1) { return i1 > l1; } @FunctionMethod(GREATER) public Boolean greater(Float f1, Integer i1) { return f1 > i1; } @FunctionMethod(GREATER) public Boolean greater(Float f1, Double d2) { return f1 > d2; } @FunctionMethod(GREATER) public Boolean greater(Float f1, Long d2) { return f1 > d2; } @FunctionMethod(GREATER) public Boolean greater(Double d1, Integer i1) { return d1 > i1; } @FunctionMethod(GREATER) public Boolean greater(Double d1, Float i1) { return d1 > i1; } @FunctionMethod(GREATER) public Boolean greater(Double d1, Long i1) { return d1 > i1; } @FunctionMethod(GREATER) public Boolean greater(Long l1, Integer i1) { return l1 > i1; } @FunctionMethod(GREATER) public Boolean greater(Long l1, Float i1) { return l1 > i1; } @FunctionMethod(GREATER) public Boolean greater(Long l1, Double i1) { return l1 > i1; } @FunctionMethod(SMALLER) public Boolean smaller(Integer i1, Integer i2) { return i1 < i2; } @FunctionMethod(SMALLER) public Boolean smaller(Float f1, Float f2) { return f1 < f2; } @FunctionMethod(SMALLER) public Boolean smaller(Double d1, Double d2) { return d1 < d2; } @FunctionMethod(SMALLER) public Boolean smaller(Long l1, Long l2) { return l1 < l2; } @FunctionMethod(SMALLER) public Boolean smaller(Integer f1, Float f2) { return f1 < f2; } @FunctionMethod(SMALLER) public Boolean smaller(Integer i1, Double d1) { return i1 < d1; } @FunctionMethod(SMALLER) public Boolean smaller(Integer i1, Long l1) { return i1 < l1; } @FunctionMethod(SMALLER) public Boolean smaller(Float f1, Integer i1) { return f1 < i1; } @FunctionMethod(SMALLER) public Boolean smaller(Float f1, Double d2) { return f1 < d2; } @FunctionMethod(SMALLER) public Boolean smaller(Float f1, Long d2) { return f1 < d2; } @FunctionMethod(SMALLER) public Boolean smaller(Double d1, Integer i1) { return d1 < i1; } @FunctionMethod(SMALLER) public Boolean smaller(Double d1, Float i1) { return d1 < i1; } @FunctionMethod(SMALLER) public Boolean smaller(Double d1, Long i1) { return d1 < i1; } @FunctionMethod(SMALLER) public Boolean smaller(Long l1, Integer i1) { return l1 < i1; } @FunctionMethod(SMALLER) public Boolean smaller(Long l1, Float i1) { return l1 < i1; } @FunctionMethod(SMALLER) public Boolean smaller(Long l1, Double i1) { return l1 < i1; } @FunctionMethod(NOT) public Boolean not(Boolean b) { return !b; } @FunctionMethod(BIT_COMPLEMENT) public Integer complement(Integer i) { return ~i; } @FunctionMethod(BIT_COMPLEMENT) public Long complement(Long l) { return ~l; } }