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 2016/01/14 16:00:04 UTC

[1/3] incubator-tinkerpop git commit: Greatly simplified/sped-up AbstractLambdaTraversal. It doesn't need graph, strategy, parent, etc. references and all the complexities of cloning that that stuff entails. Next, it now has a consistent equals()/hashCod

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master 51c4326d4 -> 6c85a45f6


Greatly simplified/sped-up AbstractLambdaTraversal. It doesn't need graph, strategy, parent, etc. references and all the complexities of cloning that that stuff entails. Next, it now has a consistent equals()/hashCode() model. Moreover, that hashCode()/equals() model that was only in DefaultGraphTraversal has now been moved up to DefaultTraversal where it should have been to begin with. Added proper TraverserRequirements to AbstractLambdaTraversal (hasnt bit us yet, but it could).


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/98512411
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/98512411
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/98512411

Branch: refs/heads/master
Commit: 9851241104eb738cd2646e50cdc9f5a424775ac5
Parents: 77af1a0
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Jan 13 08:23:44 2016 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Jan 13 08:23:44 2016 -0700

----------------------------------------------------------------------
 .../dsl/graph/DefaultGraphTraversal.java        | 14 --------
 .../traversal/dsl/graph/GraphTraversal.java     |  2 +-
 .../lambda/AbstractLambdaTraversal.java         | 38 +++++++++++++-------
 .../traversal/lambda/ConstantTraversal.java     |  1 -
 .../traversal/lambda/IdentityTraversal.java     | 15 +++-----
 .../process/traversal/lambda/LoopTraversal.java |  2 +-
 .../process/traversal/lambda/TrueTraversal.java | 19 ++++++----
 .../process/traversal/step/util/EmptyStep.java  |  2 +-
 .../traversal/util/DefaultTraversal.java        | 17 +++++++--
 .../process/traversal/util/EmptyTraversal.java  |  2 +-
 .../process/traversal/util/TraversalRing.java   |  2 +-
 11 files changed, 61 insertions(+), 53 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/98512411/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/DefaultGraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/DefaultGraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/DefaultGraphTraversal.java
index e7ac96e..50b9287 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/DefaultGraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/DefaultGraphTraversal.java
@@ -46,20 +46,6 @@ public class DefaultGraphTraversal<S, E> extends DefaultTraversal<S, E> implemen
     }
 
     @Override
-    public boolean equals(final Object other) {
-        return other != null && other.getClass().equals(this.getClass()) && this.asAdmin().equals(((DefaultGraphTraversal) other).asAdmin());
-    }
-
-    @Override
-    public int hashCode() {
-        int result = this.getClass().hashCode();
-        for (final Step step : this.asAdmin().getSteps()) {
-            result ^= step.hashCode();
-        }
-        return result;
-    }
-
-    @Override
     public DefaultGraphTraversal<S, E> clone() {
         return (DefaultGraphTraversal<S, E>) super.clone();
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/98512411/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index 712c893..488298f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -1120,7 +1120,7 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
     }
 
     public default GraphTraversal<S, E> emit() {
-        return this.emit(new TrueTraversal<>());
+        return this.emit(TrueTraversal.instance());
     }
 
     public default GraphTraversal<S, E> until(final Traversal<?, ?> untilTraversal) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/98512411/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java
