added @pietermartin's direct reference to Step.getLabels() optimization to ImmutablePath. Added JavaDoc to Traverser for the dropLabels()/keepLabels() method. Fixed a spelling mistake in AbstractTraverser.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/deaf38a7 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/deaf38a7 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/deaf38a7 Branch: refs/heads/TINKERPOP-1490 Commit: deaf38a7ed35f3236614d833eeb0eac2a25334fc Parents: 3896a98 Author: Marko A. Rodriguez <okramma...@gmail.com> Authored: Tue Nov 1 08:27:08 2016 -0600 Committer: Marko A. Rodriguez <okramma...@gmail.com> Committed: Tue Nov 1 08:27:08 2016 -0600 ---------------------------------------------------------------------- .../gremlin/process/traversal/Traverser.java | 16 ++++++++++++++++ .../traversal/step/util/ImmutablePath.java | 18 +++++++++++------- .../traverser/util/AbstractTraverser.java | 2 +- .../structure/util/detached/DetachedPath.java | 8 +++----- 4 files changed, 31 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/deaf38a7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traverser.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traverser.java index 0c37a34..93ebe7d 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traverser.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traverser.java @@ -183,10 +183,26 @@ public interface Traverser<T> extends Serializable, Comparable<Traverser<T>>, Cl public void addLabels(final Set<String> labels); + /** + * Drop all path information not associated with specified labels. + * This is an optimization method that allows a traverser to save memory and increase the likelihood of bulking. + * + * @param labels the labels to keep path information for. + */ public void keepLabels(final Set<String> labels); + /** + * Drop all path information associated with specified labels. + * This is an optimization method that allows a traverser to save memory and increase the likelihood of bulking. + * + * @param labels the labels to drop path information for. + */ public void dropLabels(final Set<String> labels); + /** + * Drop the path of the traverser. + * This is an optimization method that allows a traverser to save memory and increase the likelihood of bulking. + */ public void dropPath(); /** http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/deaf38a7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java index 8afa91c..6b67c45 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java @@ -34,11 +34,11 @@ import java.util.Set; */ public class ImmutablePath implements Path, Serializable, Cloneable { - private static final ImmutablePath TAIL_PATH = new ImmutablePath(null, null, Collections.emptySet()); + private static final ImmutablePath TAIL_PATH = new ImmutablePath(null, null, null); private ImmutablePath previousPath; private Object currentObject; - private Set<String> currentLabels = new LinkedHashSet<>(); + private Set<String> currentLabels; public static Path make() { return TAIL_PATH; @@ -53,7 +53,7 @@ public class ImmutablePath implements Path, Serializable, Cloneable { private ImmutablePath(final ImmutablePath previousPath, final Object currentObject, final Set<String> currentLabels) { this.previousPath = previousPath; this.currentObject = currentObject; - this.currentLabels.addAll(currentLabels); + this.currentLabels = currentLabels; } private final boolean isTail() { @@ -78,10 +78,14 @@ public class ImmutablePath implements Path, Serializable, Cloneable { @Override public Path extend(final Set<String> labels) { - final Set<String> newLabels = new LinkedHashSet<>(); - newLabels.addAll(this.currentLabels); - newLabels.addAll(labels); - return new ImmutablePath(this.previousPath, this.currentObject, newLabels); + if (labels.isEmpty()) + return this; + else { + final Set<String> newLabels = new LinkedHashSet<>(); + newLabels.addAll(this.currentLabels); + newLabels.addAll(labels); + return new ImmutablePath(this.previousPath, this.currentObject, newLabels); + } } @Override http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/deaf38a7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/AbstractTraverser.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/AbstractTraverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/AbstractTraverser.java index f23ac6e..50a206b 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/AbstractTraverser.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/AbstractTraverser.java @@ -83,7 +83,7 @@ public abstract class AbstractTraverser<T> implements Traverser<T>, Traverser.Ad } @Override - public void dropLabels(final Set<String> labesl) { + public void dropLabels(final Set<String> labels) { } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/deaf38a7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java index 10f9dfb..3cf946c 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java @@ -24,6 +24,7 @@ import org.apache.tinkerpop.gremlin.structure.Element; import org.apache.tinkerpop.gremlin.structure.Property; import org.apache.tinkerpop.gremlin.structure.util.Attachable; +import java.util.LinkedHashSet; import java.util.function.Function; /** @@ -43,20 +44,17 @@ public class DetachedPath extends MutablePath implements Attachable<Path> { path.forEach((object, labels) -> { if (object instanceof DetachedElement || object instanceof DetachedProperty || object instanceof DetachedPath) { this.objects.add(object); - this.labels.add(labels); } else if (object instanceof Element) { this.objects.add(DetachedFactory.detach((Element) object, withProperties)); - this.labels.add(labels); } else if (object instanceof Property) { this.objects.add(DetachedFactory.detach((Property) object)); - this.labels.add(labels); } else if (object instanceof Path) { this.objects.add(DetachedFactory.detach((Path) object, withProperties)); - this.labels.add(labels); } else { this.objects.add(object); - this.labels.add(labels); } + //Make a copy of the labels as its an UnmodifiableSet which can not be serialized. + this.labels.add(new LinkedHashSet<>(labels)); }); }