This is an automated email from the ASF dual-hosted git repository.
okram pushed a commit to branch tp4
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
The following commit(s) were added to refs/heads/tp4 by this push:
new c99ff4e We no longer need Selector interface for branches. The branch
selector is simply a compilation. For constant or simple mappings, a
SingletonProcessor is used in the Compilation. pom.xml work -- both Beam and
Pipes only need gremlin/ in scope=test. This is pretty cool -- Gremlin is not
front and center in TP4.
c99ff4e is described below
commit c99ff4e23b0ad14e50dae2a53c054107a54b675d
Author: Marko A. Rodriguez <[email protected]>
AuthorDate: Mon Mar 18 06:53:04 2019 -0600
We no longer need Selector interface for branches. The branch selector is
simply a compilation. For constant or simple mappings, a SingletonProcessor is
used in the Compilation. pom.xml work -- both Beam and Pipes only need gremlin/
in scope=test. This is pretty cool -- Gremlin is not front and center in TP4.
---
.../tinkerpop/machine/bytecode/Compilation.java | 6 ++++
.../tinkerpop/machine/function/BranchFunction.java | 3 +-
.../machine/function/branch/ChooseBranch.java | 9 +++---
.../machine/function/branch/UnionBranch.java | 8 +++---
.../machine/function/branch/selector/Selector.java | 32 ----------------------
.../machine/processor/BooleanProcessor.java | 2 +-
.../ConstantProcessor.java} | 19 ++++++-------
.../HasNextProcessor.java} | 16 +++++------
.../machine/processor/LoopsProcessor.java | 2 +-
.../machine/processor/SingletonProcessor.java | 8 +++---
.../tinkerpop/machine/traverser/COTraverser.java | 7 +++++
.../machine/traverser/EmptyTraverser.java | 7 ++++-
.../tinkerpop/machine/traverser/Traverser.java | 2 ++
java/machine/beam/pom.xml | 19 +++++++++----
.../apache/tinkerpop/machine/beam/BranchFn.java | 8 +++---
java/machine/pipes/pom.xml | 7 +++++
.../apache/tinkerpop/machine/pipes/BranchStep.java | 7 ++---
17 files changed, 79 insertions(+), 83 deletions(-)
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Compilation.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Compilation.java
index 58c59d8..3c8c0a2 100644
---
a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Compilation.java
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Compilation.java
@@ -104,6 +104,12 @@ public final class Compilation<C, S, E> implements
Serializable {
return this.processor;
}
+ public Optional<Traverser<C, E>> maybeTraverser(final Traverser<C, S>
traverser) {
+ this.prepareProcessor();
+ this.processor.addStart(this.prepareTraverser(traverser));
+ return this.processor.hasNext() ? Optional.of(this.processor.next()) :
Optional.empty();
+ }
+
@Override
public String toString() {
return this.functions.toString();
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/function/BranchFunction.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/function/BranchFunction.java
index 73a7fb2..d54ba8b 100644
---
a/java/core/src/main/java/org/apache/tinkerpop/machine/function/BranchFunction.java
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/function/BranchFunction.java
@@ -19,7 +19,6 @@
package org.apache.tinkerpop.machine.function;
import org.apache.tinkerpop.machine.bytecode.Compilation;
-import org.apache.tinkerpop.machine.function.branch.selector.Selector;
import java.util.List;
import java.util.Map;
@@ -29,7 +28,7 @@ import java.util.Map;
*/
public interface BranchFunction<C, S, E, M> extends CFunction<C> {
- public Selector<C, S, M> getBranchSelector();
+ public Compilation<C, S, M> getBranchSelector();
public Map<M, List<Compilation<C, S, E>>> getBranches();
}
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/function/branch/ChooseBranch.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/function/branch/ChooseBranch.java
index f064a81..31dddd5 100644
---
a/java/core/src/main/java/org/apache/tinkerpop/machine/function/branch/ChooseBranch.java
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/function/branch/ChooseBranch.java
@@ -21,9 +21,8 @@ package org.apache.tinkerpop.machine.function.branch;
import org.apache.tinkerpop.machine.bytecode.Compilation;
import org.apache.tinkerpop.machine.coefficient.Coefficient;
import org.apache.tinkerpop.machine.function.AbstractFunction;
-import org.apache.tinkerpop.machine.function.branch.selector.HasNextSelector;
-import org.apache.tinkerpop.machine.function.branch.selector.Selector;
import org.apache.tinkerpop.machine.function.BranchFunction;
+import org.apache.tinkerpop.machine.processor.HasNextProcessor;
import org.apache.tinkerpop.util.StringFactory;
import java.util.Collections;
@@ -37,7 +36,7 @@ import java.util.Set;
*/
public class ChooseBranch<C, S, E> extends AbstractFunction<C> implements
BranchFunction<C, S, E, Boolean> {
- private final HasNextSelector<C, S> branchSelector;
+ private final Compilation<C, S, Boolean> branchSelector;
private final Map<Boolean, List<Compilation<C, S, E>>> branches;
/////
private final Compilation<C, S, ?> predicate;
@@ -49,7 +48,7 @@ public class ChooseBranch<C, S, E> extends
AbstractFunction<C> implements Branch
final Compilation<C, S, E> falseBranch) {
super(coefficient, labels);
this.predicate = predicate;
- this.branchSelector = new HasNextSelector<>(predicate);
+ this.branchSelector = new Compilation<>(new
HasNextProcessor<>(predicate));
this.branches = new HashMap<>();
this.branches.put(Boolean.TRUE, Collections.singletonList(trueBranch));
if (null != falseBranch)
@@ -62,7 +61,7 @@ public class ChooseBranch<C, S, E> extends
AbstractFunction<C> implements Branch
}
@Override
- public Selector<C, S, Boolean> getBranchSelector() {
+ public Compilation<C, S, Boolean> getBranchSelector() {
return this.branchSelector;
}
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/function/branch/UnionBranch.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/function/branch/UnionBranch.java
index 32d0fbb..61883e8 100644
---
a/java/core/src/main/java/org/apache/tinkerpop/machine/function/branch/UnionBranch.java
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/function/branch/UnionBranch.java
@@ -21,9 +21,8 @@ package org.apache.tinkerpop.machine.function.branch;
import org.apache.tinkerpop.machine.bytecode.Compilation;
import org.apache.tinkerpop.machine.coefficient.Coefficient;
import org.apache.tinkerpop.machine.function.AbstractFunction;
-import org.apache.tinkerpop.machine.function.branch.selector.Selector;
-import org.apache.tinkerpop.machine.function.branch.selector.TrueSelector;
import org.apache.tinkerpop.machine.function.BranchFunction;
+import org.apache.tinkerpop.machine.processor.ConstantProcessor;
import org.apache.tinkerpop.util.StringFactory;
import java.util.HashMap;
@@ -37,6 +36,7 @@ import java.util.Set;
public final class UnionBranch<C, S, E> extends AbstractFunction<C> implements
BranchFunction<C, S, E, Boolean> {
private final Map<Boolean, List<Compilation<C, S, E>>> branches;
+ private final Compilation<C, S, Boolean> branchSelector = new
Compilation<>(new ConstantProcessor<>(Boolean.TRUE));
public UnionBranch(final Coefficient<C> coefficient, final Set<String>
labels, final List<Compilation<C, S, E>> branches) {
super(coefficient, labels);
@@ -50,8 +50,8 @@ public final class UnionBranch<C, S, E> extends
AbstractFunction<C> implements B
}
@Override
- public Selector<C, S, Boolean> getBranchSelector() {
- return TrueSelector.instance();
+ public Compilation<C, S, Boolean> getBranchSelector() {
+ return this.branchSelector;
}
@Override
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/function/branch/selector/Selector.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/function/branch/selector/Selector.java
deleted file mode 100644
index e37dac1..0000000
---
a/java/core/src/main/java/org/apache/tinkerpop/machine/function/branch/selector/Selector.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.machine.function.branch.selector;
-
-import org.apache.tinkerpop.machine.traverser.Traverser;
-
-import java.io.Serializable;
-import java.util.Optional;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public interface Selector<C, S, E> extends Serializable {
-
- public Optional<E> from(final Traverser<C, S> traverser);
-}
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/processor/BooleanProcessor.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/BooleanProcessor.java
index d90f4dd..99172a7 100644
---
a/java/core/src/main/java/org/apache/tinkerpop/machine/processor/BooleanProcessor.java
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/BooleanProcessor.java
@@ -23,7 +23,7 @@ import org.apache.tinkerpop.machine.traverser.Traverser;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class BooleanProcessor<C, S> extends SingletonProcessor<C, S> {
+public final class BooleanProcessor<C, S> extends SingletonProcessor<C, S, S> {
private final boolean allow;
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/function/branch/selector/TrueSelector.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/ConstantProcessor.java
similarity index 69%
rename from
java/core/src/main/java/org/apache/tinkerpop/machine/function/branch/selector/TrueSelector.java
rename to
java/core/src/main/java/org/apache/tinkerpop/machine/processor/ConstantProcessor.java
index 99cde3a..ec84968 100644
---
a/java/core/src/main/java/org/apache/tinkerpop/machine/function/branch/selector/TrueSelector.java
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/ConstantProcessor.java
@@ -16,25 +16,24 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.function.branch.selector;
+package org.apache.tinkerpop.machine.processor;
import org.apache.tinkerpop.machine.traverser.Traverser;
-import java.util.Optional;
-
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class TrueSelector<C, S> implements Selector<C, S, Boolean> {
+public final class ConstantProcessor<C, S, E> extends SingletonProcessor<C, S,
E> {
- private static final TrueSelector INSTANCE = new TrueSelector<>();
+ private final E constant;
- @Override
- public Optional<Boolean> from(final Traverser<C, S> traverser) {
- return Optional.of(Boolean.TRUE);
+ public ConstantProcessor(final E constant) {
+ this.constant = constant;
}
- public static <C, S> TrueSelector<C, S> instance() {
- return INSTANCE;
+ @Override
+ public void addStart(final Traverser<C, S> traverser) {
+ if (null == this.traverser)
+ this.traverser = traverser.split(this.constant);
}
}
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/function/branch/selector/HasNextSelector.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/HasNextProcessor.java
similarity index 68%
rename from
java/core/src/main/java/org/apache/tinkerpop/machine/function/branch/selector/HasNextSelector.java
rename to
java/core/src/main/java/org/apache/tinkerpop/machine/processor/HasNextProcessor.java
index 5def149..7f0ec33 100644
---
a/java/core/src/main/java/org/apache/tinkerpop/machine/function/branch/selector/HasNextSelector.java
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/HasNextProcessor.java
@@ -16,26 +16,24 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.function.branch.selector;
+package org.apache.tinkerpop.machine.processor;
import org.apache.tinkerpop.machine.bytecode.Compilation;
import org.apache.tinkerpop.machine.traverser.Traverser;
-import java.util.Optional;
-
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class HasNextSelector<C, S> implements Selector<C, S, Boolean> {
+public final class HasNextProcessor<C, S> extends SingletonProcessor<C, S,
Boolean> {
- private final Compilation<C, S, ?> compilation;
+ private final Compilation<C, S, ?> predicate;
- public HasNextSelector(final Compilation<C, S, ?> compilation) {
- this.compilation = compilation;
+ public HasNextProcessor(final Compilation<C, S, ?> predicate) {
+ this.predicate = predicate;
}
@Override
- public Optional<Boolean> from(final Traverser<C, S> traverser) {
- return Optional.of(this.compilation.filterTraverser(traverser));
+ public void addStart(final Traverser<C, S> traverser) {
+ this.traverser =
traverser.split(this.predicate.filterTraverser(traverser));
}
}
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/processor/LoopsProcessor.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/LoopsProcessor.java
index a4ce3c6..eb060b4 100644
---
a/java/core/src/main/java/org/apache/tinkerpop/machine/processor/LoopsProcessor.java
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/LoopsProcessor.java
@@ -23,7 +23,7 @@ import org.apache.tinkerpop.machine.traverser.Traverser;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class LoopsProcessor<C, S> extends SingletonProcessor<C, S> {
+public final class LoopsProcessor<C, S> extends SingletonProcessor<C, S, S> {
private final int loops;
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/processor/SingletonProcessor.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/SingletonProcessor.java
index fe9b5d5..f6acd9a 100644
---
a/java/core/src/main/java/org/apache/tinkerpop/machine/processor/SingletonProcessor.java
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/SingletonProcessor.java
@@ -29,16 +29,16 @@ import java.util.List;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public abstract class SingletonProcessor<C, S> implements Processor<C, S, S>,
ProcessorFactory {
+public abstract class SingletonProcessor<C, S, E> implements Processor<C, S,
E>, ProcessorFactory {
- protected Traverser<C, S> traverser = null;
+ protected Traverser<C, E> traverser = null;
@Override
- public Traverser<C, S> next() {
+ public Traverser<C, E> next() {
if (null == this.traverser)
throw FastNoSuchElementException.instance();
else {
- final Traverser<C, S> temp = this.traverser;
+ final Traverser<C, E> temp = this.traverser;
this.traverser = null;
return temp;
}
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/traverser/COTraverser.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/traverser/COTraverser.java
index c3592d3..ba62015 100644
---
a/java/core/src/main/java/org/apache/tinkerpop/machine/traverser/COTraverser.java
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/traverser/COTraverser.java
@@ -75,6 +75,13 @@ public class COTraverser<C, S> implements Traverser<C, S> {
}
@Override
+ public <E> Traverser<C, E> split(final E object) {
+ final COTraverser<C, E> clone = (COTraverser<C, E>) this.clone();
+ clone.object = object;
+ return clone;
+ }
+
+ @Override
public int hashCode() {
return this.object.hashCode();
}
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/traverser/EmptyTraverser.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/traverser/EmptyTraverser.java
index 4587db9..43c6cf9 100644
---
a/java/core/src/main/java/org/apache/tinkerpop/machine/traverser/EmptyTraverser.java
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/traverser/EmptyTraverser.java
@@ -63,7 +63,12 @@ public final class EmptyTraverser<C, S> implements
Traverser<C, S> {
}
@Override
- public <E> Traverser<C, E> split(CFunction<C> function, E object) {
+ public <E> Traverser<C, E> split(final CFunction<C> function, final E
object) {
+ return INSTANCE;
+ }
+
+ @Override
+ public <E> Traverser<C, E> split(final E object) {
return INSTANCE;
}
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/traverser/Traverser.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/traverser/Traverser.java
index 1f4e6ff..fe67d11 100644
---
a/java/core/src/main/java/org/apache/tinkerpop/machine/traverser/Traverser.java
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/traverser/Traverser.java
@@ -81,5 +81,7 @@ public interface Traverser<C, S> extends Serializable,
Cloneable {
public <E> Traverser<C, E> split(final CFunction<C> function, final E
object);
+ public <E> Traverser<C, E> split(final E object);
+
public Traverser<C, S> clone();
}
diff --git a/java/machine/beam/pom.xml b/java/machine/beam/pom.xml
index 63c3ad2..2eb4b7c 100644
--- a/java/machine/beam/pom.xml
+++ b/java/machine/beam/pom.xml
@@ -26,7 +26,12 @@ limitations under the License.
<dependencies>
<dependency>
<groupId>org.apache.tinkerpop</groupId>
- <artifactId>gremlin</artifactId>
+ <artifactId>pipes</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tinkerpop</groupId>
+ <artifactId>core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
@@ -78,16 +83,18 @@ limitations under the License.
<version>2.11.0</version>
<scope>runtime</scope>
</dependency>
- <dependency>
- <groupId>org.apache.tinkerpop</groupId>
- <artifactId>pipes</artifactId>
- <version>${project.version}</version>
- </dependency>
+ <!-- TEST -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j18-impl</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.tinkerpop</groupId>
+ <artifactId>gremlin</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
<directory>${basedir}/target</directory>
diff --git
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/BranchFn.java
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/BranchFn.java
index c0ea6fc..7756b73 100644
---
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/BranchFn.java
+++
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/BranchFn.java
@@ -19,8 +19,8 @@
package org.apache.tinkerpop.machine.beam;
import org.apache.beam.sdk.values.TupleTag;
+import org.apache.tinkerpop.machine.bytecode.Compilation;
import org.apache.tinkerpop.machine.function.BranchFunction;
-import org.apache.tinkerpop.machine.function.branch.selector.Selector;
import org.apache.tinkerpop.machine.traverser.Traverser;
import java.util.Map;
@@ -32,7 +32,7 @@ import java.util.Optional;
public class BranchFn<C, S, E, M> extends AbstractFn<C, S, S> {
private final Map<M, TupleTag<Traverser<C, S>>> branches;
- private final Selector<C, S, M> branchSelector;
+ private final Compilation<C, S, M> branchSelector;
public BranchFn(final BranchFunction<C, S, E, M> branchFunction, final
Map<M, TupleTag<Traverser<C, S>>> branches) {
super(branchFunction);
@@ -42,9 +42,9 @@ public class BranchFn<C, S, E, M> extends AbstractFn<C, S, S>
{
@ProcessElement
public void processElement(final @Element Traverser<C, S> traverser, final
MultiOutputReceiver outputs) {
- final Optional<M> selector =
this.branchSelector.from(traverser.clone());
+ final Optional<Traverser<C, M>> selector =
this.branchSelector.maybeTraverser(traverser);
if (selector.isPresent()) {
- final TupleTag<Traverser<C, S>> outputTag =
this.branches.get(selector.get());
+ final TupleTag<Traverser<C, S>> outputTag =
this.branches.get(selector.get().object());
if (null != outputTag)
outputs.get(outputTag).output(traverser.clone());
}
diff --git a/java/machine/pipes/pom.xml b/java/machine/pipes/pom.xml
index 80c0de6..4da3635 100644
--- a/java/machine/pipes/pom.xml
+++ b/java/machine/pipes/pom.xml
@@ -26,8 +26,15 @@ limitations under the License.
<dependencies>
<dependency>
<groupId>org.apache.tinkerpop</groupId>
+ <artifactId>core</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <!-- TEST -->
+ <dependency>
+ <groupId>org.apache.tinkerpop</groupId>
<artifactId>gremlin</artifactId>
<version>${project.version}</version>
+ <scope>test</scope>
</dependency>
</dependencies>
<build>
diff --git
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/BranchStep.java
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/BranchStep.java
index 540bb26..52ea854 100644
---
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/BranchStep.java
+++
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/BranchStep.java
@@ -20,7 +20,6 @@ package org.apache.tinkerpop.machine.pipes;
import org.apache.tinkerpop.machine.bytecode.Compilation;
import org.apache.tinkerpop.machine.function.BranchFunction;
-import org.apache.tinkerpop.machine.function.branch.selector.Selector;
import org.apache.tinkerpop.machine.traverser.Traverser;
import org.apache.tinkerpop.util.EmptyIterator;
import org.apache.tinkerpop.util.MultiIterator;
@@ -35,7 +34,7 @@ import java.util.Optional;
*/
final class BranchStep<C, S, E, M> extends AbstractStep<C, S, E> {
- private final Selector<C, S, M> branchSelector;
+ private final Compilation<C, S, M> branchSelector;
private final Map<M, List<Compilation<C, S, E>>> branches;
private Iterator<Traverser<C, E>> nextTraversers =
EmptyIterator.instance();
@@ -60,9 +59,9 @@ final class BranchStep<C, S, E, M> extends AbstractStep<C, S,
E> {
private final void stageOutput() {
while (!this.nextTraversers.hasNext() && this.previousStep.hasNext()) {
final Traverser<C, S> traverser = this.previousStep.next();
- final Optional<M> token = this.branchSelector.from(traverser);
+ final Optional<Traverser<C, M>> token =
this.branchSelector.maybeTraverser(traverser);
if (token.isPresent()) {
- final List<Compilation<C, S, E>> matches =
this.branches.get(token.get());
+ final List<Compilation<C, S, E>> matches =
this.branches.get(token.get().object());
if (1 == matches.size())
this.nextTraversers =
matches.get(0).addTraverser(traverser);
else {