Changes in lemon/bits/edge_set_extender.h [732:a27356ceb5bd:1270:dceba191c00d] in lemon
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/bits/edge_set_extender.h
r732 r1270 1 /* -*- C++-*-1 /* -*- mode: C++; indent-tabs-mode: nil; -*- 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 085 * Copyright (C) 2003-2013 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 283 285 typedef typename Parent::Node Node; 284 286 typedef typename Parent::Arc Arc; … … 311 313 Node oppositeNode(const Node &n, const Edge &e) const { 312 314 if( n == Parent::u(e)) 313 315 return Parent::v(e); 314 316 else if( n == Parent::v(e)) 315 317 return Parent::u(e); 316 318 else 317 319 return INVALID; 318 320 } 319 321 … … 339 341 340 342 using Parent::notifier; 341 343 342 344 ArcNotifier& notifier(Arc) const { 343 345 return arc_notifier; … … 349 351 350 352 351 class NodeIt : public Node { 353 class NodeIt : public Node { 352 354 const Graph* graph; 353 355 public: … … 358 360 359 361 explicit NodeIt(const Graph& _graph) : graph(&_graph) { 360 361 } 362 363 NodeIt(const Graph& _graph, const Node& node) 364 365 366 NodeIt& operator++() { 367 368 return *this; 369 } 370 371 }; 372 373 374 class ArcIt : public Arc { 362 _graph.first(static_cast<Node&>(*this)); 363 } 364 365 NodeIt(const Graph& _graph, const Node& node) 366 : Node(node), graph(&_graph) {} 367 368 NodeIt& operator++() { 369 graph->next(*this); 370 return *this; 371 } 372 373 }; 374 375 376 class ArcIt : public Arc { 375 377 const Graph* graph; 376 378 public: … … 381 383 382 384 explicit ArcIt(const Graph& _graph) : graph(&_graph) { 383 384 } 385 386 ArcIt(const Graph& _graph, const Arc& e) : 387 388 389 ArcIt& operator++() { 390 391 return *this; 392 } 393 394 }; 395 396 397 class OutArcIt : public Arc { 385 _graph.first(static_cast<Arc&>(*this)); 386 } 387 388 ArcIt(const Graph& _graph, const Arc& e) : 389 Arc(e), graph(&_graph) { } 390 391 ArcIt& operator++() { 392 graph->next(*this); 393 return *this; 394 } 395 396 }; 397 398 399 class OutArcIt : public Arc { 398 400 const Graph* graph; 399 401 public: … … 403 405 OutArcIt(Invalid i) : Arc(i) { } 404 406 405 OutArcIt(const Graph& _graph, const Node& node) 406 407 408 } 409 410 OutArcIt(const Graph& _graph, const Arc& arc) 411 412 413 OutArcIt& operator++() { 414 415 return *this; 416 } 417 418 }; 419 420 421 class InArcIt : public Arc { 407 OutArcIt(const Graph& _graph, const Node& node) 408 : graph(&_graph) { 409 _graph.firstOut(*this, node); 410 } 411 412 OutArcIt(const Graph& _graph, const Arc& arc) 413 : Arc(arc), graph(&_graph) {} 414 415 OutArcIt& operator++() { 416 graph->nextOut(*this); 417 return *this; 418 } 419 420 }; 421 422 423 class InArcIt : public Arc { 422 424 const Graph* graph; 423 425 public: … … 427 429 InArcIt(Invalid i) : Arc(i) { } 428 430 429 InArcIt(const Graph& _graph, const Node& node) 430 431 432 } 433 434 InArcIt(const Graph& _graph, const Arc& arc) : 435 436 437 InArcIt& operator++() { 438 439 return *this; 440 } 441 442 }; 443 444 445 class EdgeIt : public Parent::Edge { 431 InArcIt(const Graph& _graph, const Node& node) 432 : graph(&_graph) { 433 _graph.firstIn(*this, node); 434 } 435 436 InArcIt(const Graph& _graph, const Arc& arc) : 437 Arc(arc), graph(&_graph) {} 438 439 InArcIt& operator++() { 440 graph->nextIn(*this); 441 return *this; 442 } 443 444 }; 445 446 447 class EdgeIt : public Parent::Edge { 446 448 const Graph* graph; 447 449 public: … … 452 454 453 455 explicit EdgeIt(const Graph& _graph) : graph(&_graph) { 454 455 } 456 457 EdgeIt(const Graph& _graph, const Edge& e) : 458 459 460 EdgeIt& operator++() { 461 462 return *this; 456 _graph.first(static_cast<Edge&>(*this)); 457 } 458 459 EdgeIt(const Graph& _graph, const Edge& e) : 460 Edge(e), graph(&_graph) { } 461 462 EdgeIt& operator++() { 463 graph->next(*this); 464 return *this; 463 465 } 464 466 … … 476 478 477 479 IncEdgeIt(const Graph& _graph, const Node &n) : graph(&_graph) { 478 480 _graph.firstInc(*this, direction, n); 479 481 } 480 482 481 483 IncEdgeIt(const Graph& _graph, const Edge &ue, const Node &n) 482 483 484 : graph(&_graph), Edge(ue) { 485 direction = (_graph.source(ue) == n); 484 486 } 485 487 486 488 IncEdgeIt& operator++() { 487 488 return *this; 489 graph->nextInc(*this, direction); 490 return *this; 489 491 } 490 492 }; … … 522 524 // Returns the base node of the iterator 523 525 Node baseNode(const IncEdgeIt &e) const { 524 return e.direction ? u(e) :v(e);526 return e.direction ? this->u(e) : this->v(e); 525 527 } 526 528 // Running node of the iterator … … 528 530 // Returns the running node of the iterator 529 531 Node runningNode(const IncEdgeIt &e) const { 530 return e.direction ? v(e) :u(e);532 return e.direction ? this->v(e) : this->u(e); 531 533 } 532 534 533 535 534 536 template <typename _Value> 535 class ArcMap 537 class ArcMap 536 538 : public MapExtender<DefaultMap<Graph, Arc, _Value> > { 537 539 typedef MapExtender<DefaultMap<Graph, Arc, _Value> > Parent; 538 540 539 541 public: 540 explicit ArcMap(const Graph& _g) 541 542 ArcMap(const Graph& _g, const _Value& _v) 543 542 explicit ArcMap(const Graph& _g) 543 : Parent(_g) {} 544 ArcMap(const Graph& _g, const _Value& _v) 545 : Parent(_g, _v) {} 544 546 545 547 ArcMap& operator=(const ArcMap& cmap) { 546 548 return operator=<ArcMap>(cmap); 547 549 } 548 550 … … 550 552 ArcMap& operator=(const CMap& cmap) { 551 553 Parent::operator=(cmap); 552 554 return *this; 553 555 } 554 556 … … 557 559 558 560 template <typename _Value> 559 class EdgeMap 561 class EdgeMap 560 562 : public MapExtender<DefaultMap<Graph, Edge, _Value> > { 561 563 typedef MapExtender<DefaultMap<Graph, Edge, _Value> > Parent; 562 564 563 565 public: 564 explicit EdgeMap(const Graph& _g) 565 566 567 EdgeMap(const Graph& _g, const _Value& _v) 568 566 explicit EdgeMap(const Graph& _g) 567 : Parent(_g) {} 568 569 EdgeMap(const Graph& _g, const _Value& _v) 570 : Parent(_g, _v) {} 569 571 570 572 EdgeMap& operator=(const EdgeMap& cmap) { 571 573 return operator=<EdgeMap>(cmap); 572 574 } 573 575 … … 575 577 EdgeMap& operator=(const CMap& cmap) { 576 578 Parent::operator=(cmap); 577 579 return *this; 578 580 } 579 581 … … 592 594 return edge; 593 595 } 594 596 595 597 void clear() { 596 598 notifier(Arc()).clear(); … … 618 620 arc_notifier.clear(); 619 621 } 620 622 621 623 }; 622 624
Note: See TracChangeset
for help on using the changeset viewer.