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

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

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

import net.intelie.pipes.types.Level;

import java.util.Arrays;

public abstract class MultiExpr {
    public static class MultiState implements State {
        private State[] states;

        public MultiState(int flips, Expression... args) {
            this(Arrays.stream(args)
                    .map(x -> Level.asAggregation(x).newState(flips))
                    .toArray(State[]::new));
        }

        public MultiState(State[] states) {
            this.states = states;
        }

        @Override
        public void yield(Scope parent, Object obj) {
            for (State state : states)
                state.yield(parent, obj);
        }

        @Override
        public Tree flip() {
            Tree[] trees = new Tree[states.length];
            for (int i = 0; i < states.length; i++)
                trees[i] = states[i].flip();
            return new MultiTree(trees);
        }
    }

    public static class MultiFullMerger extends FullMerger.Base {
        private final FullMerger[] mergers;

        public MultiFullMerger(Expression... args) {
            this(Arrays.stream(args)
                    .map(x -> Level.asAggregation(x).newMerger())
                    .toArray(FullMerger[]::new));
        }

        public MultiFullMerger(FullMerger[] mergers) {
            this.mergers = mergers;
        }

        @Override
        public void pushQ(MultiTree tree) {
            InsertMerger.pushMany(mergers, tree.trees);
        }

        @Override
        public void pop() {
            FullMerger.popMany(mergers);
        }

        @Override
        public void clear() {
            InsertMerger.clearMany(mergers);
        }

        @Override
        public MultiTree get() {
            return new MultiTree(InsertMerger.getMany(mergers));
        }
    }

    public static class MultiInsertMerger extends InsertMerger.Base {
        private final InsertMerger[] mergers;

        public MultiInsertMerger(Expression... args) {
            this(Arrays.stream(args)
                    .map(x -> Level.asAggregation(x).newInsertMerger())
                    .toArray(InsertMerger[]::new));
        }

        public MultiInsertMerger(InsertMerger... mergers) {
            this.mergers = mergers;
        }

        @Override
        public void pushQ(MultiTree tree) {
            InsertMerger.pushMany(mergers, tree.trees);
        }

        @Override
        public void clear() {
            InsertMerger.clearMany(mergers);
        }

        @Override
        public MultiTree get() {
            return new MultiTree(InsertMerger.getMany(mergers));
        }
    }

    public static class MultiTree implements Tree {
        private static final long serialVersionUID = 1L;

        public final Tree[] trees;

        public MultiTree(Tree... trees) {
            this.trees = trees;
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy