adjacency_list/sparse_edges/
two_way.rs

1use super::*;
2use crate::UnGraphAED;
3use graph_types::{errors::GraphError, EdgeID, IndeterminateEdge, NodeID};
4
5impl<'a> GraphEngine<'a> for UnGraphAED {
6    type NeighborIterator = PlaceholderNodeIterator;
7    type BridgeIterator = PlaceholderEdgeIterator;
8    type NodeTraverser = PlaceholderNodeIterator;
9    type EdgeTraverser = PlaceholderNodeIterator;
10    type BridgeTraverser = PlaceholderEdgeIterator;
11
12    fn graph_kind(&self) -> GraphKind {
13        GraphKind::Directed
14    }
15
16    fn get_node(&self, node: NodeID) -> Result<NodeID, GraphError> {
17        todo!()
18    }
19
20    fn all_nodes(&self) -> Self::NodeTraverser {
21        todo!()
22    }
23
24    fn all_neighbors(&'a self, node: NodeID) -> Self::NeighborIterator {
25        todo!()
26    }
27
28    fn get_edge(&self, edge: EdgeID) -> Result<EdgeID, GraphError> {
29        todo!()
30    }
31
32    fn all_edges(&self) -> Self::EdgeTraverser {
33        todo!()
34    }
35
36    fn get_bridge(&self, edge: EdgeID) -> Result<IndeterminateEdge, GraphError> {
37        todo!()
38    }
39
40    fn get_bridges(&'a self, from: NodeID, goto: NodeID) -> Self::BridgeIterator {
41        todo!()
42    }
43
44    fn all_bridges(&self) -> Self::BridgeIterator {
45        todo!()
46    }
47}
48
49impl MutableGraph for UnGraphAED {
50    fn insert_node(&mut self, node_id: usize) -> bool {
51        todo!()
52    }
53
54    fn create_node(&mut self) -> usize {
55        todo!()
56    }
57
58    fn remove_node_with_edges(&mut self, node_id: usize) {
59        let _id = node_id as u32;
60        todo!()
61    }
62    fn insert_edge_with_nodes<E: Edge>(&mut self, edge: E) -> EdgeInsertID {
63        let lhs = edge.lhs();
64        let rhs = edge.rhs();
65        match edge.direction() {
66            EdgeDirection::Disconnect => EdgeInsertID::Nothing,
67            EdgeDirection::TwoWay => {
68                let e1 = self.insert_one_way_edge(lhs, rhs);
69                let e2 = self.insert_one_way_edge(rhs, lhs);
70                EdgeInsertID::TwoEdges(e1, e2)
71            }
72            EdgeDirection::Forward => {
73                let e1 = self.insert_one_way_edge(lhs, rhs);
74                EdgeInsertID::OneEdge(e1)
75            }
76            EdgeDirection::Reverse => {
77                let e1 = self.insert_one_way_edge(rhs, lhs);
78                EdgeInsertID::OneEdge(e1)
79            }
80            EdgeDirection::Indeterminate => {
81                todo!()
82            }
83        }
84    }
85
86    fn remove_edge<E>(&mut self, edge: E)
87    where
88        E: Into<EdgeQuery>,
89    {
90        match edge.into() {
91            EdgeQuery::EdgeID(i) => {
92                self.edges.remove(&(i as u32));
93            }
94            EdgeQuery::Directed(_di) => {
95                todo!()
96            }
97            EdgeQuery::Undirected(_) => {
98                todo!()
99            }
100            EdgeQuery::Dynamic(_) => {
101                todo!()
102            }
103        }
104    }
105}
106
107impl UnGraphAED {
108    pub(crate) fn insert_one_way_edge(&mut self, start: usize, end: usize) -> usize {
109        let id = self.edges.len() as u32 + 1;
110        self.edges.insert(id, ShortEdge::new(start, end));
111        id as usize
112    }
113}