diff options
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/data/LazyHolder.java')
| -rw-r--r-- | BJC-Utils2/src/main/java/bjc/utils/data/LazyHolder.java | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/data/LazyHolder.java b/BJC-Utils2/src/main/java/bjc/utils/data/LazyHolder.java deleted file mode 100644 index db5b6ef..0000000 --- a/BJC-Utils2/src/main/java/bjc/utils/data/LazyHolder.java +++ /dev/null @@ -1,90 +0,0 @@ -package bjc.utils.data; - -import java.util.function.Function; -import java.util.function.Supplier; - -import bjc.utils.funcdata.FunctionalList; - -/** - * Holds a single value of a specific type. This is used for indirect - * references to data, and more specifically for accessing non-final - * variables from a lambda. AKA the identity monad - * - * This is a lazy variant of {@link IHolder} - * - * @author ben - * - * @param <T> - * The type of the data being held - */ -public class LazyHolder<T> implements IHolder<T> { - /** - * The source for a value held by this lazy holder - */ - private Supplier<T> heldSrc; - - /** - * The value internally held by this lazy holder - */ - private T held; - - /** - * List of queued actions to be performed on realized values - */ - private FunctionalList<Function<T, T>> actions; - - /** - * Create a new lazy holder with the given supplier - * - * @param src - * The supplier for a value when it is neededs - */ - public LazyHolder(Supplier<T> src) { - heldSrc = src; - - held = null; - } - - /** - * Create a new lazy holder with the given value - * - * @param val - * The value held in the holder - */ - public LazyHolder(T val) { - held = val; - } - - @Override - public <NewT> IHolder<NewT> map(Function<T, NewT> f) { - return new LazyHolder<NewT>(() -> { - if (held == null) { - return actions.reduceAux(heldSrc.get(), - Function<T, T>::apply, f::apply); - } else { - return actions.reduceAux(held, Function<T, T>::apply, - f::apply); - } - }); - } - - @Override - public IHolder<T> transform(Function<T, T> f) { - actions.add(f); - - return this; - } - - @Override - public <E> E unwrap(Function<T, E> f) { - // Actualize ourselves - if (held == null) { - held = heldSrc.get(); - } - - actions.forEach((act) -> held = act.apply(held)); - - return f.apply(held); - } - -} |
