icentral_graph/
build_graph_hash_mapping_for_conn_vertex.rs

1crate::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