summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/esodata/DefaultSpooler.java
blob: 8ac7891374fbc11a5b0a35d5bba016575dc9f7e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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();
	}
}