@@ -35,17 +35,13 @@ use crate::witness_search::WitnessSearch;
35
35
pub struct FastGraphBuilder {
36
36
fast_graph : FastGraph ,
37
37
num_nodes : usize ,
38
- center_nodes_fwd : Vec < NodeId > ,
39
- center_nodes_bwd : Vec < NodeId > ,
40
38
}
41
39
42
40
impl FastGraphBuilder {
43
41
fn new ( input_graph : & InputGraph ) -> Self {
44
42
FastGraphBuilder {
45
43
fast_graph : FastGraph :: new ( input_graph. get_num_nodes ( ) ) ,
46
44
num_nodes : input_graph. get_num_nodes ( ) ,
47
- center_nodes_fwd : vec ! [ ] ,
48
- center_nodes_bwd : vec ! [ ] ,
49
45
}
50
46
}
51
47
@@ -113,10 +109,9 @@ impl FastGraphBuilder {
113
109
node,
114
110
out_edge. adj_node ,
115
111
out_edge. weight ,
116
- INVALID_EDGE ,
112
+ out_edge . center_node ,
117
113
INVALID_EDGE ,
118
114
) ) ;
119
- self . center_nodes_fwd . push ( out_edge. center_node ) ;
120
115
}
121
116
self . fast_graph . first_edge_ids_fwd [ rank + 1 ] = self . fast_graph . get_num_out_edges ( ) ;
122
117
@@ -126,10 +121,9 @@ impl FastGraphBuilder {
126
121
node,
127
122
in_edge. adj_node ,
128
123
in_edge. weight ,
129
- INVALID_EDGE ,
124
+ in_edge . center_node ,
130
125
INVALID_EDGE ,
131
126
) ) ;
132
- self . center_nodes_bwd . push ( in_edge. center_node )
133
127
}
134
128
self . fast_graph . first_edge_ids_bwd [ rank + 1 ] = self . fast_graph . get_num_in_edges ( ) ;
135
129
@@ -181,10 +175,9 @@ impl FastGraphBuilder {
181
175
node,
182
176
out_edge. adj_node ,
183
177
out_edge. weight ,
184
- INVALID_EDGE ,
178
+ out_edge . center_node ,
185
179
INVALID_EDGE ,
186
180
) ) ;
187
- self . center_nodes_fwd . push ( out_edge. center_node ) ;
188
181
}
189
182
self . fast_graph . first_edge_ids_fwd [ rank + 1 ] = self . fast_graph . get_num_out_edges ( ) ;
190
183
@@ -193,10 +186,9 @@ impl FastGraphBuilder {
193
186
node,
194
187
in_edge. adj_node ,
195
188
in_edge. weight ,
196
- INVALID_EDGE ,
189
+ in_edge . center_node ,
197
190
INVALID_EDGE ,
198
191
) ) ;
199
- self . center_nodes_bwd . push ( in_edge. center_node )
200
192
}
201
193
self . fast_graph . first_edge_ids_bwd [ rank + 1 ] = self . fast_graph . get_num_in_edges ( ) ;
202
194
@@ -221,10 +213,15 @@ impl FastGraphBuilder {
221
213
fn finish_contraction ( & mut self ) {
222
214
for i in 0 ..self . num_nodes {
223
215
for edge_id in self . fast_graph . begin_out_edges ( i) ..self . fast_graph . end_out_edges ( i) {
224
- let c = self . center_nodes_fwd [ edge_id] ;
216
+ // we temporarily stored the center node in the replaced_in_edge field. now we
217
+ // set the actual replaced edges
218
+ let c = self . fast_graph . edges_fwd [ edge_id] . replaced_in_edge ;
225
219
if c == INVALID_NODE {
226
220
self . fast_graph . edges_fwd [ edge_id] . replaced_in_edge = INVALID_EDGE ;
227
- self . fast_graph . edges_fwd [ edge_id] . replaced_out_edge = INVALID_EDGE ;
221
+ debug_assert_eq ! (
222
+ INVALID_EDGE ,
223
+ self . fast_graph. edges_fwd[ edge_id] . replaced_out_edge
224
+ ) ;
228
225
} else {
229
226
self . fast_graph . edges_fwd [ edge_id] . replaced_in_edge = self . get_in_edge_id ( c, i) ;
230
227
self . fast_graph . edges_fwd [ edge_id] . replaced_out_edge =
@@ -235,10 +232,13 @@ impl FastGraphBuilder {
235
232
236
233
for i in 0 ..self . num_nodes {
237
234
for edge_id in self . fast_graph . begin_in_edges ( i) ..self . fast_graph . end_in_edges ( i) {
238
- let c = self . center_nodes_bwd [ edge_id] ;
235
+ let c = self . fast_graph . edges_bwd [ edge_id] . replaced_in_edge ;
239
236
if c == INVALID_NODE {
240
237
self . fast_graph . edges_bwd [ edge_id] . replaced_in_edge = INVALID_EDGE ;
241
- self . fast_graph . edges_bwd [ edge_id] . replaced_out_edge = INVALID_EDGE ;
238
+ debug_assert_eq ! (
239
+ INVALID_EDGE ,
240
+ self . fast_graph. edges_bwd[ edge_id] . replaced_out_edge
241
+ ) ;
242
242
} else {
243
243
self . fast_graph . edges_bwd [ edge_id] . replaced_in_edge =
244
244
self . get_in_edge_id ( c, self . fast_graph . edges_bwd [ edge_id] . adj_node ) ;
0 commit comments