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 2017/01/06 00:00:44 UTC
[16/20] tinkerpop git commit: more minor optimizations to
DedupGlobalStep.
more minor optimizations to DedupGlobalStep.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/ba390748
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/ba390748
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/ba390748
Branch: refs/heads/TINKERPOP-1585
Commit: ba390748443c603009b5a59b6dc64882a4819770
Parents: 64c8065
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Jan 5 10:34:23 2017 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Jan 5 17:00:17 2017 -0700
----------------------------------------------------------------------
.../traversal/step/filter/DedupGlobalStep.java | 71 +++++++++++---------
1 file changed, 39 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ba390748/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java
index e3d36b1..a4c1b6a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java
@@ -58,7 +58,7 @@ public final class DedupGlobalStep<S> extends FilterStep<S> implements Traversal
private Set<String> keepLabels;
private boolean executingAtMaster = false;
private boolean barrierAdded = false;
- private Map<Object, Traverser.Admin<S>> masterBarrier;
+ private Map<Object, Traverser.Admin<S>> barrier;
public DedupGlobalStep(final Traversal.Admin traversal, final String... dedupLabels) {
super(traversal);
@@ -91,11 +91,14 @@ public final class DedupGlobalStep<S> extends FilterStep<S> implements Traversal
@Override
protected Traverser.Admin<S> processNextStart() {
- if (null != this.masterBarrier) {
- this.starts.add(this.masterBarrier.values().iterator());
+ if (null != this.barrier) {
+ for (final Map.Entry<Object, Traverser.Admin<S>> entry : this.barrier.entrySet()) {
+ if (this.duplicateSet.add(entry.getKey()))
+ this.starts.add(entry.getValue());
+ }
this.barrierAdded = true;
+ this.barrier = null;
}
- this.masterBarrier = null;
return PathProcessor.processTraverserPathLabels(super.processNextStart(), this.keepLabels);
}
@@ -139,6 +142,7 @@ public final class DedupGlobalStep<S> extends FilterStep<S> implements Traversal
super.reset();
this.duplicateSet.clear();
this.barrierAdded = false;
+ this.barrier = null;
}
@Override
@@ -170,45 +174,48 @@ public final class DedupGlobalStep<S> extends FilterStep<S> implements Traversal
@Override
public boolean hasNextBarrier() {
- return this.starts.hasNext();
+ return null != this.barrier || this.starts.hasNext();
}
@Override
public Map<Object, Traverser.Admin<S>> nextBarrier() throws NoSuchElementException {
- final Map<Object, Traverser.Admin<S>> map = new HashMap<>();
- while (this.starts.hasNext()) {
- final Traverser.Admin<S> traverser = this.starts.next();
- final Object object;
- if (null != this.dedupLabels) {
- object = new ArrayList<>(this.dedupLabels.size());
- for (final String label : this.dedupLabels) {
- ((List) object).add(TraversalUtil.applyNullable((S) this.getScopeValue(Pop.last, label, traverser), this.dedupTraversal));
+ if (null != this.barrier) {
+ final Map<Object, Traverser.Admin<S>> tempBarrier = this.barrier;
+ this.barrier = null;
+ this.barrierAdded = false;
+ return tempBarrier;
+ } else {
+ final Map<Object, Traverser.Admin<S>> map = new HashMap<>();
+ while (this.starts.hasNext()) {
+ final Traverser.Admin<S> traverser = this.starts.next();
+ final Object object;
+ if (null != this.dedupLabels) {
+ object = new ArrayList<>(this.dedupLabels.size());
+ for (final String label : this.dedupLabels) {
+ ((List) object).add(TraversalUtil.applyNullable((S) this.getScopeValue(Pop.last, label, traverser), this.dedupTraversal));
+ }
+ } else {
+ object = TraversalUtil.applyNullable(traverser, this.dedupTraversal);
+ }
+ if (!map.containsKey(object)) {
+ traverser.setBulk(1L);
+ traverser.set(DetachedFactory.detach(traverser.get(), true));
+ map.put(object, traverser);
}
- } else {
- object = TraversalUtil.applyNullable(traverser, this.dedupTraversal);
- }
- if (!map.containsKey(object)) {
- traverser.setBulk(1l);
- traverser.set(DetachedFactory.detach(traverser.get(), true));
- map.put(object, traverser);
}
+ if (map.isEmpty())
+ throw FastNoSuchElementException.instance();
+ else
+ return map;
}
- if (map.isEmpty())
- throw FastNoSuchElementException.instance();
- else
- return map;
-
}
@Override
public void addBarrier(final Map<Object, Traverser.Admin<S>> barrier) {
- if (null == this.masterBarrier)
- this.masterBarrier = new HashMap<>(barrier);
- else {
- for (Map.Entry<Object, Traverser.Admin<S>> entry : barrier.entrySet()) {
- this.masterBarrier.putIfAbsent(entry.getKey(), entry.getValue());
- }
- }
+ if (null == this.barrier)
+ this.barrier = new HashMap<>(barrier);
+ else
+ this.barrier.putAll(barrier);
}
@Override