All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.intelie.pipes.AutoFullMerger Maven / Gradle / Ivy

There is a newer version: 0.25.5
Show newest version
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;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy