weavatrix_graph/working/
view.rs1use 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}