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/07/13 04:20:24 UTC
[38/50] tinkerpop git commit: added optimized versions of labels()
and objects() for ImmutablePath and added more test cases to PathTest to
ensure the path retraction is sound. It is. CTR.
added optimized versions of labels() and objects() for ImmutablePath and added more test cases to PathTest to ensure the path retraction is sound. It is. CTR.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/8cd4cfa5
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/8cd4cfa5
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/8cd4cfa5
Branch: refs/heads/TINKERPOP-1278
Commit: 8cd4cfa528c972fd1ae8bc267c389810e176a5ee
Parents: 3d1168f
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon Jul 11 16:55:40 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon Jul 11 16:55:40 2016 -0600
----------------------------------------------------------------------
.../traversal/step/util/ImmutablePath.java | 38 +++++++++++++++-----
.../gremlin/process/traversal/PathTest.java | 14 +++++++-
2 files changed, 42 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8cd4cfa5/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 feddc59..729b4f3 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
@@ -156,23 +156,43 @@ public class ImmutablePath implements Path, ImmutablePathImpl, Serializable, Clo
@Override
public boolean hasLabel(final String label) {
- return this.currentLabels.contains(label) || this.previousPath.hasLabel(label);
+ ImmutablePath currentPathSection = this;
+ while (true) {
+ if (currentPathSection.currentLabels.contains(label))
+ return true;
+ if (currentPathSection.previousPath instanceof TailPath)
+ return false;
+ else
+ currentPathSection = (ImmutablePath) currentPathSection.previousPath;
+ }
}
@Override
public List<Object> objects() {
- final List<Object> objectPath = new ArrayList<>(); // TODO: optimize
- objectPath.addAll(this.previousPath.objects());
- objectPath.add(this.currentObject);
- return Collections.unmodifiableList(objectPath);
+ final List<Object> objects = new ArrayList<>();
+ ImmutablePath currentPathSection = this;
+ while (true) {
+ objects.add(0, currentPathSection.currentObject);
+ if (currentPathSection.previousPath instanceof TailPath)
+ break;
+ else
+ currentPathSection = (ImmutablePath) currentPathSection.previousPath;
+ }
+ return Collections.unmodifiableList(objects);
}
@Override
public List<Set<String>> labels() {
- final List<Set<String>> labelPath = new ArrayList<>(); // TODO: optimize
- labelPath.addAll(this.previousPath.labels());
- labelPath.add(this.currentLabels);
- return Collections.unmodifiableList(labelPath);
+ final List<Set<String>> labels = new ArrayList<>();
+ ImmutablePath currentPathSection = this;
+ while (true) {
+ labels.add(0, currentPathSection.currentLabels);
+ if (currentPathSection.previousPath instanceof TailPath)
+ break;
+ else
+ currentPathSection = (ImmutablePath) currentPathSection.previousPath;
+ }
+ return Collections.unmodifiableList(labels);
}
@Override
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8cd4cfa5/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/PathTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/PathTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/PathTest.java
index 21f1ec8..1b37502 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/PathTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/PathTest.java
@@ -76,17 +76,29 @@ public class PathTest {
assertEquals(Integer.valueOf(2), path.get(1));
assertEquals(Integer.valueOf(3), path.get(2));
assertEquals(Integer.valueOf(3), path.get(3));
- Path retractedPath = path.retract(Collections.singleton("f"));
+ Path retractedPath = path.retract(Collections.singleton("f")).clone();
assertFalse(path.hasLabel("f"));
+ assertEquals(4, path.size());
assertEquals(retractedPath, path);
path = path.retract(Collections.singleton("b"));
assertFalse(path.hasLabel("b"));
+ assertEquals(3, path.size());
+ assertEquals(retractedPath.retract(Collections.singleton("b")), path);
path = path.retract(Collections.singleton("a"));
+ assertEquals(2, path.size());
assertFalse(path.hasLabel("a"));
assertTrue(path.hasLabel("d"));
path = path.retract(new HashSet<>(Arrays.asList("c", "d")));
assertFalse(path.hasLabel("c"));
assertFalse(path.hasLabel("d"));
+ assertTrue(path.hasLabel("e"));
+ assertEquals(1, path.size());
+ path = path.retract(Collections.singleton("e"));
+ assertFalse(path.hasLabel("c"));
+ assertFalse(path.hasLabel("d"));
+ assertFalse(path.hasLabel("e"));
+ assertNotEquals(retractedPath, path);
+ assertEquals(0, path.size());
});
}