1crate::ix!();
2
3impl CreateNamedEmpty for SubGraph {
4
5 fn empty(name: &str) -> Self {
6
7 let nodes_map_name = name![name, "nodes_map"];
8 let edges_name = name![name, "edges"];
9 let label_map_name = name![name, "label_map"];
10 let parents_name = name![name, "parents"];
11 let path_counts_name = name![name, "path_counts"];
12 let new_path_counts_name = name![name, "new_path_counts"];
13 let inc_path_counts_name = name![name, "inc_path_counts"];
14 let distances_name = name![name, "distances"];
15 let pair_dependencies_name = name![name, "pair_dependencies"];
16 let new_pair_dependencies_name = name![name, "new_pair_dependencies"];
17 let sigmas_name = name![name, "sigmas"];
18 let new_sigmas_name = name![name, "new_sigmas"];
19 let visit_markers_name = name![name, "visit_markers"];
20 let stack_name = name![name, "stack"];
21 let queue_name = name![name, "queue"];
22
23 Self {
24 name: name.to_owned(),
25 nodes_map: NeighborsMap::empty_indexed(nodes_map_name),
26 edges: Edges::empty(edges_name),
27 label_map: LabelMap::empty(label_map_name),
28 parents: ParentsMap::empty_indexed(parents_name),
29 path_counts: PathCounts::empty_indexed(path_counts_name),
30 new_path_counts: PathCounts::empty_indexed(new_path_counts_name),
31 inc_path_counts: PathCounts::empty_indexed(inc_path_counts_name),
32 distances: DistanceMap::empty_indexed(distances_name),
33 pair_dependencies: PairDependencies::empty_indexed(pair_dependencies_name),
34 new_pair_dependencies: PairDependencies::empty_indexed(new_pair_dependencies_name),
35 sigmas: SigmaMap::empty_indexed(sigmas_name),
36 new_sigmas: SigmaMap::empty_indexed(new_sigmas_name),
37 visit_markers: VisitMarkers::empty_indexed(visit_markers_name),
38 stack: NodeIdStack::empty(stack_name),
39 queue: NodeIdQueue::empty(queue_name),
40 }
41 }
42}
43
44impl SubGraph {
45
46 fn new_from_nodes_edges_and_label_map(
49 nodes_map: NeighborsMap,
50 edges: Edges,
51 label_map: LabelMap,
52 name: &str) -> Self
53 {
54 let len = nodes_map.len();
55
56 assert!(nodes_map.len() == label_map.len());
57
58 let parents_name = name![name, "parents"];
59 let path_counts_name = name![name, "path_counts"];
60 let new_path_counts_name = name![name, "new_path_counts"];
61 let inc_path_counts_name = name![name, "inc_path_counts"];
62 let distances_name = name![name, "distances"];
63 let pair_dependencies_name = name![name, "pair_dependencies"];
64 let new_pair_dependencies_name = name![name, "new_pair_dependencies"];
65 let sigmas_name = name![name, "sigmas"];
66 let new_sigmas_name = name![name, "new_sigmas"];
67 let visit_markers_name = name![name, "visit_markers"];
68 let stack_name = name![name, "stack"];
69 let queue_name = name![name, "queue"];
70
71 Self {
72 name: name.to_owned(),
73 nodes_map,
74 edges,
75 label_map,
76 parents: ParentsMap::new(len, parents_name),
77 path_counts: PathCounts::new(len, path_counts_name),
78 new_path_counts: PathCounts::new(len, new_path_counts_name),
79 inc_path_counts: PathCounts::new(len, inc_path_counts_name),
80 distances: DistanceMap::new(len, distances_name),
81 pair_dependencies: PairDependencies::new(len, pair_dependencies_name),
82 new_pair_dependencies: PairDependencies::new(len, new_pair_dependencies_name),
83 sigmas: SigmaMap::new(len, sigmas_name),
84 new_sigmas: SigmaMap::new(len, new_sigmas_name),
85 visit_markers: VisitMarkers::new(len, visit_markers_name),
86 stack: NodeIdStack::empty(stack_name),
87 queue: NodeIdQueue::empty(queue_name),
88 }
89 }
90
91 pub fn new_from_graph_hash_ref<GH>(gh: &GH, name: &str) -> Self
95 where GH: NumNodes + MappedNodes + GetEdges + GetNodeIdRange + GetNeighborsForNode
96 {
97
98 debug!("creating new SubGraph named {} from GraphHash of len {}", name, gh.num_nodes());
99
100 let len = gh.num_nodes();
101
102 let nodes_map_name = name![name, "nodes_map"];
103 let edges_name = name![name, "edges"];
104 let label_map_name = name![name, "label_map"];
105
106 let label_map = LabelMap::new_from_graph_ref(gh, label_map_name);
107 let nodes_map = NeighborsMap::new(len, nodes_map_name);
108 let edges = Edges::new_remapped(&label_map,gh, edges_name);
109
110 SubGraph::new_from_nodes_edges_and_label_map(
111 nodes_map,
112 edges,
113 label_map,
114 name
115 )
116 }
117
118 pub fn new_from_graph_ref<G>(g: &G, name: &str) -> Self
122 where G: NumNodes + MappedNodes + GetNodeIdRange + GetNeighborsForNode + GetEdges
123 {
124
125 let num_nodes = g.num_nodes();
126
127 let nodes_map_name = name![name, "nodes_map"];
128 let edges_name = name![name, "edges"];
129 let label_map_name = name![name, "label_map"];
130
131 let nodes_map = NeighborsMap::new_from_graph_ref(g, nodes_map_name);
132 let edges = Edges::new_from_graph_ref(g, edges_name);
133 let label_map = LabelMap::new_from_graph_ref(g, label_map_name);
134
135 SubGraph::new_from_nodes_edges_and_label_map(
136 nodes_map,
137 edges,
138 label_map,
139 name
140 )
141 }
142}