FloatFunction.java

package swingtree.api;

import com.google.errorprone.annotations.Immutable;

/**
 *  Used by {@link NoiseFunction#andThen(FloatFunction)}
 *  to apply a scalar function to the result of a noise function
 *  or to the input of a noise function using {@link NoiseFunction#compose(FloatFunction)}.
 */
@Immutable
@FunctionalInterface
public interface FloatFunction
{
    /**
     *  Applies this function to the given float value
     *  and returns the result.
     *
     * @param in The input float value.
     * @return The output float value.
     */
    float from( float in );

    /**
     *  Allows you to compose this function with another function
     *  so that the other function is applied after this function.
     *
     * @param after The function to apply after this function.
     * @return A new function that applies this function and then the given function.
     */
    default FloatFunction andThen( FloatFunction after ) {
        return (x) -> after.from(from(x));
    }

    /**
     *  Allows you to compose this function with another function
     *  so that the other function is applied before this function.
     *
     * @param before The function to apply before this function.
     * @return A new function that applies the given function and then this function.
     */
    default FloatFunction compose( FloatFunction before ) {
        return (x) -> from(before.from(x));
    }
}