net.intelie.pipes.MultiExpr 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 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;
}
}
}