index 3c95da6..2f27372 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java
@@ -37,15 +37,14 @@ import org.apache.tinkerpop.gremlin.structure.Graph;
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
+import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
 public abstract class AbstractLambdaTraversal<S, E> implements Traversal.Admin<S, E> {
 
-    private TraversalStrategies traversalStrategies = EmptyTraversalStrategies.instance();
-    private TraversalParent traversalParent = (TraversalParent) EmptyStep.instance();
-    private transient Graph graph = null;
+    private static final Set<TraverserRequirement> REQUIREMENTS = Collections.singleton(TraverserRequirement.OBJECT);
 
     public List<Step> getSteps() {
         return Collections.emptyList();
@@ -68,7 +67,7 @@ public abstract class AbstractLambdaTraversal<S, E> implements Traversal.Admin<S
 
     @Override
     public void applyStrategies() throws IllegalStateException {
-        this.traversalStrategies.applyStrategies(this);
+
     }
 
     @Override
@@ -98,30 +97,28 @@ public abstract class AbstractLambdaTraversal<S, E> implements Traversal.Admin<S
 
     @Override
     public void setStrategies(final TraversalStrategies strategies) {
-        this.traversalStrategies = strategies.clone();
+
     }
 
     @Override
     public TraversalStrategies getStrategies() {
-        return this.traversalStrategies;
+        return EmptyTraversalStrategies.instance();
     }
 
     @Override
     public void setParent(final TraversalParent step) {
-        this.traversalParent = step;
+
     }
 
     @Override
     public TraversalParent getParent() {
-        return this.traversalParent;
+        return EmptyStep.instance();
     }
 
     @Override
     public Traversal.Admin<S, E> clone() {
         try {
-            final AbstractLambdaTraversal<S, E> clone = (AbstractLambdaTraversal<S, E>) super.clone();
-            clone.traversalStrategies = this.traversalStrategies.clone();
-            return clone;
+            return (AbstractLambdaTraversal<S, E>) super.clone();
         } catch (final CloneNotSupportedException e) {
             throw new IllegalStateException(e.getMessage(), e);
         }
@@ -153,12 +150,27 @@ public abstract class AbstractLambdaTraversal<S, E> implements Traversal.Admin<S
 
     @Override
     public Optional<Graph> getGraph() {
-        return Optional.ofNullable(this.graph);
+        return Optional.empty();
     }
 
     @Override
     public void setGraph(final Graph graph) {
-        this.graph = graph;
+
+    }
+
+    @Override
+    public Set<TraverserRequirement> getTraverserRequirements() {
+        return REQUIREMENTS;
+    }
+
+    @Override
+    public int hashCode() {
+        return this.getClass().hashCode();
+    }
+
+    @Override
+    public boolean equals(final Object object) {
+        return this.getClass().equals(object.getClass()) && this.hashCode() == object.hashCode();
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/98512411/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/ConstantTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/ConstantTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/ConstantTraversal.java
index 2bd965c..91973b9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/ConstantTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/ConstantTraversal.java
@@ -39,7 +39,6 @@ public final class ConstantTraversal<S, E> extends AbstractLambdaTraversal<S, E>
         return "(" + this.end.toString() + ")";
     }
 
-
     @Override
     public int hashCode() {
         return this.getClass().hashCode() ^ this.end.hashCode();

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/98512411/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/IdentityTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/IdentityTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/IdentityTraversal.java
index 74e5caf..88496c3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/IdentityTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/IdentityTraversal.java
@@ -23,15 +23,13 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class IdentityTraversal<S, E> extends AbstractLambdaTraversal<S, E> {
-
-    private static final String IDENTITY = "identity";
+public final class IdentityTraversal<S> extends AbstractLambdaTraversal<S, S> {
 
     private S s;
 
     @Override
-    public E next() {
-        return (E) this.s;
+    public S next() {
+        return this.s;
     }
 
     @Override
@@ -41,11 +39,6 @@ public final class IdentityTraversal<S, E> extends AbstractLambdaTraversal<S, E>
 
     @Override
     public String toString() {
-        return IDENTITY;
-    }
-
-    @Override
-    public int hashCode() {
-        return this.getClass().hashCode();
+        return "identity";
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/98512411/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/LoopTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/LoopTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/LoopTraversal.java
index 8f8a151..c0c40be 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/LoopTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/LoopTraversal.java
@@ -23,7 +23,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class LoopTraversal<S, E> extends AbstractLambdaTraversal<S, E> {
+public final class LoopTraversal<S> extends AbstractLambdaTraversal<S, S> {
 
     private final long maxLoops;
     private boolean allow = false;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/98512411/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/TrueTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/TrueTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/TrueTraversal.java
index 46d3755..84c0db6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/TrueTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/TrueTraversal.java
@@ -21,11 +21,12 @@ package org.apache.tinkerpop.gremlin.process.traversal.lambda;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class TrueTraversal<S, E> extends AbstractLambdaTraversal<S, E> {
+public final class TrueTraversal<S> extends AbstractLambdaTraversal<S, S> {
+
+    private static final TrueTraversal INSTANCE = new TrueTraversal();
+
+    private TrueTraversal() {
 
-    @Override
-    public boolean hasNext() {
-        return true;
     }
 
     @Override
@@ -33,9 +34,13 @@ public final class TrueTraversal<S, E> extends AbstractLambdaTraversal<S, E> {
         return "true";
     }
 
-    @Override
-    public int hashCode() {
-        return this.getClass().hashCode();
+    public static <S> TrueTraversal<S> instance() {
+        return INSTANCE;
     }
 
+    @Override
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    public TrueTraversal<S> clone() {
+        return INSTANCE;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/98512411/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/EmptyStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/EmptyStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/EmptyStep.java
index d667749..9c6c5f0 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/EmptyStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/EmptyStep.java
@@ -37,7 +37,7 @@ public final class EmptyStep<S, E> implements Step<S, E>, TraversalParent {
 
     private static final EmptyStep INSTANCE = new EmptyStep<>();
 
-    public static <S, E> Step<S, E> instance() {
+    public static <S, E> EmptyStep<S, E> instance() {
         return INSTANCE;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/98512411/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
index bcc7aeb..43fc692 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
@@ -39,7 +39,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
-import java.util.stream.Collectors;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -54,7 +53,7 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
     protected List<Step> steps = new ArrayList<>();
     // steps will be repeatedly retrieved from this traversal so wrap them once in an immutable list that can be reused
     protected List<Step> unmodifiableSteps = Collections.unmodifiableList(steps);
-    protected TraversalParent traversalParent = (TraversalParent) EmptyStep.instance();
+    protected TraversalParent traversalParent = EmptyStep.instance();
     protected TraversalSideEffects sideEffects = new DefaultTraversalSideEffects();
     protected TraversalStrategies strategies;
     protected TraversalEngine traversalEngine = StandardTraversalEngine.instance(); // necessary for strategies that need the engine in OLAP message passing (not so bueno)
@@ -297,4 +296,18 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
         this.graph = graph;
     }
 
+    @Override
+    public boolean equals(final Object other) {
+        return other != null && other.getClass().equals(this.getClass()) && this.asAdmin().equals(((Traversal.Admin) other));
+    }
+
+    @Override
+    public int hashCode() {
+        int result = this.getClass().hashCode();
+        for (final Step step : this.asAdmin().getSteps()) {
+            result ^= step.hashCode();
+        }
+        return result;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/98512411/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java
index de789cc..f6fc97c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java
@@ -145,7 +145,7 @@ public class EmptyTraversal<S, E> implements Traversal.Admin<S, E> {
 
     @Override
     public TraversalParent getParent() {
-        return (TraversalParent) EmptyStep.instance();
+        return EmptyStep.instance();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/98512411/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java
index 5742966..841f280 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalRing.java
@@ -32,7 +32,7 @@ import java.util.List;
  */
 public final class TraversalRing<A, B> implements Serializable, Cloneable {
 
-    private IdentityTraversal<A, B> identityTraversal = new IdentityTraversal<>();
+    private IdentityTraversal identityTraversal = new IdentityTraversal<>();
     private List<Traversal.Admin<A, B>> traversals = new ArrayList<>();
     private int currentTraversal = -1;
 


[3/3] incubator-tinkerpop git commit: updated CHANGELOG.

Posted by ok...@apache.org.
updated CHANGELOG.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/6c85a45f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/6c85a45f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/6c85a45f

Branch: refs/heads/master
Commit: 6c85a45f680e0e68ed27b33756c68acd93f368c4
Parents: 7e7b83e
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Jan 14 07:59:59 2016 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Jan 14 07:59:59 2016 -0700

----------------------------------------------------------------------
 CHANGELOG.asciidoc | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/6c85a45f/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index ce72316..ddb9077 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,8 @@ image::https://raw.githubusercontent.com/apache/incubator-tinkerpop/master/docs/
 TinkerPop 3.1.1 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Reduced the complexity and execution time of all `AbstractLambdaTraversal` instances.
+* `DefaultTraversal` has a well defined `hashCode()` and `equals()`.
 * Integrated `NumberHelper` in `SackFunctions`.
 * The Spark persistence `StorageLevel` can now be set for both job graphs and `PersistedOutputRDD` data.
 * Added to the list of "invalid binding keys" allowed by Gremlin Server to cover the private fields of `T` which get exposed in the `ScriptEngine` on static imports.


[2/3] incubator-tinkerpop git commit: Merge branch 'TINKERPOP-1083'

Posted by ok...@apache.org.
Merge branch 'TINKERPOP-1083'


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/7e7b83e3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/7e7b83e3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/7e7b83e3

Branch: refs/heads/master
Commit: 7e7b83e301272dce478d1a949e9c7f5e775716b4
Parents: 51c4326 9851241
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Jan 14 07:58:39 2016 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Jan 14 07:58:39 2016 -0700

----------------------------------------------------------------------
 .../dsl/graph/DefaultGraphTraversal.java        | 14 --------
 .../traversal/dsl/graph/GraphTraversal.java     |  2 +-
 .../lambda/AbstractLambdaTraversal.java         | 38 +++++++++++++-------
 .../traversal/lambda/ConstantTraversal.java     |  1 -
 .../traversal/lambda/IdentityTraversal.java     | 15 +++-----
 .../process/traversal/lambda/LoopTraversal.java |  2 +-
 .../process/traversal/lambda/TrueTraversal.java | 19 ++++++----
 .../process/traversal/step/util/EmptyStep.java  |  2 +-
 .../traversal/util/DefaultTraversal.java        | 17 +++++++--
 .../process/traversal/util/EmptyTraversal.java  |  2 +-
 .../process/traversal/util/TraversalRing.java   |  2 +-
 11 files changed, 61 insertions(+), 53 deletions(-)
----------------------------------------------------------------------