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

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

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

public abstract class AnyExpr {
    public static  T evalTree(Tree tree) {
        return (T) ((AnyTree) tree).any;
    }

    public static AnyState newState(Scalar scalar) {
        return new AnyState(scalar);
    }

    public static AnyMerger newMerger() {
        return new AnyMerger();
    }

    public static class AnyTree implements Tree {
        private static final long serialVersionUID = 1L;
        private final Object any;

        public AnyTree(Object any) {
            this.any = any;
        }
    }

    public static class AnyState implements State {
        private final Scalar scalar;
        private Object any;

        public AnyState(Scalar scalar) {
            this.scalar = scalar;
            this.any = null;
        }

        @Override
        public void yield(Scope parent, Object message) {
            any = scalar.eval(parent, message);
        }

        @Override
        public Tree flip() {
            return new AnyTree(any);
        }

    }

    public static class AnyMerger extends FullMerger.Base implements InsertMerger {
        private int count = 0;
        private Object any;

        @Override
        public void pushQ(AnyTree tree) {
            any = tree.any;
            count++;
        }

        @Override
        public void pop() {
            if (--count == 0) {
                any = null;
            }
        }

        @Override
        public void clear() {
            any = null;
            count = 0;
        }

        @Override
        public AnyTree get() {
            return new AnyTree(any);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy