adjacency_list/sparse_edges/
two_way.rs1use 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}