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){

`