1
0
mirror of https://github.com/DanilaFe/abacus synced 2024-11-16 07:33:09 -08:00
Abacus/src/org/nwapw/abacus/function/Function.java

48 lines
1.5 KiB
Java
Raw Normal View History

2017-07-25 21:57:14 -07:00
package org.nwapw.abacus.function;
import org.nwapw.abacus.number.NaiveNumber;
import org.nwapw.abacus.number.NumberInterface;
2017-07-24 14:26:09 -07:00
import java.util.HashMap;
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
/**
* A map to correctly promote different number implementations to each other.
*/
private static final HashMap<Class<? extends NumberInterface>, Integer> priorityMap =
new HashMap<Class<? extends NumberInterface>, Integer>() {{
2017-07-24 14:26:09 -07:00
put(NaiveNumber.class, 0);
}};
2017-07-25 22:47:48 -07:00
/**
* Checks whether the given params will work for the given function.
* @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
* @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.
* @param params the raw input parameters.
* @return the return value of the function, or null if an error occurred.
*/
public NumberInterface apply(NumberInterface...params) {
if(!matchesParams(params)) return null;
return applyInternal(params);
}
}