use of com.vaticle.typedb.core.graph.vertex.Vertex in project grakn by graknlabs.
the class GraphIterator method computeNext.
private boolean computeNext(int pos) {
if (pos == 0)
return false;
ProcedureEdge<?, ?> edge = procedure.edge(pos);
Identifier toID = edge.to().id();
if (pos == computeNextSeekPos) {
computeNextSeekPos = edgeCount;
} else if (pos > computeNextSeekPos) {
if (!edge.isClosureEdge())
iterators.get(toID).recycle();
if (!backTrack(pos))
return false;
if (edge.isClosureEdge()) {
Vertex<?, ?> fromVertex = answer.get(edge.from().id());
Vertex<?, ?> toVertex = answer.get(edge.to().id());
if (isClosure(edge, fromVertex, toVertex))
return true;
else
return computeNextClosure(pos);
} else {
Forwardable<? extends Vertex<?, ?>, Order.Asc> toIter = branch(answer.get(edge.from().id()), edge);
iterators.put(toID, toIter);
}
}
if (edge.isClosureEdge()) {
return computeNextClosure(pos);
} else if (iterators.get(toID).hasNext()) {
answer.put(toID, iterators.get(toID).next());
return true;
} else {
return computeNextBranch(pos);
}
}
Aggregations