C++17: Use structured bindings · murraycu/graph@78254e3 (original) (raw)
`@@ -118,14 +118,12 @@ class bk_max_flow {
`
118
118
`m_time(1),
`
119
119
`m_last_grow_vertex(graph_traits::null_vertex()){
`
120
120
`// initialize the color-map with gray-values
`
121
``
`-
vertex_iterator vi, v_end;
`
122
``
`-
for(std::tie(vi, v_end) = vertices(m_g); vi != v_end; ++vi){
`
``
121
`+
for(auto [vi, v_end] = vertices(m_g); vi != v_end; ++vi){
`
123
122
`set_tree(*vi, tColorTraits::gray());
`
124
123
` }
`
125
124
`// Initialize flow to zero which means initializing
`
126
125
`// the residual capacity equal to the capacity
`
127
``
`-
edge_iterator ei, e_end;
`
128
``
`-
for(std::tie(ei, e_end) = edges(m_g); ei != e_end; ++ei) {
`
``
126
`+
for(auto [ei, e_end] = edges(m_g); ei != e_end; ++ei) {
`
129
127
`put(m_res_cap_map, *ei, get(m_cap_map, *ei));
`
130
128
`BOOST_ASSERT(get(m_rev_edge_map, get(m_rev_edge_map, *ei)) == *ei); //check if the reverse edge map is build up properly
`
131
129
` }
`
`@@ -141,9 +139,7 @@ class bk_max_flow {
`
141
139
`augment_direct_paths();
`
142
140
`//start the main-loop
`
143
141
`while(true){
`
144
``
`-
bool path_found;
`
145
``
`-
edge_descriptor connecting_edge;
`
146
``
`-
std::tie(connecting_edge, path_found) = grow(); //find a path from source to sink
`
``
142
`+
auto [connecting_edge, path_found] = grow(); //find a path from source to sink
`
147
143
`if(!path_found){
`
148
144
`//we're finished, no more paths were found
`
149
145
`break;
`
`@@ -164,8 +160,7 @@ class bk_max_flow {
`
164
160
`// graphcuts for segmentation, as most of the nodes have source/sink
`
165
161
`// connects but shouldn't have an impact on other maxflow problems
`
166
162
`// (this is done in grow() anyway)
`
167
``
`-
out_edge_iterator ei, e_end;
`
168
``
`-
for(std::tie(ei, e_end) = out_edges(m_source, m_g); ei != e_end; ++ei){
`
``
163
`+
for(auto [ei, e_end] = out_edges(m_source, m_g); ei != e_end; ++ei){
`
169
164
`auto from_source = *ei;
`
170
165
`auto current_node = target(from_source, m_g);
`
171
166
`if(current_node == m_sink){
`
`@@ -174,9 +169,8 @@ class bk_max_flow {
`
174
169
` m_flow += cap;
`
175
170
`continue;
`
176
171
` }
`
177
``
`-
edge_descriptor to_sink;
`
178
``
`-
bool is_there;
`
179
``
`-
std::tie(to_sink, is_there) = lookup_edge(current_node, m_sink, m_g);
`
``
172
+
``
173
`+
auto [to_sink, is_there] = lookup_edge(current_node, m_sink, m_g);
`
180
174
`if(is_there){
`
181
175
`auto cap_from_source = get(m_res_cap_map, from_source);
`
182
176
`auto cap_to_sink = get(m_res_cap_map, to_sink);
`
`@@ -216,7 +210,7 @@ class bk_max_flow {
`
216
210
`add_active_node(current_node);
`
217
211
` }
`
218
212
` }
`
219
``
`-
for(std::tie(ei, e_end) = out_edges(m_sink, m_g); ei != e_end; ++ei){
`
``
213
`+
for(auto [ei, e_end] = out_edges(m_sink, m_g); ei != e_end; ++ei){
`
220
214
`auto to_sink = get(m_rev_edge_map, *ei);
`
221
215
`auto current_node = source(to_sink, m_g);
`
222
216
`if(get(m_res_cap_map, to_sink)){
`
`@@ -249,7 +243,7 @@ class bk_max_flow {
`
249
243
` out_edge_iterator ei, e_end;
`
250
244
`if(current_node != m_last_grow_vertex){
`
251
245
` m_last_grow_vertex = current_node;
`
252
``
`-
std::tie(m_last_grow_edge_it, m_last_grow_edge_end) = out_edges(current_node, m_g);
`
``
246
`+
auto [m_last_grow_edge_it, m_last_grow_edge_end] = out_edges(current_node, m_g);
`
253
247
` }
`
254
248
`for(; m_last_grow_edge_it != m_last_grow_edge_end; ++m_last_grow_edge_it) {
`
255
249
`auto out_edge = *m_last_grow_edge_it;
`
`@@ -283,7 +277,7 @@ class bk_max_flow {
`
283
277
` out_edge_iterator ei, e_end;
`
284
278
`if(current_node != m_last_grow_vertex){
`
285
279
` m_last_grow_vertex = current_node;
`
286
``
`-
std::tie(m_last_grow_edge_it, m_last_grow_edge_end) = out_edges(current_node, m_g);
`
``
280
`+
auto [m_last_grow_edge_it, m_last_grow_edge_end] = out_edges(current_node, m_g);
`
287
281
` }
`
288
282
`for(; m_last_grow_edge_it != m_last_grow_edge_end; ++m_last_grow_edge_it){
`
289
283
`auto in_edge = get(m_rev_edge_map, *m_last_grow_edge_it);
`
`@@ -419,8 +413,7 @@ class bk_max_flow {
`
419
413
`//we're in the source-tree
`
420
414
`auto min_distance = (std::numeric_limits::max)();
`
421
415
` edge_descriptor new_parent_edge;
`
422
``
`-
out_edge_iterator ei, e_end;
`
423
``
`-
for(std::tie(ei, e_end) = out_edges(current_node, m_g); ei != e_end; ++ei){
`
``
416
`+
for(auto [ei, e_end] = out_edges(current_node, m_g); ei != e_end; ++ei){
`
424
417
`const auto in_edge = get(m_rev_edge_map, *ei);
`
425
418
`BOOST_ASSERT(target(in_edge, m_g) == current_node); //we should be the target of this edge
`
426
419
`if(get(m_res_cap_map, in_edge) > 0){
`
`@@ -439,7 +432,7 @@ class bk_max_flow {
`
439
432
`put(m_time_map, current_node, m_time);
`
440
433
` } else{
`
441
434
`put(m_time_map, current_node, 0);
`
442
``
`-
for(std::tie(ei, e_end) = out_edges(current_node, m_g); ei != e_end; ++ei){
`
``
435
`+
for(auto [ei, e_end] = out_edges(current_node, m_g); ei != e_end; ++ei){
`
443
436
`auto in_edge = get(m_rev_edge_map, *ei);
`
444
437
`auto other_node = source(in_edge, m_g);
`
445
438
`if(get_tree(other_node) == tColorTraits::black() && other_node != m_source){
`
`@@ -460,10 +453,9 @@ class bk_max_flow {
`
460
453
`else{
`
461
454
`//now we should be in the sink-tree, check that...
`
462
455
`BOOST_ASSERT(get_tree(current_node) == tColorTraits::white());
`
463
``
`-
out_edge_iterator ei, e_end;
`
464
456
` edge_descriptor new_parent_edge;
`
465
457
`auto min_distance = (std::numeric_limits::max)();
`
466
``
`-
for(std::tie(ei, e_end) = out_edges(current_node, m_g); ei != e_end; ++ei){
`
``
458
`+
for(auto [ei, e_end] = out_edges(current_node, m_g); ei != e_end; ++ei){
`
467
459
`const auto out_edge = *ei;
`
468
460
`if(get(m_res_cap_map, out_edge) > 0){
`
469
461
`const auto other_node = target(out_edge, m_g);
`
`@@ -480,7 +472,7 @@ class bk_max_flow {
`
480
472
`put(m_time_map, current_node, m_time);
`
481
473
` } else{
`
482
474
`put(m_time_map, current_node, 0);
`
483
``
`-
for(std::tie(ei, e_end) = out_edges(current_node, m_g); ei != e_end; ++ei){
`
``
475
`+
for(auto [ei, e_end] = out_edges(current_node, m_g); ei != e_end; ++ei){
`
484
476
`const auto out_edge = *ei;
`
485
477
`const auto other_node = target(out_edge, m_g);
`
486
478
`if(get_tree(other_node) == tColorTraits::white() && other_node != m_sink){
`