summaryrefslogtreecommitdiff
path: root/BJC-Utils2/src/main/java/bjc/utils/data/experimental
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2016-04-17 15:01:44 -0400
committerbculkin2442 <bjculkin@mix.wvu.edu>2016-04-17 15:01:44 -0400
commit77fcc58d1facffbc3af50be8c05985350e9f1355 (patch)
treeb7b81d24c107e644924dc526f8bb034efc62d2dc /BJC-Utils2/src/main/java/bjc/utils/data/experimental
parenta5850915df72f5968fd1b281eb9e455d50c580ee (diff)
Code maintenace and changes
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/data/experimental')
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/data/experimental/IHolder.java101
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/data/experimental/IPair.java97
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/data/experimental/Identity.java115
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/data/experimental/Lazy.java228
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/data/experimental/LazyPair.java317
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/data/experimental/Pair.java63
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/data/experimental/package-info.java7
7 files changed, 0 insertions, 928 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/data/experimental/IHolder.java b/BJC-Utils2/src/main/java/bjc/utils/data/experimental/IHolder.java
deleted file mode 100644
index 6ccf115..0000000
--- a/BJC-Utils2/src/main/java/bjc/utils/data/experimental/IHolder.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package bjc.utils.data.experimental;
-
-import java.util.function.Consumer;
-import java.util.function.Function;
-import java.util.function.UnaryOperator;
-
-/**
- * A holder of a single value.
- *
- * @author ben
- *
- * @param <ContainedType>
- * The type of value held
- */
-public interface IHolder<ContainedType> {
- /**
- * Bind a function across the value in this container
- *
- * @param <BoundType>
- * The type of value in this container
- * @param binder
- * The function to bind to the value
- * @return A holder from binding the value
- */
- public <BoundType> IHolder<BoundType> bind(
- Function<ContainedType, IHolder<BoundType>> binder);
-
- /**
- * Apply an action to the value
- *
- * @param action
- * The action to apply to the value
- */
- public default void doWith(Consumer<ContainedType> action) {
- transform((value) -> {
- action.accept(value);
-
- return value;
- });
- }
-
- /**
- * Get the value contained in this holder without changing it.
- *
- * @return The value held in this holder
- */
- public default ContainedType getValue() {
- return unwrap((value) -> value);
- }
-
- /**
- * Create a new holder with a mapped version of the value in this
- * holder.
- *
- * Does not change the internal state of this holder
- *
- * @param <MappedType>
- * The type of the mapped value
- * @param mapper
- * The function to do mapping with
- * @return A holder with the mapped value
- */
- public <MappedType> IHolder<MappedType> map(
- Function<ContainedType, MappedType> mapper);
-
- /**
- * Transform the value held in this holder
- *
- * @param transformer
- * The function to transform the value with
- * @return The holder itself, for easy chaining
- */
- public IHolder<ContainedType> transform(
- UnaryOperator<ContainedType> transformer);
-
- /**
- * Unwrap the value contained in this holder so that it is no longer
- * held
- *
- * @param <UnwrappedType>
- * The type of the unwrapped value
- * @param unwrapper
- * The function to use to unwrap the value
- * @return The unwrapped held value
- */
- public <UnwrappedType> UnwrappedType unwrap(
- Function<ContainedType, UnwrappedType> unwrapper);
-
- /**
- * Replace the held value with a new one
- *
- * @param newValue
- * The value to hold instead
- * @return The holder itself
- */
- public default IHolder<ContainedType> replace(ContainedType newValue) {
- return transform((oldValue) -> {
- return newValue;
- });
- }
-}
diff --git a/BJC-Utils2/src/main/java/bjc/utils/data/experimental/IPair.java b/BJC-Utils2/src/main/java/bjc/utils/data/experimental/IPair.java
deleted file mode 100644
index f5ca240..0000000
--- a/BJC-Utils2/src/main/java/bjc/utils/data/experimental/IPair.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package bjc.utils.data.experimental;
-
-import java.util.function.BiConsumer;
-import java.util.function.BiFunction;
-import java.util.function.Function;
-
-/**
- * Represents a pair of values
- *
- * @author ben
- * @param <LeftType>
- * The type of the left side of the pair
- * @param <RightType>
- * The type of the right side of the pair
- *
- */
-public interface IPair<LeftType, RightType> {
- /**
- * Bind a function to the left value in this pair
- *
- * @param <BoundLeft>
- * The type of the bound value
- * @param leftBinder
- * The function to use to bind
- * @return A pair with the left type bound
- */
- public <BoundLeft> IPair<BoundLeft, RightType> bindLeft(
- Function<LeftType, IPair<BoundLeft, RightType>> leftBinder);
-
- /**
- * Bind a function to the right value in this pair
- *
- * @param <BoundRight>
- * The type of the bound value
- * @param rightBinder
- * The function to use to bind
- * @return A pair with the right type bound
- */
- public <BoundRight> IPair<LeftType, BoundRight> bindRight(
- Function<RightType, IPair<LeftType, BoundRight>> rightBinder);
-
- /**
- * Bind a function across the values in this pair
- *
- * @param <BoundLeft>
- * The type of the bound left
- * @param <BoundRight>
- * The type of the bound right
- * @param binder
- * The function to bind with
- * @return The bound pair
- */
- public <BoundLeft, BoundRight> IPair<BoundLeft, BoundRight> bind(
- BiFunction<LeftType, RightType, IPair<BoundLeft, BoundRight>> binder);
-
- /**
- * Merge the two values in this pair into a single value
- *
- * @param <MergedType>
- * The type of the single value
- * @param merger
- * The function to use for merging
- * @return The pair, merged into a single value
- */
- public <MergedType> MergedType merge(
- BiFunction<LeftType, RightType, MergedType> merger);
-
- /**
- * Get the value on the left side of the pair
- *
- * @return The value on the left side of the pair
- */
- public default LeftType getLeft() {
- return merge((leftValue, rightValue) -> leftValue);
- }
-
- /**
- * Get the value on the right side of the pair
- *
- * @return The value on the right side of the pair
- */
- public default RightType getRight() {
- return merge((leftValue, rightValue) -> rightValue);
- }
-
- /**
- * Immediately perfom the specified action with the contents of this pair
- * @param consumer The action to perform on the pair
- */
- public default void doWith(BiConsumer<LeftType, RightType> consumer) {
- merge((leftValue, rightValue) -> {
- consumer.accept(leftValue, rightValue);
-
- return null;
- });
- }
-}
diff --git a/BJC-Utils2/src/main/java/bjc/utils/data/experimental/Identity.java b/BJC-Utils2/src/main/java/bjc/utils/data/experimental/Identity.java
deleted file mode 100644
index 1780f2d..0000000
--- a/BJC-Utils2/src/main/java/bjc/utils/data/experimental/Identity.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package bjc.utils.data.experimental;
-
-import java.util.function.Function;
-import java.util.function.UnaryOperator;
-
-/**
- * @author ben
- *
- * @param <ContainedType>
- */
-/**
- * Simple implementation of IHolder that has no hidden behavior
- *
- * @author ben
- *
- * @param <ContainedType>
- * The type contained in the holder
- */
-public class Identity<ContainedType> implements IHolder<ContainedType> {
- private ContainedType heldValue;
-
- /**
- * Create a holder holding null
- */
- public Identity() {
- heldValue = null;
- }
-
- /**
- * Create a holder holding the specified value
- *
- * @param value
- * The value to hold
- */
- public Identity(ContainedType value) {
- heldValue = value;
- }
-
- @Override
- public <BoundType> IHolder<BoundType> bind(
- Function<ContainedType, IHolder<BoundType>> binder) {
- return binder.apply(heldValue);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see java.lang.Object#equals(java.lang.Object)
- */
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- } else if (obj == null) {
- return false;
- } else if (getClass() != obj.getClass()) {
- return false;
- }
-
- Identity<?> other = (Identity<?>) obj;
-
- if (heldValue == null) {
- if (other.heldValue != null) {
- return false;
- }
- } else if (!heldValue.equals(other.heldValue)) {
- return false;
- }
-
- return true;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see java.lang.Object#hashCode()
- */
- @Override
- public int hashCode() {
- final int prime = 31;
-
- int result = 1;
-
- int fieldHash = (heldValue == null) ? 0 : heldValue.hashCode();
-
- result = prime * result + fieldHash;
-
- return result;
- }
-
- @Override
- public <MappedType> IHolder<MappedType> map(
- Function<ContainedType, MappedType> mapper) {
- return new Identity<>(mapper.apply(heldValue));
- }
-
- @Override
- public String toString() {
- return "holding[v=" + heldValue + "]";
- }
-
- @Override
- public IHolder<ContainedType> transform(
- UnaryOperator<ContainedType> transformer) {
- heldValue = transformer.apply(heldValue);
-
- return this;
- }
-
- @Override
- public <UnwrappedType> UnwrappedType unwrap(
- Function<ContainedType, UnwrappedType> unwrapper) {
- return unwrapper.apply(heldValue);
- }
-} \ No newline at end of file
diff --git a/BJC-Utils2/src/main/java/bjc/utils/data/experimental/Lazy.java b/BJC-Utils2/src/main/java/bjc/utils/data/experimental/Lazy.java
deleted file mode 100644
index 0d6fcef..0000000
--- a/BJC-Utils2/src/main/java/bjc/utils/data/experimental/Lazy.java
+++ /dev/null
@@ -1,228 +0,0 @@
-package bjc.utils.data.experimental;
-
-import java.util.function.Function;
-import java.util.function.Supplier;
-import java.util.function.UnaryOperator;
-
-import bjc.utils.funcdata.FunctionalList;
-import bjc.utils.funcdata.IFunctionalList;
-
-/**
- * A holder that holds a means to create a value, but doesn't actually
- * compute the value until it's needed
- *
- * @author ben
- *
- * @param <ContainedType>
- */
-public class Lazy<ContainedType> implements IHolder<ContainedType> {
- private static class BoundLazy<OldType, BoundContainedType>
- implements IHolder<BoundContainedType> {
- private Supplier<IHolder<OldType>> oldSupplier;
-
- private Function<OldType, IHolder<BoundContainedType>> binder;
-
- private IHolder<BoundContainedType> boundHolder;
-
- private boolean holderBound;
-
- private IFunctionalList<UnaryOperator<BoundContainedType>> actions = new FunctionalList<>();
-
- public BoundLazy(Supplier<IHolder<OldType>> supp,
- Function<OldType, IHolder<BoundContainedType>> binder) {
- oldSupplier = supp;
- this.binder = binder;
- }
-
- @Override
- public <BoundType> IHolder<BoundType> bind(
- Function<BoundContainedType, IHolder<BoundType>> bindr) {
- IFunctionalList<UnaryOperator<BoundContainedType>> pendingActions = new FunctionalList<>();
-
- actions.forEach(pendingActions::add);
-
- Supplier<IHolder<BoundContainedType>> typeSupplier = () -> {
- IHolder<BoundContainedType> oldHolder = boundHolder;
-
- if (!holderBound) {
- oldHolder = oldSupplier.get().unwrap(binder);
- }
-
- return pendingActions.reduceAux(oldHolder,
- (action, state) -> {
- return state.transform(action);
- }, (value) -> value);
- };
-
- return new BoundLazy<>(typeSupplier, bindr);
- }
-
- @Override
- public <MappedType> IHolder<MappedType> map(
- Function<BoundContainedType, MappedType> mapper) {
- IFunctionalList<UnaryOperator<BoundContainedType>> pendingActions = new FunctionalList<>();
-
- actions.forEach(pendingActions::add);
-
- Supplier<MappedType> typeSupplier = () -> {
- IHolder<BoundContainedType> oldHolder = boundHolder;
-
- if (!holderBound) {
- oldHolder = oldSupplier.get().unwrap(binder);
- }
-
- return pendingActions.reduceAux(oldHolder.getValue(),
- (action, state) -> {
- return action.apply(state);
- }, (value) -> mapper.apply(value));
- };
-
- return new Lazy<>(typeSupplier);
- }
-
- @Override
- public IHolder<BoundContainedType> transform(
- UnaryOperator<BoundContainedType> transformer) {
- actions.add(transformer);
-
- return this;
- }
-
- @Override
- public <UnwrappedType> UnwrappedType unwrap(
- Function<BoundContainedType, UnwrappedType> unwrapper) {
- if (!holderBound) {
- boundHolder = oldSupplier.get().unwrap(binder::apply);
- }
-
- return boundHolder.unwrap(unwrapper);
- }
-
- @Override
- public String toString() {
- if (holderBound) {
- return boundHolder.toString();
- }
-
- return "(unmaterialized)";
- }
- }
-
- private Supplier<ContainedType> valueSupplier;
-
- private IFunctionalList<UnaryOperator<ContainedType>> actions = new FunctionalList<>();
-
- private boolean valueMaterialized;
-
- private ContainedType heldValue;
-
- /**
- * Create a new lazy value from the specified seed value
- *
- * @param value
- * The seed value to use
- */
- public Lazy(ContainedType value) {
- heldValue = value;
-
- valueMaterialized = true;
- }
-
- /**
- * Create a new lazy value from the specified value source
- *
- * @param supp
- * The source of a value to use
- */
- public Lazy(Supplier<ContainedType> supp) {
- valueSupplier = supp;
-
- valueMaterialized = false;
- }
-
- private Lazy(Supplier<ContainedType> supp,
- IFunctionalList<UnaryOperator<ContainedType>> pendingActions) {
- valueSupplier = supp;
-
- actions = pendingActions;
- }
-
- @Override
- public <BoundType> IHolder<BoundType> bind(
- Function<ContainedType, IHolder<BoundType>> binder) {
- IFunctionalList<UnaryOperator<ContainedType>> pendingActions = new FunctionalList<>();
-
- actions.forEach(pendingActions::add);
-
- Supplier<ContainedType> supplier = () -> {
- if (valueMaterialized) {
- return heldValue;
- }
-
- return valueSupplier.get();
- };
-
- return new BoundLazy<>(() -> {
- return new Lazy<>(supplier, pendingActions);
- }, binder);
- }
-
- @Override
- public <MappedType> IHolder<MappedType> map(
- Function<ContainedType, MappedType> mapper) {
- IFunctionalList<UnaryOperator<ContainedType>> pendingActions = new FunctionalList<>();
-
- actions.forEach(pendingActions::add);
-
- return new Lazy<>(() -> {
- ContainedType currVal = heldValue;
-
- if (!valueMaterialized) {
- currVal = valueSupplier.get();
- }
-
- return pendingActions.reduceAux(currVal,
- UnaryOperator<ContainedType>::apply,
- (value) -> mapper.apply(value));
- });
- }
-
- @Override
- public IHolder<ContainedType> transform(
- UnaryOperator<ContainedType> transformer) {
- actions.add(transformer);
-
- return this;
- }
-
- @Override
- public <UnwrappedType> UnwrappedType unwrap(
- Function<ContainedType, UnwrappedType> unwrapper) {
- if (!valueMaterialized) {
- heldValue = valueSupplier.get();
-
- valueMaterialized = true;
- }
-
- actions.forEach((action) -> {
- heldValue = action.apply(heldValue);
- });
-
- actions = new FunctionalList<>();
-
- return unwrapper.apply(heldValue);
- }
-
- @Override
- public String toString() {
- if (valueMaterialized) {
- if (actions.isEmpty()) {
- return "value[v='" + heldValue + "']";
- }
-
- return "value[v='" + heldValue + "'] (has pending transforms)";
- }
-
- return "(unmaterialized)";
- }
-}
diff --git a/BJC-Utils2/src/main/java/bjc/utils/data/experimental/LazyPair.java b/BJC-Utils2/src/main/java/bjc/utils/data/experimental/LazyPair.java
deleted file mode 100644
index 04a4b61..0000000
--- a/BJC-Utils2/src/main/java/bjc/utils/data/experimental/LazyPair.java
+++ /dev/null
@@ -1,317 +0,0 @@
-package bjc.utils.data.experimental;
-
-import java.util.function.BiFunction;
-import java.util.function.Function;
-import java.util.function.Supplier;
-
-/**
- * A lazy implementation of a pair
- *
- * @author ben
- *
- * @param <LeftType>
- * The type on the left side of the pair
- * @param <RightType>
- * The type on the right side of the pair
- */
-public class LazyPair<LeftType, RightType>
- implements IPair<LeftType, RightType> {
- private static class HalfBoundLazyPair<OldType, NewLeft, NewRight>
- implements IPair<NewLeft, NewRight> {
- private Supplier<OldType> oldSupplier;
-
- private Function<OldType, IPair<NewLeft, NewRight>> binder;
-
- private IPair<NewLeft, NewRight> boundPair;
- private boolean pairBound;
-
- public HalfBoundLazyPair(Supplier<OldType> oldSupp,
- Function<OldType, IPair<NewLeft, NewRight>> bindr) {
- oldSupplier = oldSupp;
- binder = bindr;
- }
-
- @Override
- public <BoundLeft> IPair<BoundLeft, NewRight> bindLeft(
- Function<NewLeft, IPair<BoundLeft, NewRight>> leftBinder) {
- Supplier<NewLeft> leftSupp = () -> {
- IPair<NewLeft, NewRight> newPair = boundPair;
-
- if (!pairBound) {
- newPair = binder.apply(oldSupplier.get());
- }
-
- return newPair.getLeft();
- };
-
- return new HalfBoundLazyPair<>(leftSupp, leftBinder);
- }
-
- @Override
- public <BoundRight> IPair<NewLeft, BoundRight> bindRight(
- Function<NewRight, IPair<NewLeft, BoundRight>> rightBinder) {
- Supplier<NewRight> rightSupp = () -> {
- IPair<NewLeft, NewRight> newPair = boundPair;
-
- if (!pairBound) {
- newPair = binder.apply(oldSupplier.get());
- }
-
- return newPair.getRight();
- };
-
- return new HalfBoundLazyPair<>(rightSupp, rightBinder);
- }
-
- @Override
- public <BoundLeft, BoundRight> IPair<BoundLeft, BoundRight> bind(
- BiFunction<NewLeft, NewRight, IPair<BoundLeft, BoundRight>> bindr) {
- IHolder<IPair<NewLeft, NewRight>> newPair = new Identity<>(
- boundPair);
- IHolder<Boolean> newPairMade = new Identity<>(pairBound);
-
- Supplier<NewLeft> leftSupp = () -> {
- if (!newPairMade.getValue()) {
- newPair.replace(binder.apply(oldSupplier.get()));
- newPairMade.replace(true);
- }
-
- return newPair.unwrap((pair) -> pair.getLeft());
- };
-
- Supplier<NewRight> rightSupp = () -> {
- if (!newPairMade.getValue()) {
- newPair.replace(binder.apply(oldSupplier.get()));
- newPairMade.replace(true);
- }
-
- return newPair.unwrap((pair) -> pair.getRight());
- };
-
- return new BoundLazyPair<>(leftSupp, rightSupp, bindr);
- }
-
- @Override
- public <MergedType> MergedType merge(
- BiFunction<NewLeft, NewRight, MergedType> merger) {
- if (!pairBound) {
- boundPair = binder.apply(oldSupplier.get());
-
- pairBound = true;
- }
-
- return boundPair.merge(merger);
- }
- }
-
- private static class BoundLazyPair<OldLeft, OldRight, NewLeft, NewRight>
- implements IPair<NewLeft, NewRight> {
- private Supplier<OldLeft> leftSupplier;
- private Supplier<OldRight> rightSupplier;
-
- private BiFunction<OldLeft, OldRight, IPair<NewLeft, NewRight>> binder;
-
- private IPair<NewLeft, NewRight> boundPair;
-
- private boolean pairBound;
-
- public BoundLazyPair(Supplier<OldLeft> leftSupp,
- Supplier<OldRight> rightSupp,
- BiFunction<OldLeft, OldRight, IPair<NewLeft, NewRight>> bindr) {
- leftSupplier = leftSupp;
- rightSupplier = rightSupp;
- binder = bindr;
- }
-
- @Override
- public <BoundLeft> IPair<BoundLeft, NewRight> bindLeft(
- Function<NewLeft, IPair<BoundLeft, NewRight>> leftBinder) {
- Supplier<NewLeft> leftSupp = () -> {
- IPair<NewLeft, NewRight> newPair = boundPair;
-
- if (!pairBound) {
- newPair = binder.apply(leftSupplier.get(),
- rightSupplier.get());
- }
-
- return newPair.getLeft();
- };
-
- return new HalfBoundLazyPair<>(leftSupp, leftBinder);
- }
-
- @Override
- public <BoundRight> IPair<NewLeft, BoundRight> bindRight(
- Function<NewRight, IPair<NewLeft, BoundRight>> rightBinder) {
- Supplier<NewRight> rightSupp = () -> {
- IPair<NewLeft, NewRight> newPair = boundPair;
-
- if (!pairBound) {
- newPair = binder.apply(leftSupplier.get(),
- rightSupplier.get());
- }
-
- return newPair.getRight();
- };
-
- return new HalfBoundLazyPair<>(rightSupp, rightBinder);
- }
-
- @Override
- public <BoundLeft, BoundRight> IPair<BoundLeft, BoundRight> bind(
- BiFunction<NewLeft, NewRight, IPair<BoundLeft, BoundRight>> bindr) {
- IHolder<IPair<NewLeft, NewRight>> newPair = new Identity<>(
- boundPair);
- IHolder<Boolean> newPairMade = new Identity<>(pairBound);
-
- return new BoundLazyPair<>(() -> {
- if (!newPairMade.getValue()) {
- newPair.replace(binder.apply(leftSupplier.get(),
- rightSupplier.get()));
-
- newPairMade.replace(false);
- }
-
- return newPair.unwrap((pair) -> pair.getLeft());
- }, () -> {
- if (!newPairMade.getValue()) {
- newPair.replace(binder.apply(leftSupplier.get(),
- rightSupplier.get()));
-
- newPairMade.replace(false);
- }
-
- return newPair.unwrap((pair) -> pair.getRight());
- }, bindr);
- }
-
- @Override
- public <MergedType> MergedType merge(
- BiFunction<NewLeft, NewRight, MergedType> merger) {
- if (!pairBound) {
- boundPair = binder.apply(leftSupplier.get(),
- rightSupplier.get());
-
- pairBound = true;
- }
-
- return boundPair.merge(merger);
- }
- }
-
- private LeftType leftValue;
- private RightType rightValue;
-
- private Supplier<LeftType> leftSupplier;
- private Supplier<RightType> rightSupplier;
-
- private boolean leftMaterialized;
- private boolean rightMaterialized;
-
- /**
- * Create a new lazy pair, using the set value s
- *
- * @param leftVal
- * The value for the left side of the pair
- * @param rightVal
- * The value for the right side of the pair
- */
- public LazyPair(LeftType leftVal, RightType rightVal) {
- leftValue = leftVal;
- rightValue = rightVal;
-
- leftMaterialized = true;
- rightMaterialized = true;
- }
-
- /**
- * Create a new lazy pair from the given value sources
- *
- * @param leftSupp
- * The source for a value on the left side of the pair
- * @param rightSupp
- * The source for a value on the right side of the pair
- */
- public LazyPair(Supplier<LeftType> leftSupp,
- Supplier<RightType> rightSupp) {
- leftSupplier = leftSupp;
- rightSupplier = rightSupp;
-
- leftMaterialized = false;
- rightMaterialized = false;
- }
-
- @Override
- public <BoundLeft> IPair<BoundLeft, RightType> bindLeft(
- Function<LeftType, IPair<BoundLeft, RightType>> leftBinder) {
- Supplier<LeftType> leftSupp = () -> {
- if (leftMaterialized) {
- return leftValue;
- }
-
- return leftSupplier.get();
- };
-
- return new HalfBoundLazyPair<>(leftSupp, leftBinder);
- }
-
- @Override
- public <BoundRight> IPair<LeftType, BoundRight> bindRight(
- Function<RightType, IPair<LeftType, BoundRight>> rightBinder) {
- Supplier<RightType> rightSupp = () -> {
- if (rightMaterialized) {
- return rightValue;
- }
-
- return rightSupplier.get();
- };
-
- return new HalfBoundLazyPair<>(rightSupp, rightBinder);
- }
-
- @Override
- public <BoundLeft, BoundRight> IPair<BoundLeft, BoundRight> bind(
- BiFunction<LeftType, RightType, IPair<BoundLeft, BoundRight>> binder) {
- return new BoundLazyPair<>(leftSupplier, rightSupplier, binder);
- }
-
- @Override
- public <MergedType> MergedType merge(
- BiFunction<LeftType, RightType, MergedType> merger) {
- if (!leftMaterialized) {
- leftValue = leftSupplier.get();
-
- leftMaterialized = true;
- }
-
- if (!rightMaterialized) {
- rightValue = rightSupplier.get();
-
- rightMaterialized = true;
- }
-
- return merger.apply(leftValue, rightValue);
- }
-
- @Override
- public LeftType getLeft() {
- if (!leftMaterialized) {
- leftValue = leftSupplier.get();
-
- leftMaterialized = true;
- }
-
- return leftValue;
- }
-
- @Override
- public RightType getRight() {
- if (!rightMaterialized) {
- rightValue = rightSupplier.get();
-
- rightMaterialized = true;
- }
-
- return rightValue;
- }
-}
diff --git a/BJC-Utils2/src/main/java/bjc/utils/data/experimental/Pair.java b/BJC-Utils2/src/main/java/bjc/utils/data/experimental/Pair.java
deleted file mode 100644
index 87378d7..0000000
--- a/BJC-Utils2/src/main/java/bjc/utils/data/experimental/Pair.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package bjc.utils.data.experimental;
-
-import java.util.function.BiFunction;
-import java.util.function.Function;
-
-/**
- * A pair of values, with nothing special about them.
- *
- * @author ben
- *
- * @param <LeftType>
- * The type of the left value
- * @param <RightType>
- * The type of the right value
- */
-public class Pair<LeftType, RightType>
- implements IPair<LeftType, RightType> {
- private LeftType leftValue;
- private RightType rightValue;
-
- /**
- * Create a new pair with both sides set to null
- */
- public Pair() {
- }
-
- /**
- * Create a new pair with both sides set to the specified values
- *
- * @param left
- * The value of the left side
- * @param right
- * The value of the right side
- */
- public Pair(LeftType left, RightType right) {
- leftValue = left;
- rightValue = right;
- }
-
- @Override
- public <BoundLeft> IPair<BoundLeft, RightType> bindLeft(
- Function<LeftType, IPair<BoundLeft, RightType>> leftBinder) {
- return leftBinder.apply(leftValue);
- }
-
- @Override
- public <BoundRight> IPair<LeftType, BoundRight> bindRight(
- Function<RightType, IPair<LeftType, BoundRight>> rightBinder) {
- return rightBinder.apply(rightValue);
- }
-
- @Override
- public <BoundLeft, BoundRight> IPair<BoundLeft, BoundRight> bind(
- BiFunction<LeftType, RightType, IPair<BoundLeft, BoundRight>> binder) {
- return binder.apply(leftValue, rightValue);
- }
-
- @Override
- public <MergedType> MergedType merge(
- BiFunction<LeftType, RightType, MergedType> merger) {
- return merger.apply(leftValue, rightValue);
- }
-} \ No newline at end of file
diff --git a/BJC-Utils2/src/main/java/bjc/utils/data/experimental/package-info.java b/BJC-Utils2/src/main/java/bjc/utils/data/experimental/package-info.java
deleted file mode 100644
index 72e1007..0000000
--- a/BJC-Utils2/src/main/java/bjc/utils/data/experimental/package-info.java
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * Experimental redoing of data structures
- *
- * @author ben
- *
- */
-package bjc.utils.data.experimental; \ No newline at end of file