hugr_core/hugr/views/
nodes_iter.rs

1use crate::{HugrView, core::HugrNode, hugr::views::SiblingSubgraph};
2
3/// Iterate over nodes within a graph view (Hugr, SiblingSubgraph, etc).
4pub trait NodesIter {
5    /// The type of nodes in the graph.
6    type Node;
7
8    /// Iterate over the nodes in the graph.
9    fn nodes(&self) -> impl Iterator<Item = Self::Node> + '_;
10}
11
12impl<H: HugrView> NodesIter for H {
13    type Node = H::Node;
14
15    fn nodes(&self) -> impl Iterator<Item = Self::Node> + '_ {
16        self.nodes()
17    }
18}
19
20impl<N: HugrNode> NodesIter for SiblingSubgraph<N> {
21    type Node = N;
22
23    fn nodes(&self) -> impl Iterator<Item = Self::Node> + '_ {
24        self.nodes().iter().copied()
25    }
26}