# HG changeset patch
# User Peter Kovacs <kpeter@inf.elte.hu>
# Date 1239290144 -7200
# Node ID 63e0373c4caa2e888dfdfb0403353f3b0c0f7e83
# Parent add8195ad331e8e75b4abe4f09a323a1dbca061f
Standard graph maps are required to be reference maps (#190)
diff --git a/lemon/bits/graph_adaptor_extender.h b/lemon/bits/graph_adaptor_extender.h
|
a
|
b
|
|
| 22 | 22 | #include <lemon/core.h> |
| 23 | 23 | #include <lemon/error.h> |
| 24 | 24 | |
| 25 | | #include <lemon/bits/default_map.h> |
| 26 | | |
| 27 | 25 | namespace lemon { |
| 28 | 26 | |
| 29 | 27 | template <typename _Digraph> |
diff --git a/lemon/bits/map_extender.h b/lemon/bits/map_extender.h
|
a
|
b
|
|
| 47 | 47 | |
| 48 | 48 | typedef typename Parent::Key Key; |
| 49 | 49 | typedef typename Parent::Value Value; |
| | 50 | typedef typename Parent::Reference Reference; |
| | 51 | typedef typename Parent::ConstReference ConstReference; |
| 50 | 52 | |
| 51 | 53 | class MapIt; |
| 52 | 54 | class ConstMapIt; |
| … |
… |
|
| 187 | 189 | |
| 188 | 190 | typedef typename Parent::Key Key; |
| 189 | 191 | typedef typename Parent::Value Value; |
| | 192 | typedef typename Parent::Reference Reference; |
| | 193 | typedef typename Parent::ConstReference ConstReference; |
| 190 | 194 | |
| 191 | 195 | class MapIt; |
| 192 | 196 | class ConstMapIt; |
diff --git a/lemon/concepts/digraph.h b/lemon/concepts/digraph.h
|
a
|
b
|
|
| 421 | 421 | /// Gives back the opposite node on the given arc. |
| 422 | 422 | Node oppositeNode(const Node&, const Arc&) const { return INVALID; } |
| 423 | 423 | |
| 424 | | /// \brief Read write map of the nodes to type \c T. |
| | 424 | /// \brief Reference map of the nodes to type \c T. |
| 425 | 425 | /// |
| 426 | | /// ReadWrite map of the nodes to type \c T. |
| 427 | | /// \sa Reference |
| | 426 | /// Reference map of the nodes to type \c T. |
| 428 | 427 | template<class T> |
| 429 | | class NodeMap : public ReadWriteMap< Node, T > { |
| | 428 | class NodeMap : public ReferenceMap<Node, T, T&, const T&> { |
| 430 | 429 | public: |
| 431 | 430 | |
| 432 | 431 | ///\e |
| … |
… |
|
| 436 | 435 | |
| 437 | 436 | private: |
| 438 | 437 | ///Copy constructor |
| 439 | | NodeMap(const NodeMap& nm) : ReadWriteMap< Node, T >(nm) { } |
| | 438 | NodeMap(const NodeMap& nm) : |
| | 439 | ReferenceMap<Node, T, T&, const T&>(nm) { } |
| 440 | 440 | ///Assignment operator |
| 441 | 441 | template <typename CMap> |
| 442 | 442 | NodeMap& operator=(const CMap&) { |
| … |
… |
|
| 445 | 445 | } |
| 446 | 446 | }; |
| 447 | 447 | |
| 448 | | /// \brief Read write map of the arcs to type \c T. |
| | 448 | /// \brief Reference map of the arcs to type \c T. |
| 449 | 449 | /// |
| 450 | 450 | /// Reference map of the arcs to type \c T. |
| 451 | | /// \sa Reference |
| 452 | 451 | template<class T> |
| 453 | | class ArcMap : public ReadWriteMap<Arc,T> { |
| | 452 | class ArcMap : public ReferenceMap<Arc, T, T&, const T&> { |
| 454 | 453 | public: |
| 455 | 454 | |
| 456 | 455 | ///\e |
| … |
… |
|
| 459 | 458 | ArcMap(const Digraph&, T) { } |
| 460 | 459 | private: |
| 461 | 460 | ///Copy constructor |
| 462 | | ArcMap(const ArcMap& em) : ReadWriteMap<Arc,T>(em) { } |
| | 461 | ArcMap(const ArcMap& em) : |
| | 462 | ReferenceMap<Arc, T, T&, const T&>(em) { } |
| 463 | 463 | ///Assignment operator |
| 464 | 464 | template <typename CMap> |
| 465 | 465 | ArcMap& operator=(const CMap&) { |
| … |
… |
|
| 471 | 471 | template <typename _Digraph> |
| 472 | 472 | struct Constraints { |
| 473 | 473 | void constraints() { |
| | 474 | checkConcept<BaseDigraphComponent, _Digraph>(); |
| 474 | 475 | checkConcept<IterableDigraphComponent<>, _Digraph>(); |
| 475 | 476 | checkConcept<IDableDigraphComponent<>, _Digraph>(); |
| 476 | 477 | checkConcept<MappableDigraphComponent<>, _Digraph>(); |
diff --git a/lemon/concepts/graph.h b/lemon/concepts/graph.h
|
a
|
b
|
|
| 497 | 497 | InArcIt& operator++() { return *this; } |
| 498 | 498 | }; |
| 499 | 499 | |
| 500 | | /// \brief Read write map of the nodes to type \c T. |
| | 500 | /// \brief Reference map of the nodes to type \c T. |
| 501 | 501 | /// |
| 502 | | /// ReadWrite map of the nodes to type \c T. |
| 503 | | /// \sa Reference |
| | 502 | /// Reference map of the nodes to type \c T. |
| 504 | 503 | template<class T> |
| 505 | | class NodeMap : public ReadWriteMap< Node, T > |
| | 504 | class NodeMap : public ReferenceMap<Node, T, T&, const T&> |
| 506 | 505 | { |
| 507 | 506 | public: |
| 508 | 507 | |
| … |
… |
|
| 513 | 512 | |
| 514 | 513 | private: |
| 515 | 514 | ///Copy constructor |
| 516 | | NodeMap(const NodeMap& nm) : ReadWriteMap< Node, T >(nm) { } |
| | 515 | NodeMap(const NodeMap& nm) : |
| | 516 | ReferenceMap<Node, T, T&, const T&>(nm) { } |
| 517 | 517 | ///Assignment operator |
| 518 | 518 | template <typename CMap> |
| 519 | 519 | NodeMap& operator=(const CMap&) { |
| … |
… |
|
| 522 | 522 | } |
| 523 | 523 | }; |
| 524 | 524 | |
| 525 | | /// \brief Read write map of the directed arcs to type \c T. |
| | 525 | /// \brief Reference map of the arcs to type \c T. |
| 526 | 526 | /// |
| 527 | | /// Reference map of the directed arcs to type \c T. |
| 528 | | /// \sa Reference |
| | 527 | /// Reference map of the arcs to type \c T. |
| 529 | 528 | template<class T> |
| 530 | | class ArcMap : public ReadWriteMap<Arc,T> |
| | 529 | class ArcMap : public ReferenceMap<Arc, T, T&, const T&> |
| 531 | 530 | { |
| 532 | 531 | public: |
| 533 | 532 | |
| … |
… |
|
| 537 | 536 | ArcMap(const Graph&, T) { } |
| 538 | 537 | private: |
| 539 | 538 | ///Copy constructor |
| 540 | | ArcMap(const ArcMap& em) : ReadWriteMap<Arc,T>(em) { } |
| | 539 | ArcMap(const ArcMap& em) : |
| | 540 | ReferenceMap<Arc, T, T&, const T&>(em) { } |
| 541 | 541 | ///Assignment operator |
| 542 | 542 | template <typename CMap> |
| 543 | 543 | ArcMap& operator=(const CMap&) { |
| … |
… |
|
| 546 | 546 | } |
| 547 | 547 | }; |
| 548 | 548 | |
| 549 | | /// Read write map of the edges to type \c T. |
| | 549 | /// Reference map of the edges to type \c T. |
| 550 | 550 | |
| 551 | | /// Reference map of the arcs to type \c T. |
| 552 | | /// \sa Reference |
| | 551 | /// Reference map of the edges to type \c T. |
| 553 | 552 | template<class T> |
| 554 | | class EdgeMap : public ReadWriteMap<Edge,T> |
| | 553 | class EdgeMap : public ReferenceMap<Edge, T, T&, const T&> |
| 555 | 554 | { |
| 556 | 555 | public: |
| 557 | 556 | |
| … |
… |
|
| 561 | 560 | EdgeMap(const Graph&, T) { } |
| 562 | 561 | private: |
| 563 | 562 | ///Copy constructor |
| 564 | | EdgeMap(const EdgeMap& em) : ReadWriteMap<Edge,T>(em) {} |
| | 563 | EdgeMap(const EdgeMap& em) : |
| | 564 | ReferenceMap<Edge, T, T&, const T&>(em) {} |
| 565 | 565 | ///Assignment operator |
| 566 | 566 | template <typename CMap> |
| 567 | 567 | EdgeMap& operator=(const CMap&) { |
| … |
… |
|
| 748 | 748 | template <typename _Graph> |
| 749 | 749 | struct Constraints { |
| 750 | 750 | void constraints() { |
| | 751 | checkConcept<BaseGraphComponent, _Graph>(); |
| 751 | 752 | checkConcept<IterableGraphComponent<>, _Graph>(); |
| 752 | 753 | checkConcept<IDableGraphComponent<>, _Graph>(); |
| 753 | 754 | checkConcept<MappableGraphComponent<>, _Graph>(); |
diff --git a/lemon/concepts/graph_components.h b/lemon/concepts/graph_components.h
|
a
|
b
|
|
| 988 | 988 | /// This class describes the concept of standard graph maps, i.e. |
| 989 | 989 | /// the \c NodeMap, \c ArcMap and \c EdgeMap subtypes of digraph and |
| 990 | 990 | /// graph types, which can be used for associating data to graph items. |
| | 991 | /// The standard graph maps must conform to the ReferenceMap concept. |
| 991 | 992 | template <typename GR, typename K, typename V> |
| 992 | | class GraphMap : public ReadWriteMap<K, V> { |
| | 993 | class GraphMap : public ReferenceMap<K, V, V&, const V&> { |
| 993 | 994 | public: |
| 994 | 995 | |
| 995 | 996 | typedef ReadWriteMap<K, V> Parent; |
| … |
… |
|
| 1000 | 1001 | typedef K Key; |
| 1001 | 1002 | /// The value type of the map. |
| 1002 | 1003 | typedef V Value; |
| | 1004 | /// The reference type of the map. |
| | 1005 | typedef Value& Reference; |
| | 1006 | /// The const reference type of the map. |
| | 1007 | typedef const Value& ConstReference; |
| | 1008 | |
| | 1009 | // The reference map tag. |
| | 1010 | typedef True ReferenceMapTag; |
| 1003 | 1011 | |
| 1004 | 1012 | /// \brief Construct a new map. |
| 1005 | 1013 | /// |
| … |
… |
|
| 1031 | 1039 | template<typename _Map> |
| 1032 | 1040 | struct Constraints { |
| 1033 | 1041 | void constraints() { |
| 1034 | | checkConcept<ReadWriteMap<Key, Value>, _Map >(); |
| | 1042 | checkConcept |
| | 1043 | <ReferenceMap<Key, Value, Value&, const Value&>, _Map>(); |
| 1035 | 1044 | _Map m1(g); |
| 1036 | 1045 | _Map m2(g,t); |
| 1037 | 1046 | |
| … |
… |
|
| 1073 | 1082 | /// \brief Standard graph map for the nodes. |
| 1074 | 1083 | /// |
| 1075 | 1084 | /// Standard graph map for the nodes. |
| | 1085 | /// It conforms to the ReferenceMap concept. |
| 1076 | 1086 | template <typename V> |
| 1077 | | class NodeMap : public GraphMap<Digraph, Node, V> { |
| | 1087 | class NodeMap : public GraphMap<MappableDigraphComponent, Node, V> { |
| 1078 | 1088 | public: |
| 1079 | 1089 | typedef GraphMap<MappableDigraphComponent, Node, V> Parent; |
| 1080 | 1090 | |
| … |
… |
|
| 1110 | 1120 | /// \brief Standard graph map for the arcs. |
| 1111 | 1121 | /// |
| 1112 | 1122 | /// Standard graph map for the arcs. |
| | 1123 | /// It conforms to the ReferenceMap concept. |
| 1113 | 1124 | template <typename V> |
| 1114 | | class ArcMap : public GraphMap<Digraph, Arc, V> { |
| | 1125 | class ArcMap : public GraphMap<MappableDigraphComponent, Arc, V> { |
| 1115 | 1126 | public: |
| 1116 | 1127 | typedef GraphMap<MappableDigraphComponent, Arc, V> Parent; |
| 1117 | 1128 | |
| … |
… |
|
| 1207 | 1218 | /// \brief Standard graph map for the edges. |
| 1208 | 1219 | /// |
| 1209 | 1220 | /// Standard graph map for the edges. |
| | 1221 | /// It conforms to the ReferenceMap concept. |
| 1210 | 1222 | template <typename V> |
| 1211 | | class EdgeMap : public GraphMap<Graph, Edge, V> { |
| | 1223 | class EdgeMap : public GraphMap<MappableGraphComponent, Edge, V> { |
| 1212 | 1224 | public: |
| 1213 | 1225 | typedef GraphMap<MappableGraphComponent, Edge, V> Parent; |
| 1214 | 1226 | |