1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | package Torello.Java.Function; import java.util.function.Function; /** * Function-Pointer * <SPAN CLASS=TJF>Input:</SPAN> {@code int, int, float} * <SPAN CLASS=TJF>Output:</SPAN> {@code R}. * * <BR /><BR /> * Primitive's Extension to Java's {@code java.util.function.*} package. * <BR /><BR />This {@code FunctionalInterface} has an {@code apply(...)} method which accepts * three primitives: two {@code int}-primitives, and one {@code float}. * * @param <R> The type of the function-output. */ @FunctionalInterface public interface IntIntFloatFunc<R> { /** * Applies a user-provided function to input aruments, returning a result of type {@code R} * <BR /><BR /><EMBED CLASS='external-html' DATA-FILE-ID=FUNC_INTER_METH> * * @param i1 The first integer-parameter. * @param i2 The second integer-parameter. * @param f A {@code 'float'} parameter. * @return The function result. Result shall be of type {@code 'R'} */ public R apply(int i1, int i2, float f); /** * Returns a composed function that first applies {@code 'this'} function to its input, and * then applies the {@code 'after'} function to the result. If evaluation of either function * throws an exception, it is relayed to the caller of the composed function. * * @param <V> The output-type of the {@code 'after'} function, and also of the (returned) * {@code 'composed'} function. * * @param after The function to apply, after this function is applied. * @throws NullPointerException This throws if null is passed to {@code 'after'}. */ public default <V> IntIntFloatFunc<V> andThen(Function<R, V> after) { if (after == null) throw new NullPointerException ("null has been passed to parameter 'after'"); return (int i1, int i2, float f) -> after.apply(this.apply(i1, i2, f)); } } |