graphEdges<Node extends GraphNode<Object>> function

Iterable<GraphEdge<Node>> graphEdges<Node extends GraphNode<Object>>(
  1. Node root, {
  2. Set<Node>? visited,
})

Get an iterable of every GraphEdge in a graph. Every edge will be emitted exactly once. If an edge is interlinked, it will be emitted once for the first node linking to the second and once for the second node linking to the first.

Implementation

Iterable<GraphEdge<Node>> graphEdges<Node extends GraphNode<Object>>(
  Node root, {
  Set<Node>? visited,
}) sync* {
  ArgumentError.checkNotNull(root);
  visited ??= {};
  if (!visited.contains(root)) {
    visited.add(root);
    for (final edge in root.edges) {
      yield GraphEdge<Node>(root, edge as Node);
      yield* graphEdges(edge, visited: visited);
    }
  }
}