Skip to main content

weavatrix_graph/working/
view.rs

1use super::{StableEdgeKey, StableNodeKey, WorkingGraph};
2use crate::{EdgeEndpoints, GraphView, IndexGraphView};
3
4impl GraphView for WorkingGraph {
5    type Node = StableNodeKey;
6    type Edge = StableEdgeKey;
7
8    fn node_count(&self) -> usize {
9        self.node_count()
10    }
11
12    fn edge_count(&self) -> usize {
13        self.edge_count()
14    }
15
16    fn contains_node(&self, node: StableNodeKey) -> bool {
17        self.node(node).is_some()
18    }
19
20    fn contains_edge(&self, edge: StableEdgeKey) -> bool {
21        self.edge(edge).is_some()
22    }
23
24    fn node_indices(&self) -> impl Iterator<Item = Self::Node> + '_ {
25        self.nodes().map(|(key, _)| key)
26    }
27
28    fn edge_indices(&self) -> impl Iterator<Item = Self::Edge> + '_ {
29        self.edges().map(|(key, _)| key)
30    }
31
32    fn edge_endpoints(&self, edge: Self::Edge) -> Option<EdgeEndpoints<Self::Node>> {
33        WorkingGraph::edge_endpoints(self, edge)
34    }
35
36    fn outgoing_edges(
37        &self,
38        node: Self::Node,
39    ) -> impl DoubleEndedIterator<Item = Self::Edge> + ExactSizeIterator + '_ {
40        WorkingGraph::outgoing_edges(self, node)
41    }
42
43    fn incoming_edges(
44        &self,
45        node: Self::Node,
46    ) -> impl DoubleEndedIterator<Item = Self::Edge> + ExactSizeIterator + '_ {
47        WorkingGraph::incoming_edges(self, node)
48    }
49}
50
51impl IndexGraphView for WorkingGraph {
52    fn node_bound(&self) -> usize {
53        self.nodes.len()
54    }
55
56    fn edge_bound(&self) -> usize {
57        self.edges.len()
58    }
59
60    fn node_slot(node: Self::Node) -> usize {
61        node.index()
62    }
63
64    fn edge_slot(edge: Self::Edge) -> usize {
65        edge.index()
66    }
67}