Changeset 1910:f95eea8c34b0 in lemon-0.x for lemon/bits/graph_extender.h
- Timestamp:
- 01/26/06 17:24:40 (18 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@2485
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/bits/graph_extender.h
r1909 r1910 3 3 * 4 4 * Copyright (C) 2006 Egervary Jeno Kombinatorikus Optimalizalasi 5 * Kutatocsoport (Egervary Research Gro upon Combinatorial Optimization,5 * Kutatocsoport (Egervary Research Groin on Combinatorial Optimization, 6 6 * EGRES). 7 7 * … … 380 380 381 381 template <typename _Base> 382 class UBipartiteGraphExtender : public _Base {382 class BpUGraphExtender : public _Base { 383 383 public: 384 384 typedef _Base Parent; 385 typedef UBipartiteGraphExtender Graph;385 typedef BpUGraphExtender Graph; 386 386 387 387 typedef typename Parent::Node Node; … … 394 394 395 395 Node source(const UEdge& edge) const { 396 return upperNode(edge);396 return aNode(edge); 397 397 } 398 398 Node target(const UEdge& edge) const { 399 return lowerNode(edge);399 return bNode(edge); 400 400 } 401 401 402 402 void firstInc(UEdge& edge, bool& direction, const Node& node) const { 403 if (Parent:: upper(node)) {404 Parent::first Down(edge, node);403 if (Parent::aNode(node)) { 404 Parent::firstOut(edge, node); 405 405 direction = true; 406 406 } else { 407 Parent::first Up(edge, node);407 Parent::firstIn(edge, node); 408 408 direction = static_cast<UEdge&>(edge) == INVALID; 409 409 } … … 411 411 void nextInc(UEdge& edge, bool& direction) const { 412 412 if (direction) { 413 Parent::next Down(edge);414 } else { 415 Parent::next Up(edge);413 Parent::nextOut(edge); 414 } else { 415 Parent::nextIn(edge); 416 416 if (edge == INVALID) direction = true; 417 417 } … … 427 427 428 428 class Edge : public UEdge { 429 friend class UBipartiteGraphExtender;429 friend class BpUGraphExtender; 430 430 protected: 431 431 bool forward; … … 462 462 463 463 void firstOut(Edge& edge, const Node& node) const { 464 if (Parent:: upper(node)) {465 Parent::first Down(edge, node);464 if (Parent::aNode(node)) { 465 Parent::firstOut(edge, node); 466 466 edge.forward = true; 467 467 } else { 468 Parent::first Up(edge, node);468 Parent::firstIn(edge, node); 469 469 edge.forward = static_cast<UEdge&>(edge) == INVALID; 470 470 } … … 472 472 void nextOut(Edge& edge) const { 473 473 if (edge.forward) { 474 Parent::next Down(edge);475 } else { 476 Parent::next Up(edge);474 Parent::nextOut(edge); 475 } else { 476 Parent::nextIn(edge); 477 477 edge.forward = static_cast<UEdge&>(edge) == INVALID; 478 478 } … … 480 480 481 481 void firstIn(Edge& edge, const Node& node) const { 482 if (Parent:: lower(node)) {483 Parent::first Up(edge, node);482 if (Parent::bNode(node)) { 483 Parent::firstIn(edge, node); 484 484 edge.forward = true; 485 485 } else { 486 Parent::first Down(edge, node);486 Parent::firstOut(edge, node); 487 487 edge.forward = static_cast<UEdge&>(edge) == INVALID; 488 488 } … … 490 490 void nextIn(Edge& edge) const { 491 491 if (edge.forward) { 492 Parent::next Up(edge);493 } else { 494 Parent::next Down(edge);492 Parent::nextIn(edge); 493 } else { 494 Parent::nextOut(edge); 495 495 edge.forward = static_cast<UEdge&>(edge) == INVALID; 496 496 } … … 498 498 499 499 Node source(const Edge& edge) const { 500 return edge.forward ? Parent:: upperNode(edge) : Parent::lowerNode(edge);500 return edge.forward ? Parent::aNode(edge) : Parent::bNode(edge); 501 501 } 502 502 Node target(const Edge& edge) const { 503 return edge.forward ? Parent:: lowerNode(edge) : Parent::upperNode(edge);503 return edge.forward ? Parent::bNode(edge) : Parent::aNode(edge); 504 504 } 505 505 … … 535 535 } 536 536 537 class UpperNode : public Node {538 friend class UBipartiteGraphExtender;537 class ANode : public Node { 538 friend class BpUGraphExtender; 539 539 public: 540 UpperNode() {}541 UpperNode(const Node& node) : Node(node) {542 LEMON_ASSERT(Parent:: upper(node) || node == INVALID,540 ANode() {} 541 ANode(const Node& node) : Node(node) { 542 LEMON_ASSERT(Parent::aNode(node) || node == INVALID, 543 543 typename Parent::NodeSetError()); 544 544 } 545 UpperNode(Invalid) : Node(INVALID) {}545 ANode(Invalid) : Node(INVALID) {} 546 546 }; 547 547 548 void first( UpperNode& node) const {549 Parent::first Upper(static_cast<Node&>(node));550 } 551 void next( UpperNode& node) const {552 Parent::next Upper(static_cast<Node&>(node));553 } 554 555 int id(const UpperNode& node) const {556 return Parent:: upperId(node);557 } 558 559 class LowerNode : public Node {560 friend class UBipartiteGraphExtender;548 void first(ANode& node) const { 549 Parent::firstANode(static_cast<Node&>(node)); 550 } 551 void next(ANode& node) const { 552 Parent::nextANode(static_cast<Node&>(node)); 553 } 554 555 int id(const ANode& node) const { 556 return Parent::aNodeId(node); 557 } 558 559 class BNode : public Node { 560 friend class BpUGraphExtender; 561 561 public: 562 LowerNode() {}563 LowerNode(const Node& node) : Node(node) {564 LEMON_ASSERT(Parent:: lower(node) || node == INVALID,562 BNode() {} 563 BNode(const Node& node) : Node(node) { 564 LEMON_ASSERT(Parent::bNode(node) || node == INVALID, 565 565 typename Parent::NodeSetError()); 566 566 } 567 LowerNode(Invalid) : Node(INVALID) {}567 BNode(Invalid) : Node(INVALID) {} 568 568 }; 569 569 570 void first( LowerNode& node) const {571 Parent::first Lower(static_cast<Node&>(node));572 } 573 void next( LowerNode& node) const {574 Parent::next Lower(static_cast<Node&>(node));570 void first(BNode& node) const { 571 Parent::firstBNode(static_cast<Node&>(node)); 572 } 573 void next(BNode& node) const { 574 Parent::nextBNode(static_cast<Node&>(node)); 575 575 } 576 576 577 int id(const LowerNode& node) const {578 return Parent:: upperId(node);577 int id(const BNode& node) const { 578 return Parent::aNodeId(node); 579 579 } 580 580 … … 584 584 return Parent::maxNodeId(); 585 585 } 586 int maxId( LowerNode) const {587 return Parent::max LowerId();588 } 589 int maxId( UpperNode) const {590 return Parent::max UpperId();586 int maxId(BNode) const { 587 return Parent::maxBNodeId(); 588 } 589 int maxId(ANode) const { 590 return Parent::maxANodeId(); 591 591 } 592 592 int maxId(Edge) const { … … 601 601 return Parent::nodeFromId(id); 602 602 } 603 UpperNode fromId(int id, UpperNode) const {604 return Parent::from UpperId(id);605 } 606 LowerNode fromId(int id, LowerNode) const {607 return Parent::from LowerId(id);603 ANode fromId(int id, ANode) const { 604 return Parent::fromANodeId(id); 605 } 606 BNode fromId(int id, BNode) const { 607 return Parent::fromBNodeId(id); 608 608 } 609 609 Edge fromId(int id, Edge) const {
Note: See TracChangeset
for help on using the changeset viewer.