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 The type contained in the spools. */ public class DefaultSpooler implements Spooler { private Queue> spools; /** * Create a new default spooler. */ public DefaultSpooler() { this.spools = new ArrayDeque<>(); } @Override public void registerSpool(Spool spool) { spools.add(spool); } @Override public Consumer getInput() { Spool spool = new DefaultSpool<>(); registerSpool(spool); return spool.getInput(); } @Override public Iterator getOutput() { return spools.remove().getOutput(); } @Override public Spool getSpool() { return spools.remove(); } }