From d8b3b3c5e4441cecec98c06a36fc81570008c888 Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Tue, 26 Jan 2016 11:32:41 -0500 Subject: Updates to various things, and addition of a graph class. --- .../src/main/java/bjc/utils/graph/GenHolder.java | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 BJC-Utils2/src/main/java/bjc/utils/graph/GenHolder.java (limited to 'BJC-Utils2/src/main/java/bjc/utils/graph/GenHolder.java') diff --git a/BJC-Utils2/src/main/java/bjc/utils/graph/GenHolder.java b/BJC-Utils2/src/main/java/bjc/utils/graph/GenHolder.java new file mode 100644 index 0000000..df363fa --- /dev/null +++ b/BJC-Utils2/src/main/java/bjc/utils/graph/GenHolder.java @@ -0,0 +1,75 @@ +package bjc.utils.graph; + +import java.util.function.Function; + +/** + * 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 + * + * @author ben + * + * @param + * The type of the data being held + */ +public class GenHolder { + /** + * The state this holder is responsible for. + */ + public T held; + + /** + * Creates a new empty holder, with its state set to null + */ + public GenHolder() { + held = null; + } + + /** + * Creates a new holder, with its state initialized to the provided + * value + * + * @param held + * The state to initialize this holder to. + */ + public GenHolder(T hld) { + held = hld; + } + + /** + * Apply the given transformation to the held value. Returns the holder + * for allowing chaining of transforms + * + * @param f + * The transform to apply to the value + * @return The holder + */ + public GenHolder transform(Function f) { + held = f.apply(held); + + return this; + } + + /** + * Return the result of applying the given transformation to the held + * value Doesn't change the held value + * + * @param f + * The transformation to apply + * @return A holder with the transformed value + */ + public GenHolder map(Function f) { + return new GenHolder(f.apply(held)); + } + + /** + * Returns a raw mapped value, not contained in a GenHolder + * + * @param f + * The function to use for mapping the value + * @return The mapped value outside of a GenHolder + */ + public E unwrap(Function f) { + return f.apply(held); + } +} -- cgit v1.2.3