icentral_graph/
build_graph_hash_mapping_for_conn_vertex.rs1crate::ix!();
2
3impl<GH> BuildGraphHashMappingForConnVertex<GH> for Graph<GH>
4where GH: InsertNode + InsertEdge + CreateNamedEmpty
5{
6 fn build_graphhash_mapping_for_conn_vertex_step(
7 &self,
8 gh: &mut GH,
9 bfs_source: NodeId,
10 conn_vert: NodeId,
11 item: (NodeId, &Vec<NodeId>),
12 muc_id: MinimumUnionCycleId)
13 -> Result<(),BetweennessCentralityError>
14 {
15 let visit_markers_name = name![self.name(), "build_graphhash_mapping_for_conn_vertex_step::visit_markers"];
16
17 let mut visit_markers = VisitMarkers::new(
18 self.num_nodes(),
19 visit_markers_name
20 );
21
22 visit_markers.visit(bfs_source);
23 visit_markers.visit(conn_vert);
24
25 let queue_name = name![
26 self.name(),
27 "build_graphhash_mapping_for_conn_vertex_step::queue"
28 ];
29
30 let mut queue = NodeIdQueue::empty(queue_name);
31
32 queue.enqueue(bfs_source);
33
34 while let Some(node) = queue.dequeue() {
35
36 gh.insert_node(node);
37
38 let nbrs = self.neighbors(node);
39
40 for &bfs_nbr in nbrs.iter() {
41
42 if visit_markers.unvisited(bfs_nbr) {
43
44 queue.enqueue(bfs_nbr);
45
46 visit_markers.visit(bfs_nbr);
47
48 if bfs_nbr != conn_vert {
49 gh.insert_edge(&Edge::new(node, bfs_nbr));
50 }
51 }
52 }
53 }
54
55 Ok(())
56 }
57
58 fn build_graphhash_mapping_for_conn_vertex(
59 &self,
60 item: (NodeId, &Vec<NodeId>),
61 muc_id: MinimumUnionCycleId)
62 -> Result<(NodeId, Arc<GH>),BetweennessCentralityError>
63 {
64 let conn_vert: NodeId = item.0;
65
66 let gh_name = name![
67 self.name(),
68 "build_graphhash_mapping_for_conn_vertex::gh"
69 ];
70
71 let mut gh: GH = GH::empty(gh_name);
72
73 for &bfs_source in item.1.iter() {
74
75 self.build_graphhash_mapping_for_conn_vertex_step(
76 &mut gh,
77 bfs_source,
78 conn_vert,
79 item,
80 muc_id
81 )?;
82 }
83
84 Ok((conn_vert,Arc::new(gh)))
85 }
86}
87
88