You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by tw...@apache.org on 2016/06/09 12:19:13 UTC
[4/9] incubator-tinkerpop git commit: Further work
Further work
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/4da3fe96
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/4da3fe96
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/4da3fe96
Branch: refs/heads/TINKERPOP-1254
Commit: 4da3fe962e64a6f2591478bd14998e269519fc33
Parents: 9210806
Author: Ted Wilmes <tw...@gmail.com>
Authored: Sun Apr 24 11:07:09 2016 -0500
Committer: Ted Wilmes <tw...@gmail.com>
Committed: Sun Apr 24 11:07:09 2016 -0500
----------------------------------------------------------------------
.../traversal/step/util/ImmutablePath.java | 125 ++++++-------------
.../traverser/LP_O_OB_P_S_SE_SL_Traverser.java | 3 +-
.../gremlin/process/traversal/PathTest.java | 2 +-
3 files changed, 43 insertions(+), 87 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4da3fe96/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 77829b9..f552d9e 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
@@ -91,116 +91,73 @@ public class ImmutablePath implements Path, ImmutablePathImpl, Serializable, Clo
child = this;
}
- // parents can be a mixture of ImmutablePaths and collpased
+ if(!Collections.disjoint(parent.currentLabels, labels)) {
+ ImmutablePath clonedParent = cloneImmutablePath(parent);
+ clonedParent.currentLabels.removeAll(labels);
+ parent = clonedParent;
+ }
+
+ // store the head and return it at the end of this
+ ImmutablePath head = parent;
+
+ // parents can be a mixture of ImmutablePaths and collapsed
// cloned ImmutablePaths that are a result of branching
List<Object> parents = new ArrayList<>();
ImmutablePath previous = null;
parents.add(parent);
while(!(child.previousPath instanceof TailPath)) {
- List<Set<String>> childLabels = child.labels();
- // found labels
- List<String> foundLabels = new ArrayList<>();
- for(Set<String> l : childLabels) {
- if(!Collections.disjoint(l, labels)) {
- for(String ll : labels) {
- if(l.contains(ll)) {
- foundLabels.add(ll);
- }
- }
- }
- }
- if(foundLabels.isEmpty()) {
- continue;
+ if(!Collections.disjoint(child.currentLabels, labels)) {
+// child.currentLabels.removeAll(labels);
+ } else {
+ child = (ImmutablePath)child.previousPath;
+ continue;
}
// split path
// clone child
ImmutablePath clone = cloneImmutablePath(child);
+ clone.currentLabels.removeAll(labels);
// walk back up and build parent clones or reuse
// other previously cloned paths
- for(int i = parents.size() - 1; i >= 0; i--) {
- final Object o = parents.get(i);
- if(o instanceof ImmutablePath) {
- ImmutablePath p = (ImmutablePath)o;
- final ImmutablePath clonedP = cloneImmutablePath(p);
- if (previous == null) {
- clonedP.previousPath = clone;
+ if(parents.size() > 0) {
+ boolean first = true;
+ for(int i = parents.size() - 1; i >= 0; i--) {
+ final Object o = parents.get(i);
+ if (o instanceof ImmutablePath) {
+ ImmutablePath p = (ImmutablePath) o;
+ final ImmutablePath clonedP = cloneImmutablePath(p);
+ if (previous == null) {
+ clonedP.previousPath = clone;
+ } else {
+ clonedP.previousPath = previous;
+ }
+ if(first) {
+ head = clonedP;
+ }
+ previous = clonedP;
} else {
- clonedP.previousPath = previous;
+ previous = ((ImmutablePath) o);
}
- previous = clonedP;
- } else {
- previous = ((ImmutablePath)o);
+// if(first) {
+//
+// first = false;
+// }
}
+ parents = new ArrayList<>();
+ parents.add(clone);
}
- parent = child;
+ parents.add(clone);
child = (ImmutablePath)child.previousPath;
}
- return previous;
+ return head;
}
private static ImmutablePath cloneImmutablePath(final ImmutablePath path) {
return new ImmutablePath(path.previousPath, path.currentObject, new HashSet<>(path.currentLabels));
}
-// @Override
-// public Path retract(final Set<String> labels) {
-// if(!Collections.disjoint(this.currentLabels, labels)) {
-// // clone and split
-// final ImmutablePath clonedPath = new ImmutablePath(this.previousPath,
-// this.currentObject, new LinkedHashSet<>(this.currentLabels));
-// int dropCount = 0;
-// for(final String label : labels) {
-// clonedPath.currentLabels.remove(label);
-// dropCount++;
-// }
-// if(clonedPath.currentLabels.size() == 0) {
-// // straight up drop it
-// clonedPath.currentObject = null;
-// }
-// if(dropCount == labels.size()) {
-// return clonedPath;
-// } else {
-// //keep on going down the line
-// return retract(clonedPath, labels);
-// }
-// } else {
-// List<ImmutablePath> crumbs = new ArrayList<>();
-// ImmutablePathImpl p = this;
-// while(!(p instanceof TailPath)) {
-// p = ((ImmutablePath)p).previousPath;
-// }
-// }
-// return null;
-// }
-//
-// private Path retract(final ImmutablePath parentPath, final Set<String> labels) {
-// final ImmutablePath childPath = (ImmutablePath)parentPath.previousPath;
-// if (Collections.disjoint(childPath.currentLabels, labels)) {
-// return retract((ImmutablePath)childPath.previousPath, labels);
-// } else {
-// // clone and split
-// final ImmutablePath clonedPath = new ImmutablePath(childPath,
-// this.currentObject, new LinkedHashSet<>(this.currentLabels));
-// int dropCount = 0;
-// for(final String label : labels) {
-// clonedPath.currentLabels.remove(label);
-// dropCount++;
-// }
-// if(clonedPath.currentLabels.size() == 0) {
-// // straight up drop it
-// clonedPath.currentObject = null;
-// }
-// }
-// return null;
-// }
-
-// public ImmutablePath getPrevious() {
-// return (ImmutablePath)this.previousPath;
-// }
-
@Override
public <A> A get(final int index) {
return (this.size() - 1) == index ? (A) this.currentObject : this.previousPath.get(index);
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4da3fe96/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_O_OB_P_S_SE_SL_Traverser.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_O_OB_P_S_SE_SL_Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_O_OB_P_S_SE_SL_Traverser.java
index 1345384..81db4b5 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_O_OB_P_S_SE_SL_Traverser.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_O_OB_P_S_SE_SL_Traverser.java
@@ -83,8 +83,7 @@ public class LP_O_OB_P_S_SE_SL_Traverser<T> extends O_OB_S_SE_SL_Traverser<T> {
@Override
public void dropLabels(final Set<String> labels) {
if (!labels.isEmpty()) {
- // todo figure out how to drop labels
- this.path.labels();
+ this.path.retract(labels);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4da3fe96/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 5f5dce5..cdb60d5 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
@@ -43,7 +43,7 @@ public class PathTest {
// private final static List<Supplier<Path>> PATH_SUPPLIERS =
// Arrays.asList(MutablePath::make, ImmutablePath::make, DetachedPath::make, ReferencePath::make);
private final static List<Supplier<Path>> PATH_SUPPLIERS =
- Arrays.asList(MutablePath::make);//, ImmutablePath::make);
+ Arrays.asList(ImmutablePath::make);
@Test
public void shouldHaveStandardSemanticsImplementedCorrectly() {