Class OverloadedNaryFunction
java.lang.Object
com.singularsys.jep.functions.PostfixMathCommand
com.singularsys.jep.functions.NaryFunction
com.singularsys.jep.misc.overloadedfunctions.OverloadedNaryFunction
- All Implemented Interfaces:
JepComponent,PostfixMathCommandI,Serializable
Allows function to be overloaded with two candidate functions
and a predicate that tests the values of the arguments
to see which function should be applied.
For example if we have a custom value type
class MyVal {
double val;
public MyVal(double val) {
super();
this.val = val;
}
MyVal add(MyVal arg) {
return new MyVal(val+arg.val);
}
}
The nary addition operator could be overload
with a custom function that uses the MyVal.add(MyVal) method.
var fun1 = new OverloadedUnaryFunction(
var fun1 = new OverloadedNaryFunction(
NaryBinaryFunction.instanceOf(MyVal.class, (x,y) -> x.add(y) ),
new Add(),
args -> args[0] instanceof MyVal);
jep.getOperatorTable().getAdd().setPFMC(fun1);
jep.reinitializeComponents();
In the constructor for the OverloadedFunction
the first argument is our new function created by using a lambda expression
and the static method
NaryBinaryFunction#instanceOf(Class,BiFunctionWithException).
The second argument is the regular unary minus function and the
third argument is the predicate that returns true when the argument is a MyVal.
- Since:
- Jep 4.1
- See Also:
-
Field Summary
Fields inherited from class com.singularsys.jep.functions.PostfixMathCommand
curNumberOfParameters, description, name, NaN, numberOfParameters -
Constructor Summary
ConstructorsConstructorDescriptionOverloadedNaryFunction(PostfixMathCommandI function1, PostfixMathCommandI function2, Predicate<Object[]> argTest) -
Method Summary
Modifier and TypeMethodDescriptionEvaluate the functionReturn a description of the function from the properties file.Gets a light-weight instance suitable for using in multiple threads.intReturn the required number of parameters.voidInitialize the component.voidsetCurNumberOfParameters(int n) Sets the number of current number of parameters used in the next call of run().Methods inherited from class com.singularsys.jep.functions.NaryFunction
runMethods inherited from class com.singularsys.jep.functions.PostfixMathCommand
asArray, asBool, asDouble, asInt, asLong, asStrictInt, asString, asType, checkNumberOfParameters, getDescription, getDescriptionWithType, getName, setDescription, setName, toString, toString
-
Constructor Details
-
OverloadedNaryFunction
public OverloadedNaryFunction(PostfixMathCommandI function1, PostfixMathCommandI function2, Predicate<Object[]> argTest)
-
-
Method Details
-
setCurNumberOfParameters
public void setCurNumberOfParameters(int n) Description copied from class:PostfixMathCommandSets the number of current number of parameters used in the next call of run(). This method is only called when the reqNumberOfParameters is -1.- Specified by:
setCurNumberOfParametersin interfacePostfixMathCommandI- Overrides:
setCurNumberOfParametersin classPostfixMathCommand- Parameters:
n- number of parameter for next call of function
-
getNumberOfParameters
public int getNumberOfParameters()Description copied from class:PostfixMathCommandReturn the required number of parameters.- Specified by:
getNumberOfParametersin interfacePostfixMathCommandI- Overrides:
getNumberOfParametersin classPostfixMathCommand- Returns:
- allowable number of parameters, -1 if a variable number is allowed
-
eval
Description copied from class:NaryFunctionEvaluate the function- Specified by:
evalin classNaryFunction- Parameters:
args- arguments to the function- Returns:
- value returned by the function
- Throws:
EvaluationException- if the calculation cannot be performed
-
init
Description copied from interface:JepComponentInitialize the component. This method is called whenever a component is added to Jep. Hence, it allows components to keep track of the other components they may rely on.- Specified by:
initin interfaceJepComponent- Parameters:
jep- the current Jep instance
-
getLightWeightInstance
Description copied from interface:JepComponentGets a light-weight instance suitable for using in multiple threads.- Specified by:
getLightWeightInstancein interfaceJepComponent- Returns:
- either a new instance, null or 'this'.
-
getFunction1
-
getFunction2
-
getPredicate
-
getDescription
Description copied from class:PostfixMathCommandReturn a description of the function from the properties file. The property name is the class name followed by ".description". The property is found using theJepMessagesclass, which can be configured to add additional properties files. IfPostfixMathCommand.setDescription(String)has been called, return the description set by that method instead.- Specified by:
getDescriptionin interfacePostfixMathCommandI- Overrides:
getDescriptionin classPostfixMathCommand- Returns:
- the description of the function
-