public void next()

in saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/ByLevelTraveller.java [52:75]


  public void next() {
    nodes.addAll(nodesBuffer);
    nodesBuffer.clear();
    boolean buffered = false;

    while (!nodesWithoutParent.isEmpty() && !buffered) {
      Node<T> node = nodesWithoutParent.poll();
      nodes.add(node);

      for (Node<T> child : traversalDirection.children(node)) {
        // This is not thread safe
        if (nodeParents.get(child.id()) == null) {
          nodeParents.put(child.id(), new HashSet<>(traversalDirection.parents(child)));
        }
        nodeParents.get(child.id()).remove(node);

        if (nodeParents.get(child.id()).isEmpty()) {
          nodesWithoutParent.offer(child);
          nodesBuffer.add(child);
          buffered = true;
        }
      }
    }
  }