You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2019/03/13 20:51:33 UTC
[tinkerpop] 10/41: trucking along. got as() and path() working.
Really neat -- as() is a pop/push on the Bytecode. Just as specified in the
TP4 article. as(), by(),
and all other step-modulators will pop/push the instruction stack.
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
commit 32c5caefe24e470f811da1505a860d2b0d647a10
Author: Marko A. Rodriguez <ok...@gmail.com>
AuthorDate: Thu Mar 7 06:25:02 2019 -0700
trucking along. got as() and path() working. Really neat -- as() is a pop/push on the Bytecode. Just as specified in the TP4 article. as(), by(), and all other step-modulators will pop/push the instruction stack.
---
.../{machine/compiler => language}/Symbols.java | 4 +++-
.../org/apache/tinkerpop/language/Traversal.java | 14 ++++++++++-
.../tinkerpop/machine/bytecode/Bytecode.java | 4 ++++
.../tinkerpop/machine/bytecode/Instruction.java | 13 ++++++++++-
.../machine/compiler/BytecodeToFunction.java | 21 +++++++++++------
.../{GFunction.java => AbstractFunction.java} | 26 ++++++++++++++++++---
.../{FilterFunction.java => CFunction.java} | 11 +++++----
.../machine/functions/FilterFunction.java | 2 +-
.../machine/functions/FlatMapFunction.java | 2 +-
.../tinkerpop/machine/functions/IncrMap.java | 10 ++++----
.../machine/functions/InitialFunction.java | 2 +-
.../tinkerpop/machine/functions/InjectInitial.java | 7 +++---
.../tinkerpop/machine/functions/IsFilter.java | 8 ++++---
.../tinkerpop/machine/functions/MapFunction.java | 2 +-
.../functions/{IncrMap.java => PathMap.java} | 13 +++++++----
.../Bytecode.java => traversers/Path.java} | 27 ++++++++++++++--------
.../tinkerpop/machine/traversers/Traverser.java | 22 +++++++++++++++++-
.../apache/tinkerpop/machine/TraversalTest.java | 2 +-
.../org/apache/tinkerpop/machine/pipes/Pipes.java | 8 +++----
.../org/apache/tinkerpop/machine/pipes/Step.java | 8 +++----
.../apache/tinkerpop/machine/pipes/PipesTest.java | 1 +
21 files changed, 151 insertions(+), 56 deletions(-)
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/compiler/Symbols.java b/java/core/src/main/java/org/apache/tinkerpop/language/Symbols.java
similarity index 89%
rename from java/core/src/main/java/org/apache/tinkerpop/machine/compiler/Symbols.java
rename to java/core/src/main/java/org/apache/tinkerpop/language/Symbols.java
index 7de197f..fdaf642 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/compiler/Symbols.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/language/Symbols.java
@@ -16,14 +16,16 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.compiler;
+package org.apache.tinkerpop.language;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public final class Symbols {
+ public static final String AS = "as";
public static final String IS = "is";
public static final String INCR = "incr";
public static final String INJECT = "inject";
+ public static final String PATH = "path";
}
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 86d307a..f363342f 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
@@ -19,7 +19,8 @@
package org.apache.tinkerpop.language;
import org.apache.tinkerpop.machine.bytecode.Bytecode;
-import org.apache.tinkerpop.machine.compiler.Symbols;
+
+import java.util.Map;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -34,6 +35,11 @@ public class Traversal<C, A, B> {
this.bytecode = new Bytecode<>();
}
+ public Traversal<C, A, B> as(final String label) {
+ this.bytecode.lastInstruction().addLabel(label);
+ return this;
+ }
+
public Traversal<C, A, B> is(final B object) {
this.bytecode.addInstruction(this.currentCoefficient, Symbols.IS, object);
return this;
@@ -49,6 +55,12 @@ public class Traversal<C, A, B> {
return (Traversal) this;
}
+ public Traversal<C, A, Map<String, ?>> path() {
+ this.bytecode.addInstruction(this.currentCoefficient, Symbols.PATH);
+ return (Traversal) this;
+ }
+
+
public Bytecode<C> getBytecode() {
return this.bytecode;
}
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java
index f58f719..e1ef154 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java
@@ -40,6 +40,10 @@ public class Bytecode<C> {
return this.instructions;
}
+ public Instruction<C> lastInstruction() {
+ return this.instructions.get(this.instructions.size() - 1);
+ }
+
@Override
public String toString() {
return this.instructions.toString();
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Instruction.java b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Instruction.java
index 1361104..88323c2 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Instruction.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Instruction.java
@@ -19,6 +19,8 @@
package org.apache.tinkerpop.machine.bytecode;
import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -28,6 +30,7 @@ public final class Instruction<C> {
private final C coefficient;
private final String op;
private final Object[] args;
+ private final Set<String> labels = new HashSet<>();
public Instruction(final C coefficient, final String op, final Object... args) {
this.coefficient = coefficient;
@@ -47,8 +50,16 @@ public final class Instruction<C> {
return this.args;
}
+ public Set<String> labels() {
+ return this.labels;
+ }
+
+ public void addLabel(final String label) {
+ this.labels.add(label);
+ }
+
@Override
public String toString() {
- return "[" + this.coefficient + "]" + this.op + ":" + Arrays.toString(this.args).replace("[", "").replace("]", "");
+ return "[" + this.coefficient + "]" + this.op + ":" + Arrays.toString(this.args).replace("[", "").replace("]", "" + "@" + this.labels);
}
}
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/compiler/BytecodeToFunction.java b/java/core/src/main/java/org/apache/tinkerpop/machine/compiler/BytecodeToFunction.java
index cd328f8..f63b6a5 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/compiler/BytecodeToFunction.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/compiler/BytecodeToFunction.java
@@ -18,38 +18,45 @@
*/
package org.apache.tinkerpop.machine.compiler;
+import org.apache.tinkerpop.language.Symbols;
import org.apache.tinkerpop.machine.bytecode.Bytecode;
import org.apache.tinkerpop.machine.bytecode.Instruction;
-import org.apache.tinkerpop.machine.functions.GFunction;
+import org.apache.tinkerpop.machine.functions.CFunction;
import org.apache.tinkerpop.machine.functions.IncrMap;
import org.apache.tinkerpop.machine.functions.InjectInitial;
import org.apache.tinkerpop.machine.functions.IsFilter;
+import org.apache.tinkerpop.machine.functions.PathMap;
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public final class BytecodeToFunction {
- public static <C> List<GFunction<C>> compile(final Bytecode<C> bytecode) throws Exception {
- final List<GFunction<C>> functions = new ArrayList<>();
+ public static <C> List<CFunction<C>> compile(final Bytecode<C> bytecode) throws Exception {
+ final List<CFunction<C>> functions = new ArrayList<>();
for (final Instruction<C> instruction : bytecode.getInstructions()) {
functions.add(BytecodeToFunction.generateFunction(instruction));
}
return functions;
}
- private static <C> GFunction<C> generateFunction(final Instruction<C> instruction) throws Exception {
+ private static <C> CFunction<C> generateFunction(final Instruction<C> instruction) throws Exception {
final String op = instruction.op();
+ final C coefficient = instruction.coefficient();
+ final Set<String> labels = instruction.labels();
switch (op) {
case Symbols.INJECT:
- return new InjectInitial<>(instruction.coefficient(), instruction.args());
+ return new InjectInitial<>(coefficient, labels, instruction.args());
case Symbols.IS:
- return new IsFilter<>(instruction.coefficient(), instruction.args()[0]);
+ return new IsFilter<>(coefficient, labels, instruction.args()[0]);
case Symbols.INCR:
- return new IncrMap<C>(instruction.coefficient());
+ return new IncrMap<>(coefficient, labels);
+ case Symbols.PATH:
+ return new PathMap<>(coefficient, labels);
default:
throw new Exception("This is an unknown instruction:" + instruction.op());
}
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/GFunction.java b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/AbstractFunction.java
similarity index 65%
rename from java/core/src/main/java/org/apache/tinkerpop/machine/functions/GFunction.java
rename to java/core/src/main/java/org/apache/tinkerpop/machine/functions/AbstractFunction.java
index 082b679..c918139 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/GFunction.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/AbstractFunction.java
@@ -18,23 +18,43 @@
*/
package org.apache.tinkerpop.machine.functions;
+import org.apache.tinkerpop.machine.traversers.Traverser;
+
+import java.util.Set;
+
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class GFunction<C> {
+abstract class AbstractFunction<C> implements CFunction<C> {
protected final C coefficient;
+ private Set<String> labels;
- public GFunction(final C coefficient) {
+ public AbstractFunction(final C coefficient, final Set<String> labels) {
this.coefficient = coefficient;
+ this.labels = labels;
}
+ @Override
public C coefficient() {
return this.coefficient;
}
@Override
+ public Set<String> labels() {
+ return this.labels;
+ }
+
+ protected <A> Traverser<C, A> postProcess(final Traverser<C, A> traverser) {
+ for (final String label : labels) {
+ traverser.addLabel(label);
+ }
+ return traverser;
+ }
+
+
+ @Override
public String toString() {
- return "[" + this.coefficient + "]" + this.getClass().getSimpleName();
+ return "[" + this.coefficient + "]" + this.getClass().getSimpleName() + "@" + this.labels;
}
}
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FilterFunction.java b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/CFunction.java
similarity index 84%
copy from java/core/src/main/java/org/apache/tinkerpop/machine/functions/FilterFunction.java
copy to java/core/src/main/java/org/apache/tinkerpop/machine/functions/CFunction.java
index 2835783..2c5cc18 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FilterFunction.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/CFunction.java
@@ -18,12 +18,15 @@
*/
package org.apache.tinkerpop.machine.functions;
-import org.apache.tinkerpop.machine.traversers.Traverser;
-
-import java.util.function.Predicate;
+import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public interface FilterFunction<C, A> extends Predicate<Traverser<C, A>> {
+public interface CFunction<C> {
+
+ public C coefficient();
+
+ public Set<String> labels();
+
}
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FilterFunction.java b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FilterFunction.java
index 2835783..64622d9 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FilterFunction.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FilterFunction.java
@@ -25,5 +25,5 @@ import java.util.function.Predicate;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public interface FilterFunction<C, A> extends Predicate<Traverser<C, A>> {
+public interface FilterFunction<C, A> extends Predicate<Traverser<C, A>>, CFunction<C> {
}
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FlatMapFunction.java b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FlatMapFunction.java
index 6d4db90..8f5933b 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FlatMapFunction.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FlatMapFunction.java
@@ -26,5 +26,5 @@ import java.util.function.Function;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public interface FlatMapFunction<C, A, B> extends Function<Traverser<C, A>, Iterator<Traverser<C, B>>> {
+public interface FlatMapFunction<C, A, B> extends Function<Traverser<C, A>, Iterator<Traverser<C, B>>>, CFunction<C> {
}
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IncrMap.java b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IncrMap.java
index 2e5fa06..7200bef 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IncrMap.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IncrMap.java
@@ -20,17 +20,19 @@ package org.apache.tinkerpop.machine.functions;
import org.apache.tinkerpop.machine.traversers.Traverser;
+import java.util.Set;
+
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class IncrMap<C> extends GFunction<C> implements MapFunction<C, Long, Long> {
+public class IncrMap<C> extends AbstractFunction<C> implements MapFunction<C, Long, Long> {
- public IncrMap(final C coefficient) {
- super(coefficient);
+ public IncrMap(final C coefficient, final Set<String> labels) {
+ super(coefficient, labels);
}
@Override
public Traverser<C, Long> apply(final Traverser<C, Long> traverser) {
- return traverser.split(traverser.coefficient(), traverser.object() + 1);
+ return postProcess(traverser.split(traverser.coefficient(), traverser.object() + 1));
}
}
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/InitialFunction.java b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/InitialFunction.java
index c30c46d..f4430ce 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/InitialFunction.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/InitialFunction.java
@@ -26,5 +26,5 @@ import java.util.function.Supplier;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public interface InitialFunction<C,A> extends Supplier<Iterator<Traverser<C,A>>> {
+public interface InitialFunction<C,A> extends Supplier<Iterator<Traverser<C,A>>>, CFunction<C> {
}
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/InjectInitial.java b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/InjectInitial.java
index 4a5a8bd..9da6d2b 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/InjectInitial.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/InjectInitial.java
@@ -23,16 +23,17 @@ import org.apache.tinkerpop.machine.traversers.Traverser;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class InjectInitial<C, A> extends GFunction<C> implements InitialFunction<C, A> {
+public class InjectInitial<C, A> extends AbstractFunction<C> implements InitialFunction<C, A> {
private final List<Traverser<C, A>> traversers;
- public InjectInitial(final C coefficient, final A... objects) {
- super(coefficient);
+ public InjectInitial(final C coefficient, final Set<String> labels, final A... objects) {
+ super(coefficient, labels);
this.traversers = new ArrayList<>();
for (final A object : objects) {
this.traversers.add(new Traverser<>(this.coefficient, object));
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IsFilter.java b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IsFilter.java
index 892ed0c..8c5d35a 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IsFilter.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IsFilter.java
@@ -20,15 +20,17 @@ package org.apache.tinkerpop.machine.functions;
import org.apache.tinkerpop.machine.traversers.Traverser;
+import java.util.Set;
+
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class IsFilter<C, A> extends GFunction<C> implements FilterFunction<C, A> {
+public class IsFilter<C, A> extends AbstractFunction<C> implements FilterFunction<C, A> {
private final A object;
- public IsFilter(final C coefficient, final A object) {
- super(coefficient);
+ public IsFilter(final C coefficient, final Set<String> labels, final A object) {
+ super(coefficient, labels);
this.object = object;
}
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/MapFunction.java b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/MapFunction.java
index e443772..55fb230 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/MapFunction.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/MapFunction.java
@@ -25,6 +25,6 @@ import java.util.function.Function;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public interface MapFunction<C, A, B> extends Function<Traverser<C, A>, Traverser<C, B>> {
+public interface MapFunction<C, A, B> extends Function<Traverser<C, A>, Traverser<C, B>>, CFunction<C> {
}
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IncrMap.java b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/PathMap.java
similarity index 71%
copy from java/core/src/main/java/org/apache/tinkerpop/machine/functions/IncrMap.java
copy to java/core/src/main/java/org/apache/tinkerpop/machine/functions/PathMap.java
index 2e5fa06..c76a838 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IncrMap.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/PathMap.java
@@ -18,19 +18,22 @@
*/
package org.apache.tinkerpop.machine.functions;
+import org.apache.tinkerpop.machine.traversers.Path;
import org.apache.tinkerpop.machine.traversers.Traverser;
+import java.util.Set;
+
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class IncrMap<C> extends GFunction<C> implements MapFunction<C, Long, Long> {
+public class PathMap<C, A> extends AbstractFunction<C> implements MapFunction<C, A, Path> {
- public IncrMap(final C coefficient) {
- super(coefficient);
+ public PathMap(final C coefficient, final Set<String> labels) {
+ super(coefficient, labels);
}
@Override
- public Traverser<C, Long> apply(final Traverser<C, Long> traverser) {
- return traverser.split(traverser.coefficient(), traverser.object() + 1);
+ public Traverser<C, Path> apply(final Traverser<C, A> traverser) {
+ return traverser.split(this.coefficient, traverser.path());
}
}
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Path.java
similarity index 59%
copy from java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java
copy to java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Path.java
index f58f719..d318971 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Path.java
@@ -16,32 +16,39 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.bytecode;
+package org.apache.tinkerpop.machine.traversers;
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class Bytecode<C> {
+public class Path {
- public List<Instruction<C>> instructions;
+ private final List<Object> objects = new ArrayList<>();
+ private final List<Set<String>> labels = new ArrayList<>();
- public Bytecode() {
- this.instructions = new ArrayList<>();
+ public Path() {
}
- public void addInstruction(final C coefficient, final String op, final Object... args) {
- this.instructions.add(new Instruction<>(coefficient, op, args));
+ public Path(final Path path) {
+ path.objects.forEach(o -> objects.add(o));
+ path.labels.forEach(l -> labels.add(l));
}
- public List<Instruction<C>> getInstructions() {
- return this.instructions;
+ public void add(final Set<String> labels, final Object object) {
+ this.labels.add(labels);
+ this.objects.add(object);
+ }
+
+ public void addLabels(final Set<String> labels) {
+ this.labels.get(this.labels.size() - 1).addAll(labels);
}
@Override
public String toString() {
- return this.instructions.toString();
+ return this.objects.toString();
}
}
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java
index 2c8a1ae..6bd2ea1 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java
@@ -18,6 +18,9 @@
*/
package org.apache.tinkerpop.machine.traversers;
+import java.util.Collections;
+import java.util.HashSet;
+
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
@@ -25,6 +28,7 @@ public class Traverser<C, A> {
private final C coefficient;
private final A object;
+ private Path path = new Path();
public Traverser(final C coefficient, final A object) {
this.coefficient = coefficient;
@@ -39,12 +43,28 @@ public class Traverser<C, A> {
return this.object;
}
+ public Path path() {
+ return this.path;
+ }
+
+ public void addLabel(final String label) {
+ this.path.addLabels(Collections.singleton(label));
+ }
+
public <B> Traverser<C, B> split(final C coefficient, final B object) {
- return new Traverser<>(coefficient, object);
+ final Traverser<C, B> traverser = new Traverser<>(coefficient, object);
+ traverser.path = new Path(this.path);
+ traverser.path.add(new HashSet<>(), object);
+ return traverser;
}
@Override
public boolean equals(final Object other) {
return other instanceof Traverser && ((Traverser<C, A>) other).object.equals(this.object);
}
+
+ @Override
+ public String toString() {
+ return this.object.toString();
+ }
}
diff --git a/java/core/src/test/java/org/apache/tinkerpop/machine/TraversalTest.java b/java/core/src/test/java/org/apache/tinkerpop/machine/TraversalTest.java
index 41f5504..592c1e7 100644
--- a/java/core/src/test/java/org/apache/tinkerpop/machine/TraversalTest.java
+++ b/java/core/src/test/java/org/apache/tinkerpop/machine/TraversalTest.java
@@ -34,7 +34,7 @@ public class TraversalTest {
public void shouldHaveBytecode() throws Exception {
TraversalSource<Long> g = Gremlin.traversal();
g = g.coefficients(LongCoefficients.instance());
- final Traversal<Long, Long, Long> traversal = g.inject(7L).is(7L).incr().incr();
+ final Traversal<Long, Long, Long> traversal = g.inject(7L).is(7L).incr().as("a").incr();
System.out.println(traversal.getBytecode());
System.out.println(BytecodeToFunction.compile(traversal.getBytecode()));
}
diff --git a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Pipes.java b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Pipes.java
index c370260..6ecfbf4 100644
--- a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Pipes.java
+++ b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Pipes.java
@@ -20,7 +20,7 @@ package org.apache.tinkerpop.machine.pipes;
import org.apache.tinkerpop.machine.bytecode.Bytecode;
import org.apache.tinkerpop.machine.compiler.BytecodeToFunction;
-import org.apache.tinkerpop.machine.functions.GFunction;
+import org.apache.tinkerpop.machine.functions.CFunction;
import java.util.ArrayList;
import java.util.Iterator;
@@ -34,10 +34,10 @@ public class Pipes<C, S, E> implements Iterator<E> {
private final List<Step<?, ?, ?>> steps = new ArrayList<>();
public Pipes(final Bytecode<C> bytecode) throws Exception {
- final List<GFunction<C>> functions = BytecodeToFunction.compile(bytecode);
+ final List<CFunction<C>> functions = BytecodeToFunction.compile(bytecode);
Step previousStep = null;
- for (final GFunction<?> function : functions) {
- previousStep = new Step(previousStep, function);
+ for (final CFunction<?> function : functions) {
+ previousStep = new Step<>(previousStep, function);
this.steps.add(previousStep);
}
}
diff --git a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Step.java b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Step.java
index f2085a7..b82ca3c 100644
--- a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Step.java
+++ b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Step.java
@@ -18,11 +18,11 @@
*/
package org.apache.tinkerpop.machine.pipes;
-import org.apache.tinkerpop.machine.traversers.Traverser;
+import org.apache.tinkerpop.machine.functions.CFunction;
import org.apache.tinkerpop.machine.functions.FilterFunction;
-import org.apache.tinkerpop.machine.functions.GFunction;
import org.apache.tinkerpop.machine.functions.InitialFunction;
import org.apache.tinkerpop.machine.functions.MapFunction;
+import org.apache.tinkerpop.machine.traversers.Traverser;
import org.apache.tinkerpop.machine.util.FastNoSuchElementException;
import java.util.Iterator;
@@ -32,11 +32,11 @@ import java.util.Iterator;
*/
public class Step<C, S, E> implements Iterator<Traverser<?, E>> {
- private final GFunction<C> function;
+ private final CFunction<C> function;
private final Step previousStep;
private Iterator<Traverser<C, E>> currentIterator = null;
- public Step(final Step previousStep, final GFunction<C> function) {
+ public Step(final Step previousStep, final CFunction<C> function) {
this.previousStep = previousStep;
this.function = function;
if (this.function instanceof InitialFunction) {
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 1b7e020..ceb3fb8 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
@@ -37,5 +37,6 @@ public class PipesTest {
System.out.println(pipes.hasNext());
System.out.println(pipes.toList());
System.out.println(pipes.hasNext());
+ System.out.println(new Pipes<>(g.inject(7L, 10L, 12L).incr().as("a").incr().incr().path().getBytecode()).toList());
}
}