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