grapes/map_graph/
node_iter.rs

1use crate::graph;
2use crate::map_graph::{EdgeEntry, NodeEntry, NodeRef};
3use std::hash::Hash;
4
5/// Iterator over all nodes in a Graph
6///
7/// Order is unspecified
8#[must_use]
9pub struct GraphNodes<
10    'a,
11    NodeKey: Hash + Eq + Clone,
12    NodeData: Clone,
13    EdgeKey: Hash + Eq + Clone,
14    EdgeData: Clone,
15> {
16    inner: graph::GraphNodes<'a, NodeEntry<NodeKey, NodeData>, EdgeEntry<EdgeKey, EdgeData>>,
17}
18
19impl<
20        'a,
21        NodeKey: Hash + Eq + Clone,
22        NodeData: Clone,
23        EdgeKey: Hash + Eq + Clone,
24        EdgeData: Clone,
25    > GraphNodes<'a, NodeKey, NodeData, EdgeKey, EdgeData>
26{
27    pub fn new(
28        inner: graph::GraphNodes<'a, NodeEntry<NodeKey, NodeData>, EdgeEntry<EdgeKey, EdgeData>>,
29    ) -> Self {
30        Self { inner }
31    }
32}
33
34impl<
35        'a,
36        NodeKey: Hash + Eq + Clone,
37        NodeData: Clone,
38        EdgeKey: Hash + Eq + Clone,
39        EdgeData: Clone,
40    > Iterator for GraphNodes<'a, NodeKey, NodeData, EdgeKey, EdgeData>
41{
42    type Item = NodeRef<'a, NodeKey, NodeData, EdgeKey, EdgeData>;
43
44    fn next(&mut self) -> Option<Self::Item> {
45        let inner = self.inner.next()?;
46
47        Some(NodeRef::new(inner))
48    }
49}