summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/esodata/DefaultSpooler.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bjc/esodata/DefaultSpooler.java')
-rw-r--r--src/main/java/bjc/esodata/DefaultSpooler.java43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/main/java/bjc/esodata/DefaultSpooler.java b/src/main/java/bjc/esodata/DefaultSpooler.java
new file mode 100644
index 0000000..8ac7891
--- /dev/null
+++ b/src/main/java/bjc/esodata/DefaultSpooler.java
@@ -0,0 +1,43 @@
+package bjc.esodata;
+
+import java.util.*;
+import java.util.function.Consumer;
+
+/**
+ * A default implementation of {@link Spooler} that handles spools in a FIFO manner
+ * @author bjcul
+ *
+ * @param <T> The type contained in the spools.
+ */
+public class DefaultSpooler<T> implements Spooler<T> {
+ private Queue<Spool<T>> spools;
+
+ /**
+ * Create a new default spooler.
+ */
+ public DefaultSpooler() {
+ this.spools = new ArrayDeque<>();
+ }
+
+ @Override
+ public void registerSpool(Spool<T> spool) {
+ spools.add(spool);
+ }
+
+ @Override
+ public Consumer<T> getInput() {
+ Spool<T> spool = new DefaultSpool<>();
+ registerSpool(spool);
+ return spool.getInput();
+ }
+
+ @Override
+ public Iterator<T> getOutput() {
+ return spools.remove().getOutput();
+ }
+
+ @Override
+ public Spool<T> getSpool() {
+ return spools.remove();
+ }
+}