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() {