Github user krlohnes commented on a diff in the pull request:

    https://github.com/apache/tinkerpop/pull/838#discussion_r191572290
  
    --- Diff: 
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatStep.java
 ---
    @@ -273,11 +300,40 @@ public RepeatEndStep(final Traversal.Admin traversal) 
{
                 super(traversal);
             }
     
    +        final LinkedList<Traverser.Admin<S>> stashedStarts = new 
LinkedList<>();
    +
    +        private Traverser.Admin<S> nextStart(RepeatStep<S> repeatStep, 
boolean useDfs) {
    +            if (!useDfs) {
    +                return this.starts.next();
    +            } else {
    +                if (this.starts.hasNext()) {
    +                    return this.starts.next();
    +                } else {
    +                    return this.stashedStarts.pop();
    +                }
    +            }
    +        }
    +
    +        @Override
    +        public boolean hasNext() {
    +            return super.hasNext() || !this.stashedStarts.isEmpty();
    +        }
    +
             @Override
             protected Iterator<Traverser.Admin<S>> standardAlgorithm() throws 
NoSuchElementException {
                 final RepeatStep<S> repeatStep = (RepeatStep<S>) 
this.getTraversal().getParent();
    +            final List<Step> steps = repeatStep.repeatTraversal.getSteps();
    +            final Step stepBeforeRepeatEndStep = steps.get(steps.size() - 
2);
    +            final boolean useDfs = !(stepBeforeRepeatEndStep instanceof 
Barrier);
                 while (true) {
    -                final Traverser.Admin<S> start = this.starts.next();
    +                final Traverser.Admin<S> start = nextStart(repeatStep, 
useDfs);
    +                if (useDfs) {
    +                    final List<Traverser.Admin<S>> localStarts = new 
ArrayList<>();
    --- End diff --
    
    No, this could be done with an index and writing directly to stashed 
starts, definitely. will fix.


---

Reply via email to