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 2015/04/23 19:14:17 UTC
incubator-tinkerpop git commit: removed SparsePath as it is an
optimization that led to too many bugs and unexpected sideEffects. Made all
the Traversers now extend AbstractStep (or a Traverser that ultimately
extends AbstractStep). This greatly simplifi
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/sparse_path_removal [created] f92ac8633
removed SparsePath as it is an optimization that led to too many bugs and unexpected sideEffects. Made all the Traversers now extend AbstractStep (or a Traverser that ultimately extends AbstractStep). This greatly simplified the code. Fixed a test bug in MapTest.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/f92ac863
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/f92ac863
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/f92ac863
Branch: refs/heads/sparse_path_removal
Commit: f92ac8633a27b4aa59d4de356a651927112e361a
Parents: f462308
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Apr 23 11:14:04 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Apr 23 11:14:04 2015 -0600
----------------------------------------------------------------------
.../traversal/step/filter/ExceptStep.java | 2 +-
.../traversal/step/filter/RetainStep.java | 2 +-
.../process/traversal/step/map/MapStep.java | 4 -
.../traversal/step/map/SelectOneStep.java | 24 +--
.../process/traversal/step/map/SelectStep.java | 24 +--
.../traversal/step/map/match/MatchStep.java | 4 +-
.../process/traversal/step/util/SparsePath.java | 95 ---------
.../traverser/B_O_PA_S_SE_SL_Traverser.java | 86 --------
.../B_O_PA_S_SE_SL_TraverserGenerator.java | 62 ------
.../traverser/B_O_P_PA_S_SE_SL_Traverser.java | 58 -----
.../B_O_P_PA_S_SE_SL_TraverserGenerator.java | 61 ------
.../traverser/B_O_P_S_SE_SL_Traverser.java | 107 ++++++++++
.../B_O_P_S_SE_SL_TraverserGenerator.java | 58 +++++
.../traverser/B_O_S_SE_SL_Traverser.java | 119 +++++++++++
.../B_O_S_SE_SL_TraverserGenerator.java | 59 ++++++
.../traverser/TraverserRequirement.java | 1 -
.../traverser/util/AbstractPathTraverser.java | 210 -------------------
.../util/DefaultTraverserGeneratorFactory.java | 12 +-
.../gremlin/structure/io/gryo/GryoMapper.java | 8 +-
.../traversal/step/map/GroovyMapTest.groovy | 4 +-
.../apache/tinkerpop/gremlin/GraphProvider.java | 13 +-
.../process/traversal/step/map/MapTest.java | 4 +-
.../process/traversal/step/map/MatchTest.java | 4 +-
23 files changed, 375 insertions(+), 646 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ExceptStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ExceptStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ExceptStep.java
index 332037e..21ea5d3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ExceptStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ExceptStep.java
@@ -92,6 +92,6 @@ public final class ExceptStep<S> extends FilterStep<S> {
Collections.singleton(TraverserRequirement.OBJECT) :
Stream.of(TraverserRequirement.OBJECT,
TraverserRequirement.SIDE_EFFECTS,
- TraverserRequirement.PATH_ACCESS).collect(Collectors.toSet());
+ TraverserRequirement.PATH).collect(Collectors.toSet());
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RetainStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RetainStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RetainStep.java
index bc217d3..e056380 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RetainStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RetainStep.java
@@ -92,6 +92,6 @@ public final class RetainStep<S> extends FilterStep<S> {
Collections.singleton(TraverserRequirement.OBJECT) :
Stream.of(TraverserRequirement.OBJECT,
TraverserRequirement.SIDE_EFFECTS,
- TraverserRequirement.PATH_ACCESS).collect(Collectors.toSet());
+ TraverserRequirement.PATH).collect(Collectors.toSet());
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapStep.java
index 4d1dc9d..b7c2944 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapStep.java
@@ -45,9 +45,5 @@ public abstract class MapStep<S, E> extends AbstractStep<S, E> {
protected abstract E map(final Traverser.Admin<S> traverser);
- @Override
- public Set<TraverserRequirement> getRequirements() {
- return Collections.singleton(TraverserRequirement.PATH_ACCESS); // TODO: this is bad -- just a hack right now.
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java
index fcc830e..6f6fe77 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java
@@ -19,15 +19,12 @@
package org.apache.tinkerpop.gremlin.process.traversal.step.map;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.CollectingBarrierStep;
import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.EngineDependent;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
import java.util.Collections;
import java.util.List;
@@ -37,7 +34,7 @@ import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class SelectOneStep<S, E> extends MapStep<S, E> implements TraversalParent, EngineDependent {
+public final class SelectOneStep<S, E> extends MapStep<S, E> implements TraversalParent {
private final String selectLabel;
private Traversal.Admin<Object, Object> selectTraversal = new IdentityTraversal<>();
@@ -58,19 +55,6 @@ public final class SelectOneStep<S, E> extends MapStep<S, E> implements Traversa
}
@Override
- public void onEngine(final TraversalEngine traversalEngine) {
- this.requiresPaths = traversalEngine.isComputer() ?
- TraversalHelper.getLabelsUpTo(this, this.traversal.asAdmin()).stream().filter(this.selectLabel::equals).findAny().isPresent() :
- TraversalHelper.getStepsUpTo(this, this.traversal.asAdmin()).stream()
- .filter(step -> step instanceof CollectingBarrierStep)
- .filter(step -> TraversalHelper.getLabelsUpTo(step, this.traversal.asAdmin()).stream().filter(this.selectLabel::equals).findAny().isPresent()
- || (step.getLabel().isPresent() && this.selectLabel.equals(step.getLabel().get()))) // TODO: get rid of this (there is a test case to check it)
- .findAny().isPresent() ||
- TraversalHelper.getStepsUpTo(this, this.traversal.asAdmin()).stream().
- filter(step -> step instanceof TraversalParent).findAny().isPresent();
- }
-
- @Override
public String toString() {
return TraversalHelper.makeStepString(this, this.selectLabel, this.selectTraversal);
}
@@ -94,9 +78,7 @@ public final class SelectOneStep<S, E> extends MapStep<S, E> implements Traversa
@Override
public Set<TraverserRequirement> getRequirements() {
- final Set<TraverserRequirement> requirements = this.getSelfAndChildRequirements(TraverserRequirement.OBJECT, TraverserRequirement.PATH_ACCESS);
- if (this.requiresPaths) requirements.add(TraverserRequirement.PATH);
- return requirements;
+ return this.getSelfAndChildRequirements(TraverserRequirement.OBJECT, TraverserRequirement.PATH);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
index 3f62100..3c2bf76 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
@@ -20,15 +20,12 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.map;
import org.apache.tinkerpop.gremlin.process.traversal.Path;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.CollectingBarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.EngineDependent;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalRing;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
import java.util.Arrays;
import java.util.LinkedHashMap;
@@ -39,7 +36,7 @@ import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class SelectStep<S, E> extends MapStep<S, Map<String, E>> implements TraversalParent, EngineDependent {
+public final class SelectStep<S, E> extends MapStep<S, Map<String, E>> implements TraversalParent {
protected TraversalRing<Object, Object> traversalRing = new TraversalRing<>();
private final List<String> selectLabels;
@@ -84,19 +81,6 @@ public final class SelectStep<S, E> extends MapStep<S, Map<String, E>> implement
}
@Override
- public void onEngine(final TraversalEngine traversalEngine) {
- this.requiresPaths = traversalEngine.isComputer() ?
- TraversalHelper.getLabelsUpTo(this, this.traversal.asAdmin()).stream().filter(this.selectLabels::contains).findAny().isPresent() :
- TraversalHelper.getStepsUpTo(this, this.traversal.asAdmin()).stream()
- .filter(step -> step instanceof CollectingBarrierStep)
- .filter(step -> TraversalHelper.getLabelsUpTo(step, this.traversal.asAdmin()).stream().filter(this.selectLabels::contains).findAny().isPresent()
- || (step.getLabel().isPresent() && this.selectLabels.contains(step.getLabel().get()))) // TODO: get rid of this (there is a test case to check it)
- .findAny().isPresent() ||
- TraversalHelper.getStepsUpTo(this, this.traversal.asAdmin()).stream().
- filter(step -> step instanceof TraversalParent).findAny().isPresent();
- }
-
- @Override
public String toString() {
return TraversalHelper.makeStepString(this, this.selectLabels, this.traversalRing);
}
@@ -123,8 +107,6 @@ public final class SelectStep<S, E> extends MapStep<S, Map<String, E>> implement
@Override
public Set<TraverserRequirement> getRequirements() {
- final Set<TraverserRequirement> requirements = this.getSelfAndChildRequirements(TraverserRequirement.OBJECT, TraverserRequirement.PATH_ACCESS);
- if (this.requiresPaths) requirements.add(TraverserRequirement.PATH);
- return requirements;
+ return this.getSelfAndChildRequirements(TraverserRequirement.OBJECT, TraverserRequirement.PATH);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
index d9cbf28..70e2ac3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
@@ -24,7 +24,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_PA_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_S_SE_SL_Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
@@ -74,7 +74,7 @@ public final class MatchStep<S, E> extends AbstractStep<S, Map<String, E>> imple
super(traversal);
this.startLabel = startLabel;
this.traversalsByStartAs = new HashMap<>();
- this.currentStart = new B_O_PA_S_SE_SL_Traverser<>(null, this);
+ this.currentStart = new B_O_S_SE_SL_Traverser<>(null, this, 1l); // TODO: bad? P?
for (final Traversal tl : traversals) {
addTraversalPrivate(tl);
this.integrateChild(tl.asAdmin());
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/SparsePath.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/SparsePath.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/SparsePath.java
deleted file mode 100644
index 2f55759..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/SparsePath.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.process.traversal.step.util;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Path;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Stream;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class SparsePath implements Path, Serializable {
-
- private final Map<String, Object> map = new HashMap<>();
- private Object currentObject = null;
-
- protected SparsePath() {
-
- }
-
- public static SparsePath make() {
- return new SparsePath();
- }
-
- @Override
- public Path extend(final Object object, final String... labels) {
- this.currentObject = object;
- if (labels.length > 0)
- Stream.of(labels).forEach(label -> this.map.put(label, object));
- return this;
- }
-
- @Override
- public void addLabel(final String label) {
- this.map.put(label, this.currentObject);
- }
-
- @Override
- public List<Object> objects() {
- return Collections.unmodifiableList(new ArrayList<>(this.map.values()));
- }
-
- @Override
- public List<Set<String>> labels() {
- final List<Set<String>> labels = new ArrayList<>();
- this.map.forEach((k, v) -> labels.add(Collections.singleton(k)));
- return Collections.unmodifiableList(labels);
- }
-
-
- public <A> A get(final String label) throws IllegalArgumentException {
- final Object object = this.map.get(label);
- if (null == object)
- throw Path.Exceptions.stepWithProvidedLabelDoesNotExist(label);
- return (A) object;
- }
-
- @Override
- public boolean hasLabel(final String label) {
- return this.map.containsKey(label);
- }
-
- @Override
- public Path clone() {
- return this;
- }
-
- @Override
- public int size() {
- return this.map.size();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_PA_S_SE_SL_Traverser.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_PA_S_SE_SL_Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_PA_S_SE_SL_Traverser.java
deleted file mode 100644
index 4a8925f..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_PA_S_SE_SL_Traverser.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.process.traversal.traverser;
-
-
-import org.apache.tinkerpop.gremlin.process.traversal.Path;
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.AbstractPathTraverser;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.SparsePath;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-
-import java.util.Map;
-import java.util.Optional;
-import java.util.WeakHashMap;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class B_O_PA_S_SE_SL_Traverser<T> extends AbstractPathTraverser<T> {
-
- protected B_O_PA_S_SE_SL_Traverser() {
- }
-
- public B_O_PA_S_SE_SL_Traverser(final T t, final Step<T, ?> step) {
- super(t, step);
- final Optional<String> stepLabel = step.getLabel();
- this.path = stepLabel.isPresent() ?
- getOrCreateFromCache(this.sideEffects).extend(t, stepLabel.get()) :
- getOrCreateFromCache(this.sideEffects).extend(t);
- }
-
- @Override
- public int hashCode() {
- return this.t.hashCode() + this.future.hashCode() + this.loops;
- }
-
- @Override
- public boolean equals(final Object object) {
- return object instanceof B_O_PA_S_SE_SL_Traverser
- && ((B_O_PA_S_SE_SL_Traverser) object).get().equals(this.t)
- && ((B_O_PA_S_SE_SL_Traverser) object).getStepId().equals(this.getStepId())
- && ((B_O_PA_S_SE_SL_Traverser) object).loops() == this.loops()
- && (null == this.sack);
- }
-
- @Override
- public T attach(final Vertex vertex, final Method method) {
- super.attach(vertex, method);
- final Path newSparsePath = getOrCreateFromCache(this.sideEffects);
- this.path.forEach((object, labels) -> newSparsePath.extend(object, labels.toArray(new String[labels.size()])));
- this.path = newSparsePath;
- return this.t;
- }
-
- //////////////////////
-
- private static final Map<TraversalSideEffects, SparsePath> PATH_CACHE = new WeakHashMap<>();
-
- private static SparsePath getOrCreateFromCache(final TraversalSideEffects sideEffects) {
- SparsePath path = PATH_CACHE.get(sideEffects);
- if (null == path) {
- path = SparsePath.make();
- PATH_CACHE.put(sideEffects, path);
- }
- return path;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_PA_S_SE_SL_TraverserGenerator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_PA_S_SE_SL_TraverserGenerator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_PA_S_SE_SL_TraverserGenerator.java
deleted file mode 100644
index dc25bad..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_PA_S_SE_SL_TraverserGenerator.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.process.traversal.traverser;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.TraverserGenerator;
-
-import java.util.EnumSet;
-import java.util.Set;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class B_O_PA_S_SE_SL_TraverserGenerator implements TraverserGenerator {
-
- private static final B_O_PA_S_SE_SL_TraverserGenerator INSTANCE = new B_O_PA_S_SE_SL_TraverserGenerator();
-
- private static final Set<TraverserRequirement> REQUIREMENTS = EnumSet.of(
- TraverserRequirement.OBJECT,
- TraverserRequirement.BULK,
- TraverserRequirement.SINGLE_LOOP,
- TraverserRequirement.PATH_ACCESS,
- TraverserRequirement.SACK,
- TraverserRequirement.SIDE_EFFECTS);
-
-
- private B_O_PA_S_SE_SL_TraverserGenerator() {
- }
-
- @Override
- public <S> Traverser.Admin<S> generate(final S start, final Step<S, ?> startStep, final long initialBulk) {
- final B_O_PA_S_SE_SL_Traverser<S> traverser = new B_O_PA_S_SE_SL_Traverser<>(start, startStep);
- traverser.setBulk(initialBulk);
- return traverser;
- }
-
- @Override
- public Set<TraverserRequirement> getProvidedRequirements() {
- return REQUIREMENTS;
- }
-
- public static B_O_PA_S_SE_SL_TraverserGenerator instance() {
- return INSTANCE;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_PA_S_SE_SL_Traverser.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_PA_S_SE_SL_Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_PA_S_SE_SL_Traverser.java
deleted file mode 100644
index 71129f0..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_PA_S_SE_SL_Traverser.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.process.traversal.traverser;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.AbstractPathTraverser;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.ImmutablePath;
-
-import java.util.Optional;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class B_O_P_PA_S_SE_SL_Traverser<T> extends AbstractPathTraverser<T> {
-
- protected B_O_P_PA_S_SE_SL_Traverser() {
- }
-
- public B_O_P_PA_S_SE_SL_Traverser(final T t, final Step<T, ?> step) {
- super(t, step);
- final Optional<String> stepLabel = step.getLabel();
- this.path = stepLabel.isPresent() ?
- ImmutablePath.make().extend(t, stepLabel.get()) :
- ImmutablePath.make().extend(t);
- }
-
- @Override
- public int hashCode() {
- return super.hashCode() + this.path.hashCode();
- }
-
- @Override
- public boolean equals(final Object object) {
- return (object instanceof B_O_P_PA_S_SE_SL_Traverser)
- && ((B_O_P_PA_S_SE_SL_Traverser) object).path().equals(this.path) // TODO: path equality
- && ((B_O_P_PA_S_SE_SL_Traverser) object).get().equals(this.t)
- && ((B_O_P_PA_S_SE_SL_Traverser) object).getStepId().equals(this.getStepId())
- && ((B_O_P_PA_S_SE_SL_Traverser) object).loops() == this.loops()
- && (null == this.sack);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_PA_S_SE_SL_TraverserGenerator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_PA_S_SE_SL_TraverserGenerator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_PA_S_SE_SL_TraverserGenerator.java
deleted file mode 100644
index 5eb62cd..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_PA_S_SE_SL_TraverserGenerator.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.process.traversal.traverser;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.TraverserGenerator;
-
-import java.util.EnumSet;
-import java.util.Set;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class B_O_P_PA_S_SE_SL_TraverserGenerator implements TraverserGenerator {
-
- private static final B_O_P_PA_S_SE_SL_TraverserGenerator INSTANCE = new B_O_P_PA_S_SE_SL_TraverserGenerator();
- private static final Set<TraverserRequirement> REQUIREMENTS = EnumSet.of(
- TraverserRequirement.OBJECT,
- TraverserRequirement.BULK,
- TraverserRequirement.SINGLE_LOOP,
- TraverserRequirement.PATH_ACCESS,
- TraverserRequirement.PATH,
- TraverserRequirement.SACK,
- TraverserRequirement.SIDE_EFFECTS);
-
- private B_O_P_PA_S_SE_SL_TraverserGenerator() {
- }
-
- @Override
- public <S> Traverser.Admin<S> generate(final S start, final Step<S, ?> startStep, final long initialBulk) {
- final B_O_P_PA_S_SE_SL_Traverser<S> traverser = new B_O_P_PA_S_SE_SL_Traverser<>(start, startStep);
- traverser.setBulk(initialBulk);
- return traverser;
- }
-
- @Override
- public Set<TraverserRequirement> getProvidedRequirements() {
- return REQUIREMENTS;
- }
-
- public static B_O_P_PA_S_SE_SL_TraverserGenerator instance() {
- return INSTANCE;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_Traverser.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_Traverser.java
new file mode 100644
index 0000000..9a0e4af
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_Traverser.java
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.traverser;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.ImmutablePath;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.util.Attachable;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
+
+import java.util.Optional;
+import java.util.function.UnaryOperator;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class B_O_P_S_SE_SL_Traverser<T> extends B_O_S_SE_SL_Traverser<T> {
+
+ protected Path path;
+
+ protected B_O_P_S_SE_SL_Traverser() {
+ }
+
+ public B_O_P_S_SE_SL_Traverser(final T t, final Step<T, ?> step, final long initialBulk) {
+ super(t, step, initialBulk);
+ final Optional<String> stepLabel = step.getLabel();
+ this.path = stepLabel.isPresent() ?
+ ImmutablePath.make().extend(t, stepLabel.get()) :
+ ImmutablePath.make().extend(t);
+ }
+
+ /////////////////
+
+ @Override
+ public Path path() {
+ return this.path;
+ }
+
+ /////////////////
+
+ @Override
+ public Traverser.Admin<T> detach() {
+ super.detach();
+ this.path = DetachedFactory.detach(this.path, true);
+ return this;
+ }
+
+ @Override
+ public T attach(final Vertex hostVertex, final Method method) {
+ // you do not want to attach a path because it will reference graph objects not at the current vertex
+ if (this.t instanceof Attachable && !(((Attachable) this.t).get() instanceof Path))
+ this.t = ((Attachable<T>) this.t).attach(hostVertex, method);
+ return this.t;
+ }
+
+ /////////////////
+
+ @Override
+ public void merge(final Traverser.Admin<?> other) {
+ this.bulk = this.bulk + other.bulk();
+ }
+
+ @Override
+ public <R> Traverser.Admin<R> split(final R r, final Step<T, R> step) {
+
+ final B_O_P_S_SE_SL_Traverser<R> clone = (B_O_P_S_SE_SL_Traverser<R>) super.split(r,step);
+ final Optional<String> stepLabel = step.getLabel();
+ clone.path = stepLabel.isPresent() ? clone.path.clone().extend(r, stepLabel.get()) : clone.path.clone().extend(r);
+ //clone.sack = null == clone.sack ? null : clone.sideEffects.getSackSplitOperator().orElse(UnaryOperator.identity()).apply(clone.sack);
+ return clone;
+
+ }
+
+ @Override
+ public int hashCode() {
+ return super.hashCode() + this.path.hashCode();
+ }
+
+ @Override
+ public boolean equals(final Object object) {
+ return (object instanceof B_O_P_S_SE_SL_Traverser)
+ && ((B_O_P_S_SE_SL_Traverser) object).path().equals(this.path) // TODO: path equality
+ && ((B_O_P_S_SE_SL_Traverser) object).get().equals(this.t)
+ && ((B_O_P_S_SE_SL_Traverser) object).getStepId().equals(this.getStepId())
+ && ((B_O_P_S_SE_SL_Traverser) object).loops() == this.loops()
+ && (null == this.sack);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_TraverserGenerator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_TraverserGenerator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_TraverserGenerator.java
new file mode 100644
index 0000000..9915740
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_TraverserGenerator.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.traverser;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.TraverserGenerator;
+
+import java.util.EnumSet;
+import java.util.Set;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class B_O_P_S_SE_SL_TraverserGenerator implements TraverserGenerator {
+
+ private static final B_O_P_S_SE_SL_TraverserGenerator INSTANCE = new B_O_P_S_SE_SL_TraverserGenerator();
+ private static final Set<TraverserRequirement> REQUIREMENTS = EnumSet.of(
+ TraverserRequirement.OBJECT,
+ TraverserRequirement.BULK,
+ TraverserRequirement.SINGLE_LOOP,
+ TraverserRequirement.PATH,
+ TraverserRequirement.SACK,
+ TraverserRequirement.SIDE_EFFECTS);
+
+ private B_O_P_S_SE_SL_TraverserGenerator() {
+ }
+
+ @Override
+ public <S> Traverser.Admin<S> generate(final S start, final Step<S, ?> startStep, final long initialBulk) {
+ return new B_O_P_S_SE_SL_Traverser<>(start, startStep, initialBulk);
+ }
+
+ @Override
+ public Set<TraverserRequirement> getProvidedRequirements() {
+ return REQUIREMENTS;
+ }
+
+ public static B_O_P_S_SE_SL_TraverserGenerator instance() {
+ return INSTANCE;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_Traverser.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_Traverser.java
new file mode 100644
index 0000000..f916a75
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_Traverser.java
@@ -0,0 +1,119 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.traverser;
+
+
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+
+import java.util.function.UnaryOperator;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class B_O_S_SE_SL_Traverser<T> extends B_O_Traverser<T> {
+
+ protected Object sack = null;
+ protected short loops = 0; // an optimization hack to use a short internally to save bits :)
+ protected transient TraversalSideEffects sideEffects;
+
+ protected B_O_S_SE_SL_Traverser() {
+ }
+
+ public B_O_S_SE_SL_Traverser(final T t, final Step<T, ?> step, final long initialBulk) {
+ super(t, initialBulk);
+ this.sideEffects = step.getTraversal().getSideEffects();
+ this.sideEffects.getSackInitialValue().ifPresent(supplier -> this.sack = supplier.get());
+ }
+
+ /////////////////
+
+ @Override
+ public <S> S sack() {
+ return (S) this.sack;
+ }
+
+ @Override
+ public <S> void sack(final S object) {
+ this.sack = object;
+ }
+
+ /////////////////
+
+ @Override
+ public int loops() {
+ return this.loops;
+ }
+
+ @Override
+ public void incrLoops(final String stepLabel) {
+ this.loops++;
+ }
+
+ @Override
+ public void resetLoops() {
+ this.loops = 0;
+ }
+
+ /////////////////
+
+ @Override
+ public TraversalSideEffects getSideEffects() {
+ return this.sideEffects;
+ }
+
+
+ @Override
+ public void setSideEffects(final TraversalSideEffects sideEffects) {
+ this.sideEffects = sideEffects;
+ }
+
+ /////////////////
+
+ @Override
+ public <R> Traverser.Admin<R> split(final R r, final Step<T, R> step) {
+ final B_O_S_SE_SL_Traverser<R> clone = (B_O_S_SE_SL_Traverser<R>) super.split(r,step);
+ clone.sack = null == clone.sack ? null : clone.sideEffects.getSackSplitOperator().orElse(UnaryOperator.identity()).apply(clone.sack);
+ return clone;
+ }
+
+ @Override
+ public Traverser.Admin<T> split() {
+ final B_O_S_SE_SL_Traverser<T> clone = (B_O_S_SE_SL_Traverser<T>) super.split();
+ clone.sack = null == clone.sack ? null : clone.sideEffects.getSackSplitOperator().orElse(UnaryOperator.identity()).apply(clone.sack);
+ return clone;
+ }
+
+ /////////////////
+
+ @Override
+ public int hashCode() {
+ return this.t.hashCode() + this.future.hashCode() + this.loops;
+ }
+
+ @Override
+ public boolean equals(final Object object) {
+ return object instanceof B_O_S_SE_SL_Traverser
+ && ((B_O_S_SE_SL_Traverser) object).get().equals(this.t)
+ && ((B_O_S_SE_SL_Traverser) object).getStepId().equals(this.getStepId())
+ && ((B_O_S_SE_SL_Traverser) object).loops() == this.loops()
+ && (null == this.sack);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_TraverserGenerator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_TraverserGenerator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_TraverserGenerator.java
new file mode 100644
index 0000000..e70eebf
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_TraverserGenerator.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.traverser;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.TraverserGenerator;
+
+import java.util.EnumSet;
+import java.util.Set;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class B_O_S_SE_SL_TraverserGenerator implements TraverserGenerator {
+
+ private static final B_O_S_SE_SL_TraverserGenerator INSTANCE = new B_O_S_SE_SL_TraverserGenerator();
+
+ private static final Set<TraverserRequirement> REQUIREMENTS = EnumSet.of(
+ TraverserRequirement.OBJECT,
+ TraverserRequirement.BULK,
+ TraverserRequirement.SINGLE_LOOP,
+ TraverserRequirement.SACK,
+ TraverserRequirement.SIDE_EFFECTS);
+
+
+ private B_O_S_SE_SL_TraverserGenerator() {
+ }
+
+ @Override
+ public <S> Traverser.Admin<S> generate(final S start, final Step<S, ?> startStep, final long initialBulk) {
+ return new B_O_S_SE_SL_Traverser<>(start, startStep, initialBulk);
+ }
+
+ @Override
+ public Set<TraverserRequirement> getProvidedRequirements() {
+ return REQUIREMENTS;
+ }
+
+ public static B_O_S_SE_SL_TraverserGenerator instance() {
+ return INSTANCE;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/TraverserRequirement.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/TraverserRequirement.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/TraverserRequirement.java
index 00b7d9b..790dedf 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/TraverserRequirement.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/TraverserRequirement.java
@@ -32,7 +32,6 @@ public enum TraverserRequirement {
SINGLE_LOOP,
NESTED_LOOP,
PATH,
- PATH_ACCESS,
SACK,
SIDE_EFFECTS,
// NESTED_TRAVERSALS
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/AbstractPathTraverser.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/AbstractPathTraverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/AbstractPathTraverser.java
deleted file mode 100644
index 060e912..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/AbstractPathTraverser.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.process.traversal.traverser.util;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Path;
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.util.Attachable;
-import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
-
-import java.util.Optional;
-import java.util.function.UnaryOperator;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public abstract class AbstractPathTraverser<T> implements Traverser<T>, Traverser.Admin<T> {
-
- protected T t;
- protected Object sack = null;
- protected String future = HALT;
- protected short loops = 0; // an optimization hack to use a short internally to save bits :)
- protected transient TraversalSideEffects sideEffects;
- protected long bulk = 1l;
- protected Path path;
-
- protected AbstractPathTraverser() {
-
- }
-
- public AbstractPathTraverser(final T t, final Step<T, ?> step) {
- this.t = t;
- this.sideEffects = step.getTraversal().getSideEffects();
- this.sideEffects.getSackInitialValue().ifPresent(supplier -> this.sack = supplier.get());
- }
-
- /////////////////
-
- @Override
- public T get() {
- return this.t;
- }
-
- @Override
- public void set(final T t) {
- this.t = t;
- }
-
- /////////////////
-
- @Override
- public Path path() {
- return this.path;
- }
-
- /////////////////
-
- @Override
- public <S> S sack() {
- return (S) this.sack;
- }
-
- @Override
- public <S> void sack(final S object) {
- this.sack = object;
- }
-
- /////////////////
-
- @Override
- public void setBulk(final long count) {
- this.bulk = count;
- }
-
- @Override
- public long bulk() {
- return this.bulk;
- }
-
- /////////////////
-
- @Override
- public int loops() {
- return this.loops;
- }
-
- @Override
- public void incrLoops(final String stepLabel) {
- this.loops++;
- }
-
- @Override
- public void resetLoops() {
- this.loops = 0;
- }
-
- /////////////////
-
- @Override
- public String getStepId() {
- return this.future;
- }
-
- @Override
- public void setStepId(final String stepId) {
- this.future = stepId;
- }
-
- /////////////////
-
- @Override
- public TraversalSideEffects getSideEffects() {
- return this.sideEffects;
- }
-
-
- @Override
- public void setSideEffects(final TraversalSideEffects sideEffects) {
- this.sideEffects = sideEffects;
- }
-
- /////////////////
-
- @Override
- public Traverser.Admin<T> detach() {
- this.t = DetachedFactory.detach(this.t, false);
- this.path = DetachedFactory.detach(this.path, true);
- return this;
- }
-
- @Override
- public T attach(final Vertex hostVertex, final Method method) {
- // you do not want to attach a path because it will reference graph objects not at the current vertex
- if (this.t instanceof Attachable && !(((Attachable) this.t).get() instanceof Path))
- this.t = ((Attachable<T>) this.t).attach(hostVertex, method);
- return this.t;
- }
-
- /////////////////
-
- @Override
- public void merge(final Traverser.Admin<?> other) {
- this.bulk = this.bulk + other.bulk();
- }
-
- @Override
- public <R> Traverser.Admin<R> split(final R r, final Step<T, R> step) {
- try {
- final AbstractPathTraverser<R> clone = (AbstractPathTraverser<R>) super.clone();
- clone.t = r;
- final Optional<String> stepLabel = step.getLabel();
- clone.path = stepLabel.isPresent() ? clone.path.clone().extend(r, stepLabel.get()) : clone.path.clone().extend(r);
- clone.sack = null == clone.sack ? null : clone.sideEffects.getSackSplitOperator().orElse(UnaryOperator.identity()).apply(clone.sack);
- return clone;
- } catch (final CloneNotSupportedException e) {
- throw new IllegalStateException(e.getMessage(), e);
- }
- }
-
- @Override
- public Traverser.Admin<T> split() {
- try {
- final AbstractPathTraverser<T> clone = (AbstractPathTraverser<T>) super.clone();
- clone.sack = null == clone.sack ? null : clone.sideEffects.getSackSplitOperator().orElse(UnaryOperator.identity()).apply(clone.sack);
- return clone;
- } catch (final CloneNotSupportedException e) {
- throw new IllegalStateException(e.getMessage(), e);
- }
- }
-
- /////////////////
-
- @Override
- @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
- public AbstractPathTraverser<T> clone() {
- try {
- return (AbstractPathTraverser<T>) super.clone();
- } catch (final CloneNotSupportedException e) {
- throw new IllegalStateException(e.getMessage(), e);
- }
- }
-
- @Override
- public int hashCode() {
- return this.t.hashCode() + this.future.hashCode() + this.loops;
- }
-
- @Override
- public String toString() {
- return this.t.toString();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/DefaultTraverserGeneratorFactory.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/DefaultTraverserGeneratorFactory.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/DefaultTraverserGeneratorFactory.java
index 0f79d992..f473cbb 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/DefaultTraverserGeneratorFactory.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/DefaultTraverserGeneratorFactory.java
@@ -20,8 +20,8 @@ package org.apache.tinkerpop.gremlin.process.traversal.traverser.util;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.TraverserGenerator;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_PA_S_SE_SL_TraverserGenerator;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_P_PA_S_SE_SL_TraverserGenerator;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_S_SE_SL_TraverserGenerator;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_P_S_SE_SL_TraverserGenerator;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_TraverserGenerator;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.O_TraverserGenerator;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserGeneratorFactory;
@@ -53,11 +53,11 @@ public class DefaultTraverserGeneratorFactory implements TraverserGeneratorFacto
if (B_O_TraverserGenerator.instance().getProvidedRequirements().containsAll(requirements))
return B_O_TraverserGenerator.instance();
- if (B_O_PA_S_SE_SL_TraverserGenerator.instance().getProvidedRequirements().containsAll(requirements))
- return B_O_PA_S_SE_SL_TraverserGenerator.instance();
+ if (B_O_S_SE_SL_TraverserGenerator.instance().getProvidedRequirements().containsAll(requirements))
+ return B_O_S_SE_SL_TraverserGenerator.instance();
- if (B_O_P_PA_S_SE_SL_TraverserGenerator.instance().getProvidedRequirements().containsAll(requirements))
- return B_O_P_PA_S_SE_SL_TraverserGenerator.instance();
+ if (B_O_P_S_SE_SL_TraverserGenerator.instance().getProvidedRequirements().containsAll(requirements))
+ return B_O_P_S_SE_SL_TraverserGenerator.instance();
throw new IllegalStateException("The provided traverser generator factory does not support the requirements of the traversal: " + this.getClass().getCanonicalName() + requirements);
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
index e0a18cd..ab0b1f6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
@@ -23,8 +23,8 @@ import org.apache.tinkerpop.gremlin.process.computer.util.MapMemory;
import org.apache.tinkerpop.gremlin.process.traversal.Path;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_PA_S_SE_SL_Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_P_PA_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_P_S_SE_SL_Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.O_Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
@@ -209,8 +209,8 @@ public final class GryoMapper implements Mapper<Kryo> {
//add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Traverser.Admin.class, gryo -> new GraphSerializer.TraverserSerializer(), 55));
add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(B_O_Traverser.class, null, 75));
add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(O_Traverser.class, null, 76));
- add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(B_O_P_PA_S_SE_SL_Traverser.class, null, 77));
- add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(B_O_PA_S_SE_SL_Traverser.class, null, 78));
+ add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(B_O_P_S_SE_SL_Traverser.class, null, 77));
+ add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(B_O_S_SE_SL_Traverser.class, null, 78));
add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(TraverserSet.class, null, 58));
add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Tree.class, null, 61));
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMapTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMapTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMapTest.groovy
index 8bde4a6..4726511 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMapTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMapTest.groovy
@@ -51,12 +51,12 @@ public abstract class GroovyMapTest {
@Override
public Traversal<Vertex, String> get_g_V_asXaX_out_mapXa_nameX() {
- g.V.as('a').out.map { v -> v.path('a').name };
+ g.V.withPath.as('a').out.map { v -> v.path('a').name };
}
@Override
public Traversal<Vertex, String> get_g_V_asXaX_out_out_mapXa_name_it_nameX() {
- g.V().as('a').out.out().map { v -> v.path('a').name + v.name };
+ g.V().withPath().as('a').out.out().map { v -> v.path('a').name + v.name };
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/GraphProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/GraphProvider.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/GraphProvider.java
index 9e15f70..a2d67c9 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/GraphProvider.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/GraphProvider.java
@@ -27,8 +27,8 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_PA_S_SE_SL_Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_P_PA_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_P_S_SE_SL_Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.O_Traverser;
import org.apache.tinkerpop.gremlin.structure.Edge;
@@ -37,7 +37,6 @@ import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Property;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.util.Attachable;
import org.apache.tinkerpop.gremlin.structure.util.GraphFactory;
import java.util.Collections;
@@ -71,8 +70,8 @@ public interface GraphProvider {
add(__.class);
add(DefaultGraphTraversal.class);
add(GraphTraversalSource.class);
- add(B_O_PA_S_SE_SL_Traverser.class);
- add(B_O_P_PA_S_SE_SL_Traverser.class);
+ add(B_O_S_SE_SL_Traverser.class);
+ add(B_O_P_S_SE_SL_Traverser.class);
add(B_O_Traverser.class);
add(O_Traverser.class);
}};
@@ -230,9 +229,9 @@ public interface GraphProvider {
* <li>{@link Graph}</li>
* <li>{@link org.apache.tinkerpop.gremlin.structure.Graph.Variables}</li>
* <li>{@link GraphTraversal}</li>
- * <li>{@link B_O_P_PA_S_SE_SL_Traverser}</li>
+ * <li>{@link B_O_P_S_SE_SL_Traverser}</li>
* <li>{@link Property}</li>
- * <li>{@link B_O_PA_S_SE_SL_Traverser}</li>
+ * <li>{@link B_O_S_SE_SL_Traverser}</li>
* <li>{@link Traversal}</li>
* <li>{@link Traverser}</li>
* <li>{@link Vertex}</li>
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapTest.java
index 5061b55..20569eb 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapTest.java
@@ -141,12 +141,12 @@ public abstract class MapTest extends AbstractGremlinProcessTest {
@Override
public Traversal<Vertex, String> get_g_V_asXaX_out_mapXa_nameX() {
- return g.V().as("a").out().<String>map(v -> v.<Vertex>path("a").value("name"));
+ return g.V().withPath().as("a").out().<String>map(v -> v.<Vertex>path("a").value("name"));
}
@Override
public Traversal<Vertex, String> get_g_V_asXaX_out_out_mapXa_name_it_nameX() {
- return g.V().as("a").out().out().map(v -> v.<Vertex>path("a").<String>value("name") + v.get().<String>value("name"));
+ return g.V().withPath().as("a").out().out().map(v -> v.<Vertex>path("a").<String>value("name") + v.get().<String>value("name"));
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.java
index f85330f..3b5bcc5 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.java
@@ -32,7 +32,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.match.Enumerator;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.match.InnerJoinEnumerator;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.match.IteratorEnumerator;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.match.MatchStep;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_PA_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_S_SE_SL_Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.MapHelper;
import org.apache.tinkerpop.gremlin.structure.Compare;
import org.apache.tinkerpop.gremlin.structure.Vertex;
@@ -886,7 +886,7 @@ public abstract class MatchTest extends AbstractGremlinProcessTest {
private void assertBranchFactor(final double branchFactor,
final Traversal t,
final Iterator inputs) {
- Traverser start = new B_O_PA_S_SE_SL_Traverser(null, null);
+ Traverser start = new B_O_S_SE_SL_Traverser(null, null, 1l); // TODO bad? P?
MatchStep.TraversalWrapper w = new MatchStep.TraversalWrapper(t, "a", "b");
MatchStep.TraversalUpdater updater = new MatchStep.TraversalUpdater<>(w, inputs, start, "x");
while (updater.hasNext()) {