This is an automated email from the ASF dual-hosted git repository. okram pushed a commit to branch tp4 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
The following commit(s) were added to refs/heads/tp4 by this push: new fa04dff added __.constant() and ConstantMap function. Tested whether is(traversal) works. It does. fa04dff is described below commit fa04dff29cf8cc0dc458608fa97f5aaf2d350792 Author: Marko A. Rodriguez <okramma...@gmail.com> AuthorDate: Sat Mar 16 10:55:30 2019 -0600 added __.constant() and ConstantMap function. Tested whether is(traversal) works. It does. --- .../java/org/apache/tinkerpop/language/Traversal.java | 5 +++++ .../main/java/org/apache/tinkerpop/language/__.java | 8 ++++++++ .../tinkerpop/machine/bytecode/BytecodeUtil.java | 5 ++++- .../org/apache/tinkerpop/machine/bytecode/Symbols.java | 3 +++ .../tinkerpop/machine/coefficient/Coefficient.java | 2 ++ .../tinkerpop/machine/coefficient/LongCoefficient.java | 5 +++++ .../tinkerpop/machine/function/filter/IsFilter.java | 11 ++++++----- .../{filter/IsFilter.java => map/ConstantMap.java} | 18 +++++++++--------- .../org/apache/tinkerpop/machine/pipes/PipesTest.java | 3 ++- 9 files changed, 44 insertions(+), 16 deletions(-) diff --git a/java/core/src/main/java/org/apache/tinkerpop/language/Traversal.java b/java/core/src/main/java/org/apache/tinkerpop/language/Traversal.java index cc8c811..a8dbe1a 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/language/Traversal.java +++ b/java/core/src/main/java/org/apache/tinkerpop/language/Traversal.java @@ -79,6 +79,11 @@ public class Traversal<C, S, E> implements Iterator<E> { return (Traversal) this; } + public <R> Traversal<C, S, R> constance(final R constant) { + this.bytecode.addInstruction(this.currentCoefficient, Symbols.CONSTANT, constant); + return (Traversal) this; + } + public Traversal<C, S, Long> count() { this.bytecode.addInstruction(this.currentCoefficient, Symbols.COUNT); return (Traversal) this; diff --git a/java/core/src/main/java/org/apache/tinkerpop/language/__.java b/java/core/src/main/java/org/apache/tinkerpop/language/__.java index d0febb8..ef6099a 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/language/__.java +++ b/java/core/src/main/java/org/apache/tinkerpop/language/__.java @@ -37,6 +37,10 @@ public class __ { return __.<C, S>start().c(coefficient); } + public static <C, S> Traversal<C, S, S> constant(final S constant) { + return __.<C, S>start().constance(constant); + } + public static <C> Traversal<C, Long, Long> incr() { return __.<C, Long>start().incr(); } @@ -45,6 +49,10 @@ public class __ { return __.<C, S>start().is(object); } + public static <C, S> Traversal<C, S, S> is(final Traversal<C, S, S> objectTraversal) { + return __.<C, S>start().is(objectTraversal); + } + public static <C, S extends Number> Traversal<C, S, S> sum() { return __.<C, S>start().sum(); } diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java index b508e24..1b4d0e7 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java @@ -31,6 +31,7 @@ import org.apache.tinkerpop.machine.function.filter.IdentityFilter; import org.apache.tinkerpop.machine.function.filter.IsFilter; import org.apache.tinkerpop.machine.function.flatmap.UnfoldFlatMap; import org.apache.tinkerpop.machine.function.initial.InjectInitial; +import org.apache.tinkerpop.machine.function.map.ConstantMap; import org.apache.tinkerpop.machine.function.map.IncrMap; import org.apache.tinkerpop.machine.function.map.MapMap; import org.apache.tinkerpop.machine.function.map.PathMap; @@ -149,6 +150,8 @@ public final class BytecodeUtil { Compilation.compileOne(instruction.args()[0]), Compilation.compileOne(instruction.args()[1]), Compilation.compileOne(instruction.args()[2])); + case Symbols.CONSTANT: + return new ConstantMap<>(coefficient, labels, instruction.args()[0]); case Symbols.COUNT: return new CountReduce<>(coefficient, labels); case Symbols.FILTER: @@ -164,7 +167,7 @@ public final class BytecodeUtil { case Symbols.INJECT: return new InjectInitial<>(coefficient, labels, instruction.args()); case Symbols.IS: - return new IsFilter<>(coefficient, labels, instruction.args()[0]); + return new IsFilter<>(coefficient, labels, Argument.create(instruction.args()[0])); case Symbols.INCR: return new IncrMap<>(coefficient, labels); case Symbols.MAP: diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Symbols.java b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Symbols.java index eeba92d..46afecd 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Symbols.java +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Symbols.java @@ -37,6 +37,7 @@ public final class Symbols { public static final String BARRIER = "barrier"; public static final String CHOOSE_IF_THEN = "chooseIfThen"; public static final String CHOOSE_IF_THEN_ELSE = "chooseIfThenElse"; + public static final String CONSTANT = "constant"; public static final String COUNT = "count"; public static final String FILTER = "filter"; public static final String GROUP_COUNT = "groupCount"; @@ -61,6 +62,8 @@ public final class Symbols { return Type.BRANCH; case CHOOSE_IF_THEN_ELSE: return Type.BRANCH; + case CONSTANT: + return Type.MAP; case COUNT: return Type.REDUCE; case FILTER: diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/coefficient/Coefficient.java b/java/core/src/main/java/org/apache/tinkerpop/machine/coefficient/Coefficient.java index bd5bf05..6f6c021 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/machine/coefficient/Coefficient.java +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/coefficient/Coefficient.java @@ -37,6 +37,8 @@ public interface Coefficient<C> extends Cloneable, Serializable { public boolean isUnity(); + public boolean isZero(); + public C value(); public Long count(); diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/coefficient/LongCoefficient.java b/java/core/src/main/java/org/apache/tinkerpop/machine/coefficient/LongCoefficient.java index 7aeed0b..ba69a57 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/machine/coefficient/LongCoefficient.java +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/coefficient/LongCoefficient.java @@ -69,6 +69,11 @@ public class LongCoefficient implements Coefficient<Long> { } @Override + public boolean isZero() { + return 0L == this.value; + } + + @Override public Long value() { return this.value; } diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/function/filter/IsFilter.java b/java/core/src/main/java/org/apache/tinkerpop/machine/function/filter/IsFilter.java index 615b296..6b2be92 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/machine/function/filter/IsFilter.java +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/function/filter/IsFilter.java @@ -18,6 +18,7 @@ */ package org.apache.tinkerpop.machine.function.filter; +import org.apache.tinkerpop.machine.bytecode.Argument; import org.apache.tinkerpop.machine.coefficient.Coefficient; import org.apache.tinkerpop.machine.function.AbstractFunction; import org.apache.tinkerpop.machine.function.FilterFunction; @@ -31,20 +32,20 @@ import java.util.Set; */ public final class IsFilter<C, S> extends AbstractFunction<C> implements FilterFunction<C, S> { - private S object; + private Argument<S> argument; - public IsFilter(final Coefficient<C> coefficient, final Set<String> labels, final S object) { + public IsFilter(final Coefficient<C> coefficient, final Set<String> labels, final Argument<S> argument) { super(coefficient, labels); - this.object = object; + this.argument = argument; } @Override public boolean test(final Traverser<C, S> traverser) { - return traverser.object().equals(this.object); + return traverser.object().equals(this.argument.getArg(traverser.object())); } @Override public String toString() { - return StringFactory.makeFunctionString(this, this.object); + return StringFactory.makeFunctionString(this, this.argument); } } diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/function/filter/IsFilter.java b/java/core/src/main/java/org/apache/tinkerpop/machine/function/map/ConstantMap.java similarity index 69% copy from java/core/src/main/java/org/apache/tinkerpop/machine/function/filter/IsFilter.java copy to java/core/src/main/java/org/apache/tinkerpop/machine/function/map/ConstantMap.java index 615b296..df93562 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/machine/function/filter/IsFilter.java +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/function/map/ConstantMap.java @@ -16,11 +16,11 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.tinkerpop.machine.function.filter; +package org.apache.tinkerpop.machine.function.map; import org.apache.tinkerpop.machine.coefficient.Coefficient; import org.apache.tinkerpop.machine.function.AbstractFunction; -import org.apache.tinkerpop.machine.function.FilterFunction; +import org.apache.tinkerpop.machine.function.MapFunction; import org.apache.tinkerpop.machine.traverser.Traverser; import org.apache.tinkerpop.util.StringFactory; @@ -29,22 +29,22 @@ import java.util.Set; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ -public final class IsFilter<C, S> extends AbstractFunction<C> implements FilterFunction<C, S> { +public class ConstantMap<C, S, E> extends AbstractFunction<C> implements MapFunction<C, S, E> { - private S object; + private final E constant; - public IsFilter(final Coefficient<C> coefficient, final Set<String> labels, final S object) { + public ConstantMap(final Coefficient<C> coefficient, final Set<String> labels, final E constant) { super(coefficient, labels); - this.object = object; + this.constant = constant; } @Override - public boolean test(final Traverser<C, S> traverser) { - return traverser.object().equals(this.object); + public E apply(final Traverser<C, S> traverser) { + return this.constant; } @Override public String toString() { - return StringFactory.makeFunctionString(this, this.object); + return StringFactory.makeFunctionString(this, this.constant); } } diff --git a/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java index 69eda91..633fdd7 100644 --- a/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java +++ b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java @@ -29,6 +29,7 @@ import org.junit.jupiter.api.Test; import java.util.Arrays; +import static org.apache.tinkerpop.language.__.constant; import static org.apache.tinkerpop.language.__.incr; import static org.apache.tinkerpop.language.__.is; @@ -44,7 +45,7 @@ public class PipesTest { .withProcessor(PipesProcessor.class) .withStrategy(IdentityStrategy.class); - Traversal<Long, ?, ?> traversal = g.inject(Arrays.asList(1L, 1L)).<Long>unfold().map(incr()).repeat(incr()).until(is(10L)).sum(); + Traversal<Long, ?, ?> traversal = g.inject(Arrays.asList(1L, 1L)).<Long>unfold().map(incr()).repeat(incr()).until(__.is(__.<Long,Long>constant(8L).incr().incr())).sum(); System.out.println(TraversalUtil.getBytecode(traversal)); System.out.println(traversal); System.out.println(traversal.toList());