Changes in lemon/bits/edge_set_extender.h [968:77704bf2a4ae:664:4137ef9aacc6] in lemon
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/bits/edge_set_extender.h
r968 r664 1 /* -*- mode: C++; indent-tabs-mode: nil;-*-1 /* -*- C++ -*- 2 2 * 3 * This file is a part of LEMON, a generic C++ optimization library .3 * This file is a part of LEMON, a generic C++ optimization library 4 4 * 5 * Copyright (C) 2003-20 105 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 64 64 Node oppositeNode(const Node &n, const Arc &e) const { 65 65 if (n == Parent::source(e)) 66 66 return Parent::target(e); 67 67 else if(n==Parent::target(e)) 68 68 return Parent::source(e); 69 69 else 70 70 return INVALID; 71 71 } 72 72 … … 92 92 // Iterable extensions 93 93 94 class NodeIt : public Node { 94 class NodeIt : public Node { 95 95 const Digraph* digraph; 96 96 public: … … 101 101 102 102 explicit NodeIt(const Digraph& _graph) : digraph(&_graph) { 103 104 } 105 106 NodeIt(const Digraph& _graph, const Node& node) 107 108 109 NodeIt& operator++() { 110 111 return *this; 112 } 113 114 }; 115 116 117 class ArcIt : public Arc { 103 _graph.first(static_cast<Node&>(*this)); 104 } 105 106 NodeIt(const Digraph& _graph, const Node& node) 107 : Node(node), digraph(&_graph) {} 108 109 NodeIt& operator++() { 110 digraph->next(*this); 111 return *this; 112 } 113 114 }; 115 116 117 class ArcIt : public Arc { 118 118 const Digraph* digraph; 119 119 public: … … 124 124 125 125 explicit ArcIt(const Digraph& _graph) : digraph(&_graph) { 126 127 } 128 129 ArcIt(const Digraph& _graph, const Arc& e) : 130 131 132 ArcIt& operator++() { 133 134 return *this; 135 } 136 137 }; 138 139 140 class OutArcIt : public Arc { 126 _graph.first(static_cast<Arc&>(*this)); 127 } 128 129 ArcIt(const Digraph& _graph, const Arc& e) : 130 Arc(e), digraph(&_graph) { } 131 132 ArcIt& operator++() { 133 digraph->next(*this); 134 return *this; 135 } 136 137 }; 138 139 140 class OutArcIt : public Arc { 141 141 const Digraph* digraph; 142 142 public: … … 146 146 OutArcIt(Invalid i) : Arc(i) { } 147 147 148 OutArcIt(const Digraph& _graph, const Node& node) 149 150 151 } 152 153 OutArcIt(const Digraph& _graph, const Arc& arc) 154 155 156 OutArcIt& operator++() { 157 158 return *this; 159 } 160 161 }; 162 163 164 class InArcIt : public Arc { 148 OutArcIt(const Digraph& _graph, const Node& node) 149 : digraph(&_graph) { 150 _graph.firstOut(*this, node); 151 } 152 153 OutArcIt(const Digraph& _graph, const Arc& arc) 154 : Arc(arc), digraph(&_graph) {} 155 156 OutArcIt& operator++() { 157 digraph->nextOut(*this); 158 return *this; 159 } 160 161 }; 162 163 164 class InArcIt : public Arc { 165 165 const Digraph* digraph; 166 166 public: … … 170 170 InArcIt(Invalid i) : Arc(i) { } 171 171 172 InArcIt(const Digraph& _graph, const Node& node) 173 174 175 } 176 177 InArcIt(const Digraph& _graph, const Arc& arc) : 178 179 180 InArcIt& operator++() { 181 182 return *this; 172 InArcIt(const Digraph& _graph, const Node& node) 173 : digraph(&_graph) { 174 _graph.firstIn(*this, node); 175 } 176 177 InArcIt(const Digraph& _graph, const Arc& arc) : 178 Arc(arc), digraph(&_graph) {} 179 180 InArcIt& operator++() { 181 digraph->nextIn(*this); 182 return *this; 183 183 } 184 184 … … 216 216 217 217 // Mappable extension 218 218 219 219 template <typename _Value> 220 class ArcMap 220 class ArcMap 221 221 : public MapExtender<DefaultMap<Digraph, Arc, _Value> > { 222 222 typedef MapExtender<DefaultMap<Digraph, Arc, _Value> > Parent; 223 223 224 224 public: 225 explicit ArcMap(const Digraph& _g) 226 227 ArcMap(const Digraph& _g, const _Value& _v) 228 225 explicit ArcMap(const Digraph& _g) 226 : Parent(_g) {} 227 ArcMap(const Digraph& _g, const _Value& _v) 228 : Parent(_g, _v) {} 229 229 230 230 ArcMap& operator=(const ArcMap& cmap) { 231 231 return operator=<ArcMap>(cmap); 232 232 } 233 233 … … 235 235 ArcMap& operator=(const CMap& cmap) { 236 236 Parent::operator=(cmap); 237 237 return *this; 238 238 } 239 239 … … 248 248 return arc; 249 249 } 250 250 251 251 void clear() { 252 252 notifier(Arc()).clear(); … … 281 281 typedef EdgeSetExtender Graph; 282 282 283 typedef True UndirectedTag;284 285 283 typedef typename Parent::Node Node; 286 284 typedef typename Parent::Arc Arc; … … 313 311 Node oppositeNode(const Node &n, const Edge &e) const { 314 312 if( n == Parent::u(e)) 315 313 return Parent::v(e); 316 314 else if( n == Parent::v(e)) 317 315 return Parent::u(e); 318 316 else 319 317 return INVALID; 320 318 } 321 319 … … 341 339 342 340 using Parent::notifier; 343 341 344 342 ArcNotifier& notifier(Arc) const { 345 343 return arc_notifier; … … 351 349 352 350 353 class NodeIt : public Node { 351 class NodeIt : public Node { 354 352 const Graph* graph; 355 353 public: … … 360 358 361 359 explicit NodeIt(const Graph& _graph) : graph(&_graph) { 362 363 } 364 365 NodeIt(const Graph& _graph, const Node& node) 366 367 368 NodeIt& operator++() { 369 370 return *this; 371 } 372 373 }; 374 375 376 class ArcIt : public Arc { 360 _graph.first(static_cast<Node&>(*this)); 361 } 362 363 NodeIt(const Graph& _graph, const Node& node) 364 : Node(node), graph(&_graph) {} 365 366 NodeIt& operator++() { 367 graph->next(*this); 368 return *this; 369 } 370 371 }; 372 373 374 class ArcIt : public Arc { 377 375 const Graph* graph; 378 376 public: … … 383 381 384 382 explicit ArcIt(const Graph& _graph) : graph(&_graph) { 385 386 } 387 388 ArcIt(const Graph& _graph, const Arc& e) : 389 390 391 ArcIt& operator++() { 392 393 return *this; 394 } 395 396 }; 397 398 399 class OutArcIt : public Arc { 383 _graph.first(static_cast<Arc&>(*this)); 384 } 385 386 ArcIt(const Graph& _graph, const Arc& e) : 387 Arc(e), graph(&_graph) { } 388 389 ArcIt& operator++() { 390 graph->next(*this); 391 return *this; 392 } 393 394 }; 395 396 397 class OutArcIt : public Arc { 400 398 const Graph* graph; 401 399 public: … … 405 403 OutArcIt(Invalid i) : Arc(i) { } 406 404 407 OutArcIt(const Graph& _graph, const Node& node) 408 409 410 } 411 412 OutArcIt(const Graph& _graph, const Arc& arc) 413 414 415 OutArcIt& operator++() { 416 417 return *this; 418 } 419 420 }; 421 422 423 class InArcIt : public Arc { 405 OutArcIt(const Graph& _graph, const Node& node) 406 : graph(&_graph) { 407 _graph.firstOut(*this, node); 408 } 409 410 OutArcIt(const Graph& _graph, const Arc& arc) 411 : Arc(arc), graph(&_graph) {} 412 413 OutArcIt& operator++() { 414 graph->nextOut(*this); 415 return *this; 416 } 417 418 }; 419 420 421 class InArcIt : public Arc { 424 422 const Graph* graph; 425 423 public: … … 429 427 InArcIt(Invalid i) : Arc(i) { } 430 428 431 InArcIt(const Graph& _graph, const Node& node) 432 433 434 } 435 436 InArcIt(const Graph& _graph, const Arc& arc) : 437 438 439 InArcIt& operator++() { 440 441 return *this; 442 } 443 444 }; 445 446 447 class EdgeIt : public Parent::Edge { 429 InArcIt(const Graph& _graph, const Node& node) 430 : graph(&_graph) { 431 _graph.firstIn(*this, node); 432 } 433 434 InArcIt(const Graph& _graph, const Arc& arc) : 435 Arc(arc), graph(&_graph) {} 436 437 InArcIt& operator++() { 438 graph->nextIn(*this); 439 return *this; 440 } 441 442 }; 443 444 445 class EdgeIt : public Parent::Edge { 448 446 const Graph* graph; 449 447 public: … … 454 452 455 453 explicit EdgeIt(const Graph& _graph) : graph(&_graph) { 456 457 } 458 459 EdgeIt(const Graph& _graph, const Edge& e) : 460 461 462 EdgeIt& operator++() { 463 464 return *this; 454 _graph.first(static_cast<Edge&>(*this)); 455 } 456 457 EdgeIt(const Graph& _graph, const Edge& e) : 458 Edge(e), graph(&_graph) { } 459 460 EdgeIt& operator++() { 461 graph->next(*this); 462 return *this; 465 463 } 466 464 … … 478 476 479 477 IncEdgeIt(const Graph& _graph, const Node &n) : graph(&_graph) { 480 478 _graph.firstInc(*this, direction, n); 481 479 } 482 480 483 481 IncEdgeIt(const Graph& _graph, const Edge &ue, const Node &n) 484 485 482 : graph(&_graph), Edge(ue) { 483 direction = (_graph.source(ue) == n); 486 484 } 487 485 488 486 IncEdgeIt& operator++() { 489 490 return *this; 487 graph->nextInc(*this, direction); 488 return *this; 491 489 } 492 490 }; … … 535 533 536 534 template <typename _Value> 537 class ArcMap 535 class ArcMap 538 536 : public MapExtender<DefaultMap<Graph, Arc, _Value> > { 539 537 typedef MapExtender<DefaultMap<Graph, Arc, _Value> > Parent; 540 538 541 539 public: 542 explicit ArcMap(const Graph& _g)543 544 ArcMap(const Graph& _g, const _Value& _v) 545 540 ArcMap(const Graph& _g) 541 : Parent(_g) {} 542 ArcMap(const Graph& _g, const _Value& _v) 543 : Parent(_g, _v) {} 546 544 547 545 ArcMap& operator=(const ArcMap& cmap) { 548 546 return operator=<ArcMap>(cmap); 549 547 } 550 548 … … 552 550 ArcMap& operator=(const CMap& cmap) { 553 551 Parent::operator=(cmap); 554 552 return *this; 555 553 } 556 554 … … 559 557 560 558 template <typename _Value> 561 class EdgeMap 559 class EdgeMap 562 560 : public MapExtender<DefaultMap<Graph, Edge, _Value> > { 563 561 typedef MapExtender<DefaultMap<Graph, Edge, _Value> > Parent; 564 562 565 563 public: 566 explicit EdgeMap(const Graph& _g)567 568 569 EdgeMap(const Graph& _g, const _Value& _v) 570 564 EdgeMap(const Graph& _g) 565 : Parent(_g) {} 566 567 EdgeMap(const Graph& _g, const _Value& _v) 568 : Parent(_g, _v) {} 571 569 572 570 EdgeMap& operator=(const EdgeMap& cmap) { 573 571 return operator=<EdgeMap>(cmap); 574 572 } 575 573 … … 577 575 EdgeMap& operator=(const CMap& cmap) { 578 576 Parent::operator=(cmap); 579 577 return *this; 580 578 } 581 579 … … 594 592 return edge; 595 593 } 596 594 597 595 void clear() { 598 596 notifier(Arc()).clear(); … … 620 618 arc_notifier.clear(); 621 619 } 622 620 623 621 }; 624 622
Note: See TracChangeset
for help on using the changeset viewer.