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

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

There is a newer version: 0.25.5
Show newest version
package net.intelie.pipes;

import net.intelie.pipes.util.TreeQueue;

public interface FullMerger {
    void pop();

    void push(Tree tree);

    void clear();

    Tree get();

    static void popMany(FullMerger[] mergers) {
        for (int i = 0; i < mergers.length; i++)
            mergers[i].pop();
    }


    abstract class Base implements FullMerger {
        @Override
        @SuppressWarnings("unchecked")
        public void push(Tree tree) {
            pushQ((Q) tree);
        }

        public abstract void pushQ(Q tree);

        public abstract Q get();
    }

    abstract class Queued implements FullMerger {
        private final TreeQueue queue = new TreeQueue(16);

        @Override
        @SuppressWarnings("unchecked")
        public void push(Tree tree) {
            queue.enqueue(tree);
            pushQ((Q) tree);
        }

        @Override
        @SuppressWarnings("unchecked")
        public void pop() {
            if (!queue.isEmpty())
                popQ((Q)queue.dequeue());
        }

        @Override
        public void clear() {
            queue.clear();
            clearQ();
        }


        public abstract void pushQ(Q tree);

        public abstract void popQ(Q tree);

        public abstract void clearQ();

        public abstract Q get();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy