summaryrefslogtreecommitdiff
path: root/base/src/main/java/bjc/utils/data/SingleSupplier.java
diff options
context:
space:
mode:
authorBen Culkin <scorpress@gmail.com>2020-04-07 21:03:53 -0400
committerBen Culkin <scorpress@gmail.com>2020-04-07 21:03:53 -0400
commit002516bd03b2ea3f731c8139c9a5f716902ab702 (patch)
tree4b45260e0b411dd070ae5d2f45e8f2795bf91b79 /base/src/main/java/bjc/utils/data/SingleSupplier.java
parentd6afd99961aacd6ce915629773723cb6c6e145a7 (diff)
Finish remove utils.data
utils.data now lives in the esodata project; not in this one
Diffstat (limited to 'base/src/main/java/bjc/utils/data/SingleSupplier.java')
-rw-r--r--base/src/main/java/bjc/utils/data/SingleSupplier.java76
1 files changed, 0 insertions, 76 deletions
diff --git a/base/src/main/java/bjc/utils/data/SingleSupplier.java b/base/src/main/java/bjc/utils/data/SingleSupplier.java
deleted file mode 100644
index 8054d33..0000000
--- a/base/src/main/java/bjc/utils/data/SingleSupplier.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package bjc.utils.data;
-
-import java.util.function.Supplier;
-
-/**
- * A supplier that can only supply one value.
- *
- * Attempting to retrieve another value will cause an exception to be thrown.
- *
- * @author ben
- *
- * @param <T>
- * The supplied type
- */
-public class SingleSupplier<T> implements Supplier<T> {
- /* The next supplier ID. */
- private static long nextID = 0;
- /* The supplier to yield from. */
- private final Supplier<T> source;
- /* Whether this value has been retrieved yet. */
- private boolean gotten;
- /* The ID of this supplier. */
- private final long id;
-
- /*
- * The place where the supplier was instantiated.
- *
- * @NOTE This is both slow to create, and generally bad practice to keep
- * exceptions around without throwing them. However, it is very useful
- * to find where the first instantiation was.
- */
- private Exception instSite;
-
- /**
- * Create a new single supplier from an existing value.
- *
- * @param supp
- * The supplier to give a single value from.
- */
- public SingleSupplier(final Supplier<T> supp) {
- source = supp;
-
- gotten = false;
-
- id = nextID++;
- }
-
- @Override
- public T get() {
- if(gotten == true) {
- final String msg = String.format(
- "Attempted to retrieve value more than once from single supplier #%d", id);
-
- final IllegalStateException isex = new IllegalStateException(msg);
-
- isex.initCause(instSite);
-
- throw isex;
- }
-
- gotten = true;
-
- try {
- throw new IllegalStateException("Previous instantiation here.");
- } catch(final IllegalStateException isex) {
- instSite = isex;
- }
-
- return source.get();
- }
-
- @Override
- public String toString() {
- return String.format("SingleSupplier [source='%s', gotten=%s, id=%s]", source, gotten, id);
- }
-}