net.intelie.pipes.AutoFullMerger Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of pipes-api Show documentation
Show all versions of pipes-api Show documentation
Intelie Pipes' API classes and interfaces
package net.intelie.pipes;
import java.util.ArrayDeque;
public class AutoFullMerger implements FullMerger {
private final ArrayDeque enter = new ArrayDeque<>();
private final ArrayDeque exitSum = new ArrayDeque<>();
private final InsertMerger merger;
public AutoFullMerger(InsertMerger merger) {
this.merger = merger;
}
public long size() {
return enter.size() + exitSum.size();
}
@Override
public void pop() {
if (exitSum.isEmpty()) {
if (enter.isEmpty()) return;
merger.clear();
while (!enter.isEmpty()) {
merger.push(enter.pollLast());
exitSum.addLast(merger.get());
}
merger.clear();
}
exitSum.pollLast();
}
@Override
public void push(Tree tree) {
enter.addLast(tree);
merger.push(tree);
}
@Override
public void clear() {
enter.clear();
exitSum.clear();
merger.clear();
}
@Override
public Tree get() {
Tree onlyEnter = merger.get();
if (!exitSum.isEmpty())
merger.push(exitSum.peekLast());
Tree tree = merger.get();
merger.clear();
merger.push(onlyEnter);
return tree;
}
}