1
0
mirror of https://github.com/DanilaFe/abacus synced 2024-07-04 08:01:30 -07:00
Abacus/src/main/java/org/nwapw/abacus/function/Function.java

40 lines
1.2 KiB
Java
Raw Normal View History

2017-07-25 21:57:14 -07:00
package org.nwapw.abacus.function;
import org.nwapw.abacus.number.NumberInterface;
2017-07-24 14:26:09 -07:00
2017-07-25 22:47:48 -07:00
/**
* A function that operates on one or more
* inputs and returns a single number.
*/
public abstract class Function {
2017-07-25 22:47:48 -07:00
/**
* Checks whether the given params will work for the given function.
2017-07-30 21:11:32 -07:00
*
2017-07-25 22:47:48 -07:00
* @param params the given params
* @return true if the params can be used with this function.
*/
protected abstract boolean matchesParams(NumberInterface[] params);
2017-07-25 22:47:48 -07:00
/**
* Internal apply implementation, which already receives appropriately promoted
* parameters that have bee run through matchesParams
2017-07-30 21:11:32 -07:00
*
2017-07-25 22:47:48 -07:00
* @param params the promoted parameters.
* @return the return value of the function.
*/
protected abstract NumberInterface applyInternal(NumberInterface[] params);
2017-07-25 22:47:48 -07:00
/**
* Function to check, promote arguments and run the function.
2017-07-30 21:11:32 -07:00
*
2017-07-25 22:47:48 -07:00
* @param params the raw input parameters.
* @return the return value of the function, or null if an error occurred.
*/
2017-07-30 21:11:32 -07:00
public NumberInterface apply(NumberInterface... params) {
if (!matchesParams(params)) return null;
return applyInternal(params);
}
}