Changeset 2031:080d51024ac5 in lemon-0.x for lemon/ugraph_adaptor.h
- Timestamp:
- 04/03/06 11:45:23 (18 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@2670
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/ugraph_adaptor.h
r1993 r2031 102 102 typedef EdgeNumTagIndicator<Graph> EdgeNumTag; 103 103 int edgeNum() const { return graph->edgeNum(); } 104 int uEdgeNum() const { return graph->uEdgeNum(); } 104 105 105 106 typedef FindEdgeTagIndicator<Graph> FindEdgeTag; … … 119 120 120 121 void erase(const Node& i) const { graph->erase(i); } 121 void erase(const Edge& i) const { graph->erase(i); }122 void erase(const UEdge& i) const { graph->erase(i); } 122 123 123 124 void clear() const { graph->clear(); } 124 125 125 int id(const Node& v) const { return graph->id(v); }126 int id(const UEdge& e) const { return graph->id(e); }127 128 126 bool direction(const Edge& e) const { return graph->direction(e); } 129 127 Edge direct(const UEdge& e, bool d) const { return graph->direct(e, d); } 128 129 int id(const Node& v) const { return graph->id(v); } 130 int id(const Edge& e) const { return graph->id(e); } 131 int id(const UEdge& e) const { return graph->id(e); } 132 133 Node fromNodeId(int id) const { 134 return graph->fromNodeId(id); 135 } 136 137 Edge fromEdgeId(int id) const { 138 return graph->fromEdgeId(id); 139 } 140 141 UEdge fromUEdgeId(int id) const { 142 return graph->fromUEdgeId(id); 143 } 130 144 131 145 int maxNodeId() const { … … 174 188 template <typename CMap> 175 189 NodeMap& operator=(const CMap& cmap) { 176 checkConcept<concept::ReadMap<Node, _Value>, CMap>(); 177 const typename Parent::Graph* graph = Parent::getGraph(); 178 Node it; 179 for (graph->first(it); it != INVALID; graph->next(it)) { 180 Parent::set(it, cmap[it]); 181 } 182 return *this; 183 } 190 Parent::operator=(cmap); 191 return *this; 192 } 193 184 194 }; 185 195 … … 199 209 template <typename CMap> 200 210 EdgeMap& operator=(const CMap& cmap) { 201 checkConcept<concept::ReadMap<Edge, _Value>, CMap>(); 202 const typename Parent::Graph* graph = Parent::getGraph(); 203 Edge it; 204 for (graph->first(it); it != INVALID; graph->next(it)) { 205 Parent::set(it, cmap[it]); 206 } 211 Parent::operator=(cmap); 207 212 return *this; 208 213 } … … 224 229 template <typename CMap> 225 230 UEdgeMap& operator=(const CMap& cmap) { 226 checkConcept<concept::ReadMap<UEdge, _Value>, CMap>(); 227 const typename Parent::Graph* graph = Parent::getGraph(); 228 UEdge it; 229 for (graph->first(it); it != INVALID; graph->next(it)) { 230 Parent::set(it, cmap[it]); 231 } 232 return *this; 231 Parent::operator=(cmap); 232 return *this; 233 233 } 234 234 }; … … 255 255 public: 256 256 typedef _UGraph Graph; 257 typedef SubUGraphAdaptorBase Adaptor; 257 258 typedef UGraphAdaptorBase<_UGraph> Parent; 258 259 protected: … … 417 418 return uedge; 418 419 } 420 421 template <typename _Value> 422 class NodeMap 423 : public SubMapExtender<Adaptor, 424 typename Parent::template NodeMap<_Value> > 425 { 426 public: 427 typedef Adaptor Graph; 428 typedef SubMapExtender<Adaptor, typename Parent:: 429 template NodeMap<_Value> > Parent; 430 431 NodeMap(const Graph& graph) 432 : Parent(graph) {} 433 NodeMap(const Graph& graph, const _Value& value) 434 : Parent(graph, value) {} 435 436 NodeMap& operator=(const NodeMap& cmap) { 437 return operator=<NodeMap>(cmap); 438 } 439 440 template <typename CMap> 441 NodeMap& operator=(const CMap& cmap) { 442 Parent::operator=(cmap); 443 return *this; 444 } 445 }; 446 447 template <typename _Value> 448 class EdgeMap 449 : public SubMapExtender<Adaptor, 450 typename Parent::template EdgeMap<_Value> > 451 { 452 public: 453 typedef Adaptor Graph; 454 typedef SubMapExtender<Adaptor, typename Parent:: 455 template EdgeMap<_Value> > Parent; 456 457 EdgeMap(const Graph& graph) 458 : Parent(graph) {} 459 EdgeMap(const Graph& graph, const _Value& value) 460 : Parent(graph, value) {} 461 462 EdgeMap& operator=(const EdgeMap& cmap) { 463 return operator=<EdgeMap>(cmap); 464 } 465 466 template <typename CMap> 467 EdgeMap& operator=(const CMap& cmap) { 468 Parent::operator=(cmap); 469 return *this; 470 } 471 }; 472 473 template <typename _Value> 474 class UEdgeMap 475 : public SubMapExtender<Adaptor, 476 typename Parent::template UEdgeMap<_Value> > 477 { 478 public: 479 typedef Adaptor Graph; 480 typedef SubMapExtender<Adaptor, typename Parent:: 481 template UEdgeMap<_Value> > Parent; 482 483 UEdgeMap(const Graph& graph) 484 : Parent(graph) {} 485 UEdgeMap(const Graph& graph, const _Value& value) 486 : Parent(graph, value) {} 487 488 UEdgeMap& operator=(const UEdgeMap& cmap) { 489 return operator=<UEdgeMap>(cmap); 490 } 491 492 template <typename CMap> 493 UEdgeMap& operator=(const CMap& cmap) { 494 Parent::operator=(cmap); 495 return *this; 496 } 497 }; 498 419 499 }; 420 500 … … 424 504 public: 425 505 typedef _UGraph Graph; 506 typedef SubUGraphAdaptorBase Adaptor; 426 507 typedef UGraphAdaptorBase<_UGraph> Parent; 427 508 protected: … … 560 641 return uedge; 561 642 } 643 644 template <typename _Value> 645 class NodeMap 646 : public SubMapExtender<Adaptor, 647 typename Parent::template NodeMap<_Value> > 648 { 649 public: 650 typedef Adaptor Graph; 651 typedef SubMapExtender<Adaptor, typename Parent:: 652 template NodeMap<_Value> > Parent; 653 654 NodeMap(const Graph& graph) 655 : Parent(graph) {} 656 NodeMap(const Graph& graph, const _Value& value) 657 : Parent(graph, value) {} 658 659 NodeMap& operator=(const NodeMap& cmap) { 660 return operator=<NodeMap>(cmap); 661 } 662 663 template <typename CMap> 664 NodeMap& operator=(const CMap& cmap) { 665 Parent::operator=(cmap); 666 return *this; 667 } 668 }; 669 670 template <typename _Value> 671 class EdgeMap 672 : public SubMapExtender<Adaptor, 673 typename Parent::template EdgeMap<_Value> > 674 { 675 public: 676 typedef Adaptor Graph; 677 typedef SubMapExtender<Adaptor, typename Parent:: 678 template EdgeMap<_Value> > Parent; 679 680 EdgeMap(const Graph& graph) 681 : Parent(graph) {} 682 EdgeMap(const Graph& graph, const _Value& value) 683 : Parent(graph, value) {} 684 685 EdgeMap& operator=(const EdgeMap& cmap) { 686 return operator=<EdgeMap>(cmap); 687 } 688 689 template <typename CMap> 690 EdgeMap& operator=(const CMap& cmap) { 691 Parent::operator=(cmap); 692 return *this; 693 } 694 }; 695 696 template <typename _Value> 697 class UEdgeMap 698 : public SubMapExtender<Adaptor, 699 typename Parent::template UEdgeMap<_Value> > 700 { 701 public: 702 typedef Adaptor Graph; 703 typedef SubMapExtender<Adaptor, typename Parent:: 704 template UEdgeMap<_Value> > Parent; 705 706 UEdgeMap(const Graph& graph) 707 : Parent(graph) {} 708 UEdgeMap(const Graph& graph, const _Value& value) 709 : Parent(graph, value) {} 710 711 UEdgeMap& operator=(const UEdgeMap& cmap) { 712 return operator=<UEdgeMap>(cmap); 713 } 714 715 template <typename CMap> 716 UEdgeMap& operator=(const CMap& cmap) { 717 Parent::operator=(cmap); 718 return *this; 719 } 720 }; 562 721 }; 563 722 … … 679 838 } 680 839 681 682 840 /// \brief An adaptor for hiding undirected edges from an undirected graph. 683 841 /// … … 705 863 706 864 public: 865 707 866 EdgeSubUGraphAdaptor(Graph& _graph, UEdgeFilterMap& _uedge_filter_map) : 708 867 Parent(), const_true_map(true) { … … 711 870 Parent::setUEdgeFilterMap(_uedge_filter_map); 712 871 } 872 713 873 }; 714 874 … … 838 998 class NodeMap : public _UGraph::template NodeMap<_Value> { 839 999 public: 1000 840 1001 typedef typename _UGraph::template NodeMap<_Value> Parent; 1002 841 1003 explicit NodeMap(const DirUGraphAdaptorBase& ga) 842 : Parent(*ga.graph) { } 1004 : Parent(*ga.graph) {} 1005 843 1006 NodeMap(const DirUGraphAdaptorBase& ga, const _Value& value) 844 : Parent(*ga.graph, value) { } 1007 : Parent(*ga.graph, value) {} 1008 1009 NodeMap& operator=(const NodeMap& cmap) { 1010 return operator=<NodeMap>(cmap); 1011 } 1012 1013 template <typename CMap> 1014 NodeMap& operator=(const CMap& cmap) { 1015 Parent::operator=(cmap); 1016 return *this; 1017 } 1018 845 1019 }; 846 1020 … … 848 1022 class EdgeMap : public _UGraph::template UEdgeMap<_Value> { 849 1023 public: 1024 850 1025 typedef typename _UGraph::template UEdgeMap<_Value> Parent; 1026 851 1027 explicit EdgeMap(const DirUGraphAdaptorBase& ga) 852 1028 : Parent(*ga.graph) { } 1029 853 1030 EdgeMap(const DirUGraphAdaptorBase& ga, const _Value& value) 854 1031 : Parent(*ga.graph, value) { } 1032 1033 EdgeMap& operator=(const EdgeMap& cmap) { 1034 return operator=<EdgeMap>(cmap); 1035 } 1036 1037 template <typename CMap> 1038 EdgeMap& operator=(const CMap& cmap) { 1039 Parent::operator=(cmap); 1040 return *this; 1041 } 855 1042 }; 856 1043
Note: See TracChangeset
for help on using the changeset viewer.