icentral_graph/
subtract_edge.rs1crate::ix!();
2
3impl<GH> SubtractEdge for Graph<GH>
4where GH
5: GetConnectedComponentSizes
6+ ExtendWith<GH>
7+ GetEdges
8+ GetNeighborsForNode
9+ GetNodeIdRange
10+ HasMapForNode
11+ InsertEdge
12+ InsertNode
13+ MappedNodes
14+ NumEdges
15+ NumNodes
16{
17 fn simple_subtract_edge_and_update_mucs(&mut self, edge: &Edge)
18 {
19 let bridge_edge: Edge = *edge;
23
24 let muc1_id: MinimumUnionCycleId = self.nodes_to_mucs.mucid_for_node(bridge_edge.src);
25 let muc2_id: MinimumUnionCycleId = self.nodes_to_mucs.mucid_for_node(bridge_edge.dst);
26
27 self.mucs[muc1_id.val()].insert_conn_vertex(bridge_edge.src, bridge_edge.dst);
28 self.mucs[muc2_id.val()].insert_conn_vertex(bridge_edge.dst, bridge_edge.src);
29 }
30
31 fn maybe_simple_subtract_edge_and_update_mucs(
32 &mut self,
33 edge: &Edge,
34 all_muc_edges: &Edges)
35 {
36 let edge_r = edge.reversed();
37
38 if !all_muc_edges.has_edge(&edge)
39 && !all_muc_edges.has_edge(&edge_r)
40 {
41 self.simple_subtract_edge_and_update_mucs(edge);
42 }
43 }
44
45 fn do_simple_subtraction_of_edges_and_update_mucs(
46 &mut self,
47 all_muc_edges: &Edges)
48 {
49 let edges = self.edges.clone();
51
52 for &edge in edges.iter() {
53
54 self.maybe_simple_subtract_edge_and_update_mucs(
55 &edge,
56 all_muc_edges
57 );
58 }
59 }
60}