Changes in / [730:4a45c8808b33:731:0977046c60d2] in lemon-main
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/groups.dox
r710 r715 281 281 282 282 /** 283 @defgroup geomdat Geometric Data Structures 284 @ingroup auxdat 285 \brief Geometric data structures implemented in LEMON. 286 287 This group contains geometric data structures implemented in LEMON. 288 289 - \ref lemon::dim2::Point "dim2::Point" implements a two dimensional 290 vector with the usual operations. 291 - \ref lemon::dim2::Box "dim2::Box" can be used to determine the 292 rectangular bounding box of a set of \ref lemon::dim2::Point 293 "dim2::Point"'s. 294 */ 295 296 /** 297 @defgroup matrices Matrices 298 @ingroup auxdat 299 \brief Two dimensional data storages implemented in LEMON. 300 301 This group contains two dimensional data storages implemented in LEMON. 302 */ 303 304 /** 283 305 @defgroup algs Algorithms 284 306 \brief This group contains the several algorithms … … 320 342 321 343 /** 344 @defgroup spantree Minimum Spanning Tree Algorithms 345 @ingroup algs 346 \brief Algorithms for finding minimum cost spanning trees and arborescences. 347 348 This group contains the algorithms for finding minimum cost spanning 349 trees and arborescences. 350 */ 351 352 /** 322 353 @defgroup max_flow Maximum Flow Algorithms 323 354 @ingroup algs … … 397 428 398 429 \f[ \min_{X \subset V, X\not\in \{\emptyset, V\}} 399 \sum_{uv\in A ,u\in X, v\not\in X}cap(uv) \f]430 \sum_{uv\in A: u\in X, v\not\in X}cap(uv) \f] 400 431 401 432 LEMON contains several algorithms related to minimum cut problems: … … 410 441 If you want to find minimum cut just between two distinict nodes, 411 442 see the \ref max_flow "maximum flow problem". 412 */413 414 /**415 @defgroup graph_properties Connectivity and Other Graph Properties416 @ingroup algs417 \brief Algorithms for discovering the graph properties418 419 This group contains the algorithms for discovering the graph properties420 like connectivity, bipartiteness, euler property, simplicity etc.421 422 \image html edge_biconnected_components.png423 \image latex edge_biconnected_components.eps "bi-edge-connected components" width=\textwidth424 */425 426 /**427 @defgroup planar Planarity Embedding and Drawing428 @ingroup algs429 \brief Algorithms for planarity checking, embedding and drawing430 431 This group contains the algorithms for planarity checking,432 embedding and drawing.433 434 \image html planar.png435 \image latex planar.eps "Plane graph" width=\textwidth436 443 */ 437 444 … … 477 484 478 485 /** 479 @defgroup spantree Minimum Spanning Tree Algorithms 480 @ingroup algs 481 \brief Algorithms for finding minimum cost spanning trees and arborescences. 482 483 This group contains the algorithms for finding minimum cost spanning 484 trees and arborescences. 486 @defgroup graph_properties Connectivity and Other Graph Properties 487 @ingroup algs 488 \brief Algorithms for discovering the graph properties 489 490 This group contains the algorithms for discovering the graph properties 491 like connectivity, bipartiteness, euler property, simplicity etc. 492 493 \image html connected_components.png 494 \image latex connected_components.eps "Connected components" width=\textwidth 495 */ 496 497 /** 498 @defgroup planar Planarity Embedding and Drawing 499 @ingroup algs 500 \brief Algorithms for planarity checking, embedding and drawing 501 502 This group contains the algorithms for planarity checking, 503 embedding and drawing. 504 505 \image html planar.png 506 \image latex planar.eps "Plane graph" width=\textwidth 507 */ 508 509 /** 510 @defgroup approx Approximation Algorithms 511 @ingroup algs 512 \brief Approximation algorithms. 513 514 This group contains the approximation and heuristic algorithms 515 implemented in LEMON. 485 516 */ 486 517 … … 492 523 This group contains some algorithms implemented in LEMON 493 524 in order to make it easier to implement complex algorithms. 494 */495 496 /**497 @defgroup approx Approximation Algorithms498 @ingroup algs499 \brief Approximation algorithms.500 501 This group contains the approximation and heuristic algorithms502 implemented in LEMON.503 525 */ 504 526 … … 609 631 610 632 /** 611 @defgroup dimacs_group DIMACS format633 @defgroup dimacs_group DIMACS Format 612 634 @ingroup io_group 613 635 \brief Read and write files in DIMACS format … … 671 693 672 694 /** 695 @defgroup tools Standalone Utility Applications 696 697 Some utility applications are listed here. 698 699 The standard compilation procedure (<tt>./configure;make</tt>) will compile 700 them, as well. 701 */ 702 703 /** 673 704 \anchor demoprograms 674 705 … … 682 713 */ 683 714 684 /**685 @defgroup tools Standalone Utility Applications686 687 Some utility applications are listed here.688 689 The standard compilation procedure (<tt>./configure;make</tt>) will compile690 them, as well.691 */692 693 715 } -
lemon/bfs.h
r503 r717 48 48 ///The type of the map that stores the predecessor 49 49 ///arcs of the shortest paths. 50 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.50 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 51 51 typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap; 52 52 ///Instantiates a \c PredMap. … … 63 63 64 64 ///The type of the map that indicates which nodes are processed. 65 ///It must meet the \ref concepts::WriteMap "WriteMap" concept. 65 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 66 ///By default it is a NullMap. 66 67 typedef NullMap<typename Digraph::Node,bool> ProcessedMap; 67 68 ///Instantiates a \c ProcessedMap. … … 82 83 83 84 ///The type of the map that indicates which nodes are reached. 84 ///It must meetthe \ref concepts::ReadWriteMap "ReadWriteMap" concept.85 ///It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept. 85 86 typedef typename Digraph::template NodeMap<bool> ReachedMap; 86 87 ///Instantiates a \c ReachedMap. … … 97 98 98 99 ///The type of the map that stores the distances of the nodes. 99 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.100 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 100 101 typedef typename Digraph::template NodeMap<int> DistMap; 101 102 ///Instantiates a \c DistMap. … … 226 227 ///\ref named-templ-param "Named parameter" for setting 227 228 ///\c PredMap type. 228 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.229 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 229 230 template <class T> 230 231 struct SetPredMap : public Bfs< Digraph, SetPredMapTraits<T> > { … … 246 247 ///\ref named-templ-param "Named parameter" for setting 247 248 ///\c DistMap type. 248 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.249 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 249 250 template <class T> 250 251 struct SetDistMap : public Bfs< Digraph, SetDistMapTraits<T> > { … … 266 267 ///\ref named-templ-param "Named parameter" for setting 267 268 ///\c ReachedMap type. 268 ///It must meetthe \ref concepts::ReadWriteMap "ReadWriteMap" concept.269 ///It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept. 269 270 template <class T> 270 271 struct SetReachedMap : public Bfs< Digraph, SetReachedMapTraits<T> > { … … 286 287 ///\ref named-templ-param "Named parameter" for setting 287 288 ///\c ProcessedMap type. 288 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.289 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 289 290 template <class T> 290 291 struct SetProcessedMap : public Bfs< Digraph, SetProcessedMapTraits<T> > { … … 414 415 ///The simplest way to execute the BFS algorithm is to use one of the 415 416 ///member functions called \ref run(Node) "run()".\n 416 ///If you need more control on the execution, firstyou have to call417 ///\ref init() , then you can add several source nodes with417 ///If you need better control on the execution, you have to call 418 ///\ref init() first, then you can add several source nodes with 418 419 ///\ref addSource(). Finally the actual path computation can be 419 420 ///performed with one of the \ref start() functions. … … 738 739 ///@{ 739 740 740 ///The shortest path to anode.741 742 ///Returns the shortest path to a node.741 ///The shortest path to the given node. 742 743 ///Returns the shortest path to the given node from the root(s). 743 744 /// 744 745 ///\warning \c t should be reached from the root(s). … … 748 749 Path path(Node t) const { return Path(*G, *_pred, t); } 749 750 750 ///The distance of anode from the root(s).751 752 ///Returns the distance of anode from the root(s).751 ///The distance of the given node from the root(s). 752 753 ///Returns the distance of the given node from the root(s). 753 754 /// 754 755 ///\warning If node \c v is not reached from the root(s), then … … 759 760 int dist(Node v) const { return (*_dist)[v]; } 760 761 761 ///Returns the 'previous arc' of the shortest path tree for a node. 762 762 ///\brief Returns the 'previous arc' of the shortest path tree for 763 ///the given node. 764 /// 763 765 ///This function returns the 'previous arc' of the shortest path 764 766 ///tree for the node \c v, i.e. it returns the last arc of a … … 767 769 /// 768 770 ///The shortest path tree used here is equal to the shortest path 769 ///tree used in \ref predNode() .771 ///tree used in \ref predNode() and \ref predMap(). 770 772 /// 771 773 ///\pre Either \ref run(Node) "run()" or \ref init() … … 773 775 Arc predArc(Node v) const { return (*_pred)[v];} 774 776 775 ///Returns the 'previous node' of the shortest path tree for a node. 776 777 ///\brief Returns the 'previous node' of the shortest path tree for 778 ///the given node. 779 /// 777 780 ///This function returns the 'previous node' of the shortest path 778 781 ///tree for the node \c v, i.e. it returns the last but one node 779 /// froma shortest path from a root to \c v. It is \c INVALID782 ///of a shortest path from a root to \c v. It is \c INVALID 780 783 ///if \c v is not reached from the root(s) or if \c v is a root. 781 784 /// 782 785 ///The shortest path tree used here is equal to the shortest path 783 ///tree used in \ref predArc() .786 ///tree used in \ref predArc() and \ref predMap(). 784 787 /// 785 788 ///\pre Either \ref run(Node) "run()" or \ref init() … … 802 805 /// 803 806 ///Returns a const reference to the node map that stores the predecessor 804 ///arcs, which form the shortest path tree .807 ///arcs, which form the shortest path tree (forest). 805 808 /// 806 809 ///\pre Either \ref run(Node) "run()" or \ref init() … … 808 811 const PredMap &predMap() const { return *_pred;} 809 812 810 ///Checks if anode is reached from the root(s).813 ///Checks if the given node is reached from the root(s). 811 814 812 815 ///Returns \c true if \c v is reached from the root(s). … … 834 837 ///The type of the map that stores the predecessor 835 838 ///arcs of the shortest paths. 836 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.839 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 837 840 typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap; 838 841 ///Instantiates a PredMap. … … 849 852 850 853 ///The type of the map that indicates which nodes are processed. 851 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.854 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 852 855 ///By default it is a NullMap. 853 856 typedef NullMap<typename Digraph::Node,bool> ProcessedMap; … … 869 872 870 873 ///The type of the map that indicates which nodes are reached. 871 ///It must meetthe \ref concepts::ReadWriteMap "ReadWriteMap" concept.874 ///It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept. 872 875 typedef typename Digraph::template NodeMap<bool> ReachedMap; 873 876 ///Instantiates a ReachedMap. … … 884 887 885 888 ///The type of the map that stores the distances of the nodes. 886 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.889 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 887 890 typedef typename Digraph::template NodeMap<int> DistMap; 888 891 ///Instantiates a DistMap. … … 899 902 900 903 ///The type of the shortest paths. 901 ///It must meetthe \ref concepts::Path "Path" concept.904 ///It must conform to the \ref concepts::Path "Path" concept. 902 905 typedef lemon::Path<Digraph> Path; 903 906 }; … … 905 908 /// Default traits class used by BfsWizard 906 909 907 /// To make it easier to use Bfs algorithm 908 /// we have created a wizard class. 909 /// This \ref BfsWizard class needs default traits, 910 /// as well as the \ref Bfs class. 911 /// The \ref BfsWizardBase is a class to be the default traits of the 912 /// \ref BfsWizard class. 910 /// Default traits class used by BfsWizard. 911 /// \tparam GR The type of the digraph. 913 912 template<class GR> 914 913 class BfsWizardBase : public BfsWizardDefaultTraits<GR> … … 938 937 /// Constructor. 939 938 940 /// This constructor does not require parameters, thereforeit initiates939 /// This constructor does not require parameters, it initiates 941 940 /// all of the attributes to \c 0. 942 941 BfsWizardBase() : _g(0), _reached(0), _processed(0), _pred(0), … … 968 967 typedef TR Base; 969 968 970 ///The type of the digraph the algorithm runs on.971 969 typedef typename TR::Digraph Digraph; 972 970 … … 976 974 typedef typename Digraph::OutArcIt OutArcIt; 977 975 978 ///\brief The type of the map that stores the predecessor979 ///arcs of the shortest paths.980 976 typedef typename TR::PredMap PredMap; 981 ///\brief The type of the map that stores the distances of the nodes.982 977 typedef typename TR::DistMap DistMap; 983 ///\brief The type of the map that indicates which nodes are reached.984 978 typedef typename TR::ReachedMap ReachedMap; 985 ///\brief The type of the map that indicates which nodes are processed.986 979 typedef typename TR::ProcessedMap ProcessedMap; 987 ///The type of the shortest paths988 980 typedef typename TR::Path Path; 989 981 … … 1068 1060 SetPredMapBase(const TR &b) : TR(b) {} 1069 1061 }; 1070 ///\brief \ref named-func-param "Named parameter" 1071 ///for setting PredMap object. 1072 /// 1073 ///\ref named-func-param "Named parameter" 1074 ///for setting PredMap object. 1062 1063 ///\brief \ref named-templ-param "Named parameter" for setting 1064 ///the predecessor map. 1065 /// 1066 ///\ref named-templ-param "Named parameter" function for setting 1067 ///the map that stores the predecessor arcs of the nodes. 1075 1068 template<class T> 1076 1069 BfsWizard<SetPredMapBase<T> > predMap(const T &t) … … 1086 1079 SetReachedMapBase(const TR &b) : TR(b) {} 1087 1080 }; 1088 ///\brief \ref named-func-param "Named parameter" 1089 ///for setting ReachedMap object. 1090 /// 1091 /// \ref named-func-param "Named parameter" 1092 ///for setting ReachedMap object. 1081 1082 ///\brief \ref named-templ-param "Named parameter" for setting 1083 ///the reached map. 1084 /// 1085 ///\ref named-templ-param "Named parameter" function for setting 1086 ///the map that indicates which nodes are reached. 1093 1087 template<class T> 1094 1088 BfsWizard<SetReachedMapBase<T> > reachedMap(const T &t) … … 1104 1098 SetDistMapBase(const TR &b) : TR(b) {} 1105 1099 }; 1106 ///\brief \ref named-func-param "Named parameter" 1107 ///for setting DistMap object. 1108 /// 1109 /// \ref named-func-param "Named parameter" 1110 ///for setting DistMap object. 1100 1101 ///\brief \ref named-templ-param "Named parameter" for setting 1102 ///the distance map. 1103 /// 1104 ///\ref named-templ-param "Named parameter" function for setting 1105 ///the map that stores the distances of the nodes calculated 1106 ///by the algorithm. 1111 1107 template<class T> 1112 1108 BfsWizard<SetDistMapBase<T> > distMap(const T &t) … … 1122 1118 SetProcessedMapBase(const TR &b) : TR(b) {} 1123 1119 }; 1124 ///\brief \ref named-func-param "Named parameter" 1125 ///for setting ProcessedMap object. 1126 /// 1127 /// \ref named-func-param "Named parameter" 1128 ///for setting ProcessedMap object. 1120 1121 ///\brief \ref named-func-param "Named parameter" for setting 1122 ///the processed map. 1123 /// 1124 ///\ref named-templ-param "Named parameter" function for setting 1125 ///the map that indicates which nodes are processed. 1129 1126 template<class T> 1130 1127 BfsWizard<SetProcessedMapBase<T> > processedMap(const T &t) … … 1265 1262 /// 1266 1263 /// The type of the map that indicates which nodes are reached. 1267 /// It must meetthe \ref concepts::ReadWriteMap "ReadWriteMap" concept.1264 /// It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept. 1268 1265 typedef typename Digraph::template NodeMap<bool> ReachedMap; 1269 1266 … … 1426 1423 /// The simplest way to execute the BFS algorithm is to use one of the 1427 1424 /// member functions called \ref run(Node) "run()".\n 1428 /// If you need more control on the execution, firstyou have to call1429 /// \ref init() , then you can add several source nodes with1425 /// If you need better control on the execution, you have to call 1426 /// \ref init() first, then you can add several source nodes with 1430 1427 /// \ref addSource(). Finally the actual path computation can be 1431 1428 /// performed with one of the \ref start() functions. … … 1736 1733 ///@{ 1737 1734 1738 /// \brief Checks if anode is reached from the root(s).1735 /// \brief Checks if the given node is reached from the root(s). 1739 1736 /// 1740 1737 /// Returns \c true if \c v is reached from the root(s). -
lemon/bits/map_extender.h
r617 r718 50 50 typedef typename Parent::ConstReference ConstReference; 51 51 52 typedef typename Parent::ReferenceMapTag ReferenceMapTag; 53 52 54 class MapIt; 53 55 class ConstMapIt; … … 192 194 typedef typename Parent::ConstReference ConstReference; 193 195 196 typedef typename Parent::ReferenceMapTag ReferenceMapTag; 197 194 198 class MapIt; 195 199 class ConstMapIt; -
lemon/circulation.h
r689 r715 73 73 /// It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" 74 74 /// concept. 75 #ifdef DOXYGEN 76 typedef GR::ArcMap<Value> FlowMap; 77 #else 75 78 typedef typename Digraph::template ArcMap<Value> FlowMap; 79 #endif 76 80 77 81 /// \brief Instantiates a FlowMap. … … 88 92 /// The elevator type used by the algorithm. 89 93 /// 90 /// \sa Elevator 91 /// \sa LinkedElevator 94 /// \sa Elevator, LinkedElevator 95 #ifdef DOXYGEN 96 typedef lemon::Elevator<GR, GR::Node> Elevator; 97 #else 92 98 typedef lemon::Elevator<Digraph, typename Digraph::Node> Elevator; 99 #endif 93 100 94 101 /// \brief Instantiates an Elevator. … … 470 477 /// \name Execution Control 471 478 /// The simplest way to execute the algorithm is to call \ref run().\n 472 /// If you need morecontrol on the initial solution or the execution,473 /// first you have to call one of the \ref init() functions, then479 /// If you need better control on the initial solution or the execution, 480 /// you have to call one of the \ref init() functions first, then 474 481 /// the \ref start() function. 475 482 -
lemon/concepts/maps.h
r529 r718 183 183 template<typename _ReferenceMap> 184 184 struct Constraints { 185 void constraints() { 185 typename enable_if<typename _ReferenceMap::ReferenceMapTag, void>::type 186 constraints() { 186 187 checkConcept<ReadWriteMap<K, T>, _ReferenceMap >(); 187 188 ref = m[key]; -
lemon/dfs.h
r584 r717 48 48 ///The type of the map that stores the predecessor 49 49 ///arcs of the %DFS paths. 50 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.50 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 51 51 typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap; 52 52 ///Instantiates a \c PredMap. … … 63 63 64 64 ///The type of the map that indicates which nodes are processed. 65 ///It must meet the \ref concepts::WriteMap "WriteMap" concept. 65 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 66 ///By default it is a NullMap. 66 67 typedef NullMap<typename Digraph::Node,bool> ProcessedMap; 67 68 ///Instantiates a \c ProcessedMap. … … 82 83 83 84 ///The type of the map that indicates which nodes are reached. 84 ///It must meetthe \ref concepts::ReadWriteMap "ReadWriteMap" concept.85 ///It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept. 85 86 typedef typename Digraph::template NodeMap<bool> ReachedMap; 86 87 ///Instantiates a \c ReachedMap. … … 97 98 98 99 ///The type of the map that stores the distances of the nodes. 99 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.100 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 100 101 typedef typename Digraph::template NodeMap<int> DistMap; 101 102 ///Instantiates a \c DistMap. … … 225 226 ///\ref named-templ-param "Named parameter" for setting 226 227 ///\c PredMap type. 227 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.228 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 228 229 template <class T> 229 230 struct SetPredMap : public Dfs<Digraph, SetPredMapTraits<T> > { … … 245 246 ///\ref named-templ-param "Named parameter" for setting 246 247 ///\c DistMap type. 247 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.248 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 248 249 template <class T> 249 250 struct SetDistMap : public Dfs< Digraph, SetDistMapTraits<T> > { … … 265 266 ///\ref named-templ-param "Named parameter" for setting 266 267 ///\c ReachedMap type. 267 ///It must meetthe \ref concepts::ReadWriteMap "ReadWriteMap" concept.268 ///It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept. 268 269 template <class T> 269 270 struct SetReachedMap : public Dfs< Digraph, SetReachedMapTraits<T> > { … … 285 286 ///\ref named-templ-param "Named parameter" for setting 286 287 ///\c ProcessedMap type. 287 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.288 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 288 289 template <class T> 289 290 struct SetProcessedMap : public Dfs< Digraph, SetProcessedMapTraits<T> > { … … 412 413 ///The simplest way to execute the DFS algorithm is to use one of the 413 414 ///member functions called \ref run(Node) "run()".\n 414 ///If you need more control on the execution, firstyou have to call415 ///\ref init() , then you can add a source node with \ref addSource()415 ///If you need better control on the execution, you have to call 416 ///\ref init() first, then you can add a source node with \ref addSource() 416 417 ///and perform the actual computation with \ref start(). 417 418 ///This procedure can be repeated if there are nodes that have not … … 670 671 ///@{ 671 672 672 ///The DFS path to anode.673 674 ///Returns the DFS path to a node.673 ///The DFS path to the given node. 674 675 ///Returns the DFS path to the given node from the root(s). 675 676 /// 676 677 ///\warning \c t should be reached from the root(s). … … 680 681 Path path(Node t) const { return Path(*G, *_pred, t); } 681 682 682 ///The distance of anode from the root(s).683 684 ///Returns the distance of anode from the root(s).683 ///The distance of the given node from the root(s). 684 685 ///Returns the distance of the given node from the root(s). 685 686 /// 686 687 ///\warning If node \c v is not reached from the root(s), then … … 691 692 int dist(Node v) const { return (*_dist)[v]; } 692 693 693 ///Returns the 'previous arc' of the %DFS tree for anode.694 ///Returns the 'previous arc' of the %DFS tree for the given node. 694 695 695 696 ///This function returns the 'previous arc' of the %DFS tree for the … … 699 700 /// 700 701 ///The %DFS tree used here is equal to the %DFS tree used in 701 ///\ref predNode() .702 ///\ref predNode() and \ref predMap(). 702 703 /// 703 704 ///\pre Either \ref run(Node) "run()" or \ref init() … … 705 706 Arc predArc(Node v) const { return (*_pred)[v];} 706 707 707 ///Returns the 'previous node' of the %DFS tree .708 ///Returns the 'previous node' of the %DFS tree for the given node. 708 709 709 710 ///This function returns the 'previous node' of the %DFS 710 711 ///tree for the node \c v, i.e. it returns the last but one node 711 /// froma %DFS path from a root to \c v. It is \c INVALID712 ///of a %DFS path from a root to \c v. It is \c INVALID 712 713 ///if \c v is not reached from the root(s) or if \c v is a root. 713 714 /// 714 715 ///The %DFS tree used here is equal to the %DFS tree used in 715 ///\ref predArc() .716 ///\ref predArc() and \ref predMap(). 716 717 /// 717 718 ///\pre Either \ref run(Node) "run()" or \ref init() … … 734 735 /// 735 736 ///Returns a const reference to the node map that stores the predecessor 736 ///arcs, which form the DFS tree .737 ///arcs, which form the DFS tree (forest). 737 738 /// 738 739 ///\pre Either \ref run(Node) "run()" or \ref init() … … 740 741 const PredMap &predMap() const { return *_pred;} 741 742 742 ///Checks if anode is reached from the root(s).743 ///Checks if the given node. node is reached from the root(s). 743 744 744 745 ///Returns \c true if \c v is reached from the root(s). … … 766 767 ///The type of the map that stores the predecessor 767 768 ///arcs of the %DFS paths. 768 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.769 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 769 770 typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap; 770 771 ///Instantiates a PredMap. … … 781 782 782 783 ///The type of the map that indicates which nodes are processed. 783 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.784 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 784 785 ///By default it is a NullMap. 785 786 typedef NullMap<typename Digraph::Node,bool> ProcessedMap; … … 801 802 802 803 ///The type of the map that indicates which nodes are reached. 803 ///It must meetthe \ref concepts::ReadWriteMap "ReadWriteMap" concept.804 ///It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept. 804 805 typedef typename Digraph::template NodeMap<bool> ReachedMap; 805 806 ///Instantiates a ReachedMap. … … 816 817 817 818 ///The type of the map that stores the distances of the nodes. 818 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.819 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 819 820 typedef typename Digraph::template NodeMap<int> DistMap; 820 821 ///Instantiates a DistMap. … … 831 832 832 833 ///The type of the DFS paths. 833 ///It must meetthe \ref concepts::Path "Path" concept.834 ///It must conform to the \ref concepts::Path "Path" concept. 834 835 typedef lemon::Path<Digraph> Path; 835 836 }; … … 837 838 /// Default traits class used by DfsWizard 838 839 839 /// To make it easier to use Dfs algorithm 840 /// we have created a wizard class. 841 /// This \ref DfsWizard class needs default traits, 842 /// as well as the \ref Dfs class. 843 /// The \ref DfsWizardBase is a class to be the default traits of the 844 /// \ref DfsWizard class. 840 /// Default traits class used by DfsWizard. 841 /// \tparam GR The type of the digraph. 845 842 template<class GR> 846 843 class DfsWizardBase : public DfsWizardDefaultTraits<GR> … … 870 867 /// Constructor. 871 868 872 /// This constructor does not require parameters, thereforeit initiates869 /// This constructor does not require parameters, it initiates 873 870 /// all of the attributes to \c 0. 874 871 DfsWizardBase() : _g(0), _reached(0), _processed(0), _pred(0), … … 900 897 typedef TR Base; 901 898 902 ///The type of the digraph the algorithm runs on.903 899 typedef typename TR::Digraph Digraph; 904 900 … … 908 904 typedef typename Digraph::OutArcIt OutArcIt; 909 905 910 ///\brief The type of the map that stores the predecessor911 ///arcs of the DFS paths.912 906 typedef typename TR::PredMap PredMap; 913 ///\brief The type of the map that stores the distances of the nodes.914 907 typedef typename TR::DistMap DistMap; 915 ///\brief The type of the map that indicates which nodes are reached.916 908 typedef typename TR::ReachedMap ReachedMap; 917 ///\brief The type of the map that indicates which nodes are processed.918 909 typedef typename TR::ProcessedMap ProcessedMap; 919 ///The type of the DFS paths920 910 typedef typename TR::Path Path; 921 911 … … 1000 990 SetPredMapBase(const TR &b) : TR(b) {} 1001 991 }; 1002 ///\brief \ref named-func-param "Named parameter" 1003 ///for setting PredMap object. 1004 /// 1005 ///\ref named-func-param "Named parameter" 1006 ///for setting PredMap object. 992 993 ///\brief \ref named-templ-param "Named parameter" for setting 994 ///the predecessor map. 995 /// 996 ///\ref named-templ-param "Named parameter" function for setting 997 ///the map that stores the predecessor arcs of the nodes. 1007 998 template<class T> 1008 999 DfsWizard<SetPredMapBase<T> > predMap(const T &t) … … 1018 1009 SetReachedMapBase(const TR &b) : TR(b) {} 1019 1010 }; 1020 ///\brief \ref named-func-param "Named parameter" 1021 ///for setting ReachedMap object. 1022 /// 1023 /// \ref named-func-param "Named parameter" 1024 ///for setting ReachedMap object. 1011 1012 ///\brief \ref named-templ-param "Named parameter" for setting 1013 ///the reached map. 1014 /// 1015 ///\ref named-templ-param "Named parameter" function for setting 1016 ///the map that indicates which nodes are reached. 1025 1017 template<class T> 1026 1018 DfsWizard<SetReachedMapBase<T> > reachedMap(const T &t) … … 1036 1028 SetDistMapBase(const TR &b) : TR(b) {} 1037 1029 }; 1038 ///\brief \ref named-func-param "Named parameter" 1039 ///for setting DistMap object. 1040 /// 1041 /// \ref named-func-param "Named parameter" 1042 ///for setting DistMap object. 1030 1031 ///\brief \ref named-templ-param "Named parameter" for setting 1032 ///the distance map. 1033 /// 1034 ///\ref named-templ-param "Named parameter" function for setting 1035 ///the map that stores the distances of the nodes calculated 1036 ///by the algorithm. 1043 1037 template<class T> 1044 1038 DfsWizard<SetDistMapBase<T> > distMap(const T &t) … … 1054 1048 SetProcessedMapBase(const TR &b) : TR(b) {} 1055 1049 }; 1056 ///\brief \ref named-func-param "Named parameter" 1057 ///for setting ProcessedMap object. 1058 /// 1059 /// \ref named-func-param "Named parameter" 1060 ///for setting ProcessedMap object. 1050 1051 ///\brief \ref named-func-param "Named parameter" for setting 1052 ///the processed map. 1053 /// 1054 ///\ref named-templ-param "Named parameter" function for setting 1055 ///the map that indicates which nodes are processed. 1061 1056 template<class T> 1062 1057 DfsWizard<SetProcessedMapBase<T> > processedMap(const T &t) … … 1209 1204 /// 1210 1205 /// The type of the map that indicates which nodes are reached. 1211 /// It must meetthe \ref concepts::ReadWriteMap "ReadWriteMap" concept.1206 /// It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept. 1212 1207 typedef typename Digraph::template NodeMap<bool> ReachedMap; 1213 1208 … … 1370 1365 /// The simplest way to execute the DFS algorithm is to use one of the 1371 1366 /// member functions called \ref run(Node) "run()".\n 1372 /// If you need more control on the execution, firstyou have to call1373 /// \ref init() , then you can add a source node with \ref addSource()1367 /// If you need better control on the execution, you have to call 1368 /// \ref init() first, then you can add a source node with \ref addSource() 1374 1369 /// and perform the actual computation with \ref start(). 1375 1370 /// This procedure can be repeated if there are nodes that have not … … 1621 1616 ///@{ 1622 1617 1623 /// \brief Checks if anode is reached from the root(s).1618 /// \brief Checks if the given node is reached from the root(s). 1624 1619 /// 1625 1620 /// Returns \c true if \c v is reached from the root(s). -
lemon/dijkstra.h
r584 r717 71 71 72 72 ///The type of the map that stores the arc lengths. 73 ///It must meetthe \ref concepts::ReadMap "ReadMap" concept.73 ///It must conform to the \ref concepts::ReadMap "ReadMap" concept. 74 74 typedef LEN LengthMap; 75 ///The type of the length of the arcs.75 ///The type of the arc lengths. 76 76 typedef typename LEN::Value Value; 77 77 … … 117 117 ///The type of the map that stores the predecessor 118 118 ///arcs of the shortest paths. 119 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.119 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 120 120 typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap; 121 121 ///Instantiates a \c PredMap. … … 132 132 133 133 ///The type of the map that indicates which nodes are processed. 134 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.134 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 135 135 ///By default it is a NullMap. 136 136 typedef NullMap<typename Digraph::Node,bool> ProcessedMap; … … 152 152 153 153 ///The type of the map that stores the distances of the nodes. 154 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.154 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 155 155 typedef typename Digraph::template NodeMap<typename LEN::Value> DistMap; 156 156 ///Instantiates a \c DistMap. … … 169 169 /// \ingroup shortest_path 170 170 ///This class provides an efficient implementation of the %Dijkstra algorithm. 171 /// 172 ///The %Dijkstra algorithm solves the single-source shortest path problem 173 ///when all arc lengths are non-negative. If there are negative lengths, 174 ///the BellmanFord algorithm should be used instead. 171 175 /// 172 176 ///The arc lengths are passed to the algorithm using a … … 202 206 typedef typename TR::Digraph Digraph; 203 207 204 ///The type of the length of the arcs.208 ///The type of the arc lengths. 205 209 typedef typename TR::LengthMap::Value Value; 206 210 ///The type of the map that stores the arc lengths. … … 305 309 ///\ref named-templ-param "Named parameter" for setting 306 310 ///\c PredMap type. 307 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.311 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 308 312 template <class T> 309 313 struct SetPredMap … … 326 330 ///\ref named-templ-param "Named parameter" for setting 327 331 ///\c DistMap type. 328 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.332 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 329 333 template <class T> 330 334 struct SetDistMap … … 347 351 ///\ref named-templ-param "Named parameter" for setting 348 352 ///\c ProcessedMap type. 349 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.353 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 350 354 template <class T> 351 355 struct SetProcessedMap … … 444 448 ///\ref named-templ-param "Named parameter" for setting 445 449 ///\c OperationTraits type. 450 /// For more information see \ref DijkstraDefaultOperationTraits. 446 451 template <class T> 447 452 struct SetOperationTraits … … 585 590 ///The simplest way to execute the %Dijkstra algorithm is to use 586 591 ///one of the member functions called \ref run(Node) "run()".\n 587 ///If you need more control on the execution, firstyou have to call588 ///\ref init() , then you can add several source nodes with592 ///If you need better control on the execution, you have to call 593 ///\ref init() first, then you can add several source nodes with 589 594 ///\ref addSource(). Finally the actual path computation can be 590 595 ///performed with one of the \ref start() functions. … … 802 807 ///The results of the %Dijkstra algorithm can be obtained using these 803 808 ///functions.\n 804 ///Either \ref run(Node) "run()" or \ref start() should be called809 ///Either \ref run(Node) "run()" or \ref init() should be called 805 810 ///before using them. 806 811 807 812 ///@{ 808 813 809 ///The shortest path to anode.810 811 ///Returns the shortest path to a node.814 ///The shortest path to the given node. 815 816 ///Returns the shortest path to the given node from the root(s). 812 817 /// 813 818 ///\warning \c t should be reached from the root(s). … … 817 822 Path path(Node t) const { return Path(*G, *_pred, t); } 818 823 819 ///The distance of anode from the root(s).820 821 ///Returns the distance of anode from the root(s).824 ///The distance of the given node from the root(s). 825 826 ///Returns the distance of the given node from the root(s). 822 827 /// 823 828 ///\warning If node \c v is not reached from the root(s), then … … 828 833 Value dist(Node v) const { return (*_dist)[v]; } 829 834 830 ///Returns the 'previous arc' of the shortest path tree for a node. 831 835 ///\brief Returns the 'previous arc' of the shortest path tree for 836 ///the given node. 837 /// 832 838 ///This function returns the 'previous arc' of the shortest path 833 839 ///tree for the node \c v, i.e. it returns the last arc of a … … 836 842 /// 837 843 ///The shortest path tree used here is equal to the shortest path 838 ///tree used in \ref predNode() .844 ///tree used in \ref predNode() and \ref predMap(). 839 845 /// 840 846 ///\pre Either \ref run(Node) "run()" or \ref init() … … 842 848 Arc predArc(Node v) const { return (*_pred)[v]; } 843 849 844 ///Returns the 'previous node' of the shortest path tree for a node. 845 850 ///\brief Returns the 'previous node' of the shortest path tree for 851 ///the given node. 852 /// 846 853 ///This function returns the 'previous node' of the shortest path 847 854 ///tree for the node \c v, i.e. it returns the last but one node 848 /// froma shortest path from a root to \c v. It is \c INVALID855 ///of a shortest path from a root to \c v. It is \c INVALID 849 856 ///if \c v is not reached from the root(s) or if \c v is a root. 850 857 /// 851 858 ///The shortest path tree used here is equal to the shortest path 852 ///tree used in \ref predArc() .859 ///tree used in \ref predArc() and \ref predMap(). 853 860 /// 854 861 ///\pre Either \ref run(Node) "run()" or \ref init() … … 871 878 /// 872 879 ///Returns a const reference to the node map that stores the predecessor 873 ///arcs, which form the shortest path tree .880 ///arcs, which form the shortest path tree (forest). 874 881 /// 875 882 ///\pre Either \ref run(Node) "run()" or \ref init() … … 877 884 const PredMap &predMap() const { return *_pred;} 878 885 879 ///Checks if anode is reached from the root(s).886 ///Checks if the given node is reached from the root(s). 880 887 881 888 ///Returns \c true if \c v is reached from the root(s). … … 896 903 Heap::POST_HEAP; } 897 904 898 ///The current distance of anode from the root(s).899 900 ///Returns the current distance of anode from the root(s).905 ///The current distance of the given node from the root(s). 906 907 ///Returns the current distance of the given node from the root(s). 901 908 ///It may be decreased in the following processes. 902 909 /// … … 925 932 926 933 ///The type of the map that stores the arc lengths. 927 ///It must meetthe \ref concepts::ReadMap "ReadMap" concept.934 ///It must conform to the \ref concepts::ReadMap "ReadMap" concept. 928 935 typedef LEN LengthMap; 929 ///The type of the length of the arcs.936 ///The type of the arc lengths. 930 937 typedef typename LEN::Value Value; 931 938 … … 974 981 ///The type of the map that stores the predecessor 975 982 ///arcs of the shortest paths. 976 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.983 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 977 984 typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap; 978 985 ///Instantiates a PredMap. … … 989 996 990 997 ///The type of the map that indicates which nodes are processed. 991 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.998 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 992 999 ///By default it is a NullMap. 993 1000 typedef NullMap<typename Digraph::Node,bool> ProcessedMap; … … 1009 1016 1010 1017 ///The type of the map that stores the distances of the nodes. 1011 ///It must meetthe \ref concepts::WriteMap "WriteMap" concept.1018 ///It must conform to the \ref concepts::WriteMap "WriteMap" concept. 1012 1019 typedef typename Digraph::template NodeMap<typename LEN::Value> DistMap; 1013 1020 ///Instantiates a DistMap. … … 1024 1031 1025 1032 ///The type of the shortest paths. 1026 ///It must meetthe \ref concepts::Path "Path" concept.1033 ///It must conform to the \ref concepts::Path "Path" concept. 1027 1034 typedef lemon::Path<Digraph> Path; 1028 1035 }; … … 1030 1037 /// Default traits class used by DijkstraWizard 1031 1038 1032 /// To make it easier to use Dijkstra algorithm 1033 /// we have created a wizard class. 1034 /// This \ref DijkstraWizard class needs default traits, 1035 /// as well as the \ref Dijkstra class. 1036 /// The \ref DijkstraWizardBase is a class to be the default traits of the 1037 /// \ref DijkstraWizard class. 1039 /// Default traits class used by DijkstraWizard. 1040 /// \tparam GR The type of the digraph. 1041 /// \tparam LEN The type of the length map. 1038 1042 template<typename GR, typename LEN> 1039 1043 class DijkstraWizardBase : public DijkstraWizardDefaultTraits<GR,LEN> … … 1094 1098 typedef TR Base; 1095 1099 1096 ///The type of the digraph the algorithm runs on.1097 1100 typedef typename TR::Digraph Digraph; 1098 1101 … … 1102 1105 typedef typename Digraph::OutArcIt OutArcIt; 1103 1106 1104 ///The type of the map that stores the arc lengths.1105 1107 typedef typename TR::LengthMap LengthMap; 1106 ///The type of the length of the arcs.1107 1108 typedef typename LengthMap::Value Value; 1108 ///\brief The type of the map that stores the predecessor1109 ///arcs of the shortest paths.1110 1109 typedef typename TR::PredMap PredMap; 1111 ///The type of the map that stores the distances of the nodes.1112 1110 typedef typename TR::DistMap DistMap; 1113 ///The type of the map that indicates which nodes are processed.1114 1111 typedef typename TR::ProcessedMap ProcessedMap; 1115 ///The type of the shortest paths1116 1112 typedef typename TR::Path Path; 1117 ///The heap type used by the dijkstra algorithm.1118 1113 typedef typename TR::Heap Heap; 1119 1114 … … 1187 1182 SetPredMapBase(const TR &b) : TR(b) {} 1188 1183 }; 1189 ///\brief \ref named-func-param "Named parameter" 1190 ///for setting PredMap object. 1191 /// 1192 ///\ref named-func-param "Named parameter" 1193 ///for setting PredMap object. 1184 1185 ///\brief \ref named-templ-param "Named parameter" for setting 1186 ///the predecessor map. 1187 /// 1188 ///\ref named-templ-param "Named parameter" function for setting 1189 ///the map that stores the predecessor arcs of the nodes. 1194 1190 template<class T> 1195 1191 DijkstraWizard<SetPredMapBase<T> > predMap(const T &t) … … 1205 1201 SetDistMapBase(const TR &b) : TR(b) {} 1206 1202 }; 1207 ///\brief \ref named-func-param "Named parameter" 1208 ///for setting DistMap object. 1209 /// 1210 ///\ref named-func-param "Named parameter" 1211 ///for setting DistMap object. 1203 1204 ///\brief \ref named-templ-param "Named parameter" for setting 1205 ///the distance map. 1206 /// 1207 ///\ref named-templ-param "Named parameter" function for setting 1208 ///the map that stores the distances of the nodes calculated 1209 ///by the algorithm. 1212 1210 template<class T> 1213 1211 DijkstraWizard<SetDistMapBase<T> > distMap(const T &t) … … 1223 1221 SetProcessedMapBase(const TR &b) : TR(b) {} 1224 1222 }; 1225 ///\brief \ref named-func-param "Named parameter" 1226 ///for setting ProcessedMap object. 1227 /// 1228 /// \ref named-func-param "Named parameter" 1229 ///for setting ProcessedMap object. 1223 1224 ///\brief \ref named-func-param "Named parameter" for setting 1225 ///the processed map. 1226 /// 1227 ///\ref named-templ-param "Named parameter" function for setting 1228 ///the map that indicates which nodes are processed. 1230 1229 template<class T> 1231 1230 DijkstraWizard<SetProcessedMapBase<T> > processedMap(const T &t) … … 1240 1239 SetPathBase(const TR &b) : TR(b) {} 1241 1240 }; 1241 1242 1242 ///\brief \ref named-func-param "Named parameter" 1243 1243 ///for getting the shortest path to the target node. -
lemon/dim2.h
r440 r714 22 22 #include <iostream> 23 23 24 ///\ingroup misc24 ///\ingroup geomdat 25 25 ///\file 26 26 ///\brief A simple two dimensional vector and a bounding box implementation 27 ///28 /// The class \ref lemon::dim2::Point "dim2::Point" implements29 /// a two dimensional vector with the usual operations.30 ///31 /// The class \ref lemon::dim2::Box "dim2::Box" can be used to determine32 /// the rectangular bounding box of a set of33 /// \ref lemon::dim2::Point "dim2::Point"'s.34 27 35 28 namespace lemon { … … 41 34 namespace dim2 { 42 35 43 /// \addtogroup misc36 /// \addtogroup geomdat 44 37 /// @{ 45 38 -
lemon/gomory_hu.h
r596 r713 360 360 /// \c t. 361 361 /// \code 362 /// Gomor uHu<Graph> gom(g, capacities);362 /// GomoryHu<Graph> gom(g, capacities); 363 363 /// gom.run(); 364 364 /// int cnt=0; 365 /// for(Gomor uHu<Graph>::MinCutNodeIt n(gom,s,t); n!=INVALID; ++n) ++cnt;365 /// for(GomoryHu<Graph>::MinCutNodeIt n(gom,s,t); n!=INVALID; ++n) ++cnt; 366 366 /// \endcode 367 367 class MinCutNodeIt … … 457 457 /// \c t. 458 458 /// \code 459 /// Gomor uHu<Graph> gom(g, capacities);459 /// GomoryHu<Graph> gom(g, capacities); 460 460 /// gom.run(); 461 461 /// int value=0; 462 /// for(Gomor uHu<Graph>::MinCutEdgeIt e(gom,s,t); e!=INVALID; ++e)462 /// for(GomoryHu<Graph>::MinCutEdgeIt e(gom,s,t); e!=INVALID; ++e) 463 463 /// value+=capacities[e]; 464 464 /// \endcode -
lemon/maps.h
r695 r726 57 57 /// but data written to it is not required (i.e. it will be sent to 58 58 /// <tt>/dev/null</tt>). 59 /// It conforms t he \ref concepts::ReadWriteMap "ReadWriteMap" concept.59 /// It conforms to the \ref concepts::ReadWriteMap "ReadWriteMap" concept. 60 60 /// 61 61 /// \sa ConstMap … … 90 90 /// 91 91 /// In other aspects it is equivalent to \c NullMap. 92 /// So it conforms t he \ref concepts::ReadWriteMap "ReadWriteMap"92 /// So it conforms to the \ref concepts::ReadWriteMap "ReadWriteMap" 93 93 /// concept, but it absorbs the data written to it. 94 94 /// … … 159 159 /// 160 160 /// In other aspects it is equivalent to \c NullMap. 161 /// So it conforms t he \ref concepts::ReadWriteMap "ReadWriteMap"161 /// So it conforms to the \ref concepts::ReadWriteMap "ReadWriteMap" 162 162 /// concept, but it absorbs the data written to it. 163 163 /// … … 233 233 /// It can be used with some data structures, for example 234 234 /// \c UnionFind, \c BinHeap, when the used items are small 235 /// integers. This map conforms t he \ref concepts::ReferenceMap235 /// integers. This map conforms to the \ref concepts::ReferenceMap 236 236 /// "ReferenceMap" concept. 237 237 /// … … 341 341 /// stored actually. This value can be different from the default 342 342 /// contructed value (i.e. \c %Value()). 343 /// This type conforms t he \ref concepts::ReferenceMap "ReferenceMap"343 /// This type conforms to the \ref concepts::ReferenceMap "ReferenceMap" 344 344 /// concept. 345 345 /// … … 707 707 /// The \c Key type of it is inherited from \c M and the \c Value 708 708 /// type is \c V. 709 /// This type conforms t he \ref concepts::ReadMap "ReadMap" concept.709 /// This type conforms to the \ref concepts::ReadMap "ReadMap" concept. 710 710 /// 711 711 /// The simplest way of using this map is through the convertMap() … … 1790 1790 /// \code 1791 1791 /// std::vector<Node> v; 1792 /// dfs(g ,s).processedMap(loggerBoolMap(std::back_inserter(v))).run();1792 /// dfs(g).processedMap(loggerBoolMap(std::back_inserter(v))).run(s); 1793 1793 /// \endcode 1794 1794 /// \code 1795 1795 /// std::vector<Node> v(countNodes(g)); 1796 /// dfs(g ,s).processedMap(loggerBoolMap(v.begin())).run();1796 /// dfs(g).processedMap(loggerBoolMap(v.begin())).run(s); 1797 1797 /// \endcode 1798 1798 /// … … 1826 1826 /// the items stored in the graph, which is returned by the \c id() 1827 1827 /// function of the graph. This map can be inverted with its member 1828 /// class \c InverseMap or with the \c operator() member.1828 /// class \c InverseMap or with the \c operator()() member. 1829 1829 /// 1830 1830 /// \tparam GR The graph type. … … 1866 1866 public: 1867 1867 1868 /// \brief This class represents the inverse of its owner (IdMap). 1869 /// 1870 /// This class represents the inverse of its owner (IdMap). 1868 /// \brief The inverse map type of IdMap. 1869 /// 1870 /// The inverse map type of IdMap. The subscript operator gives back 1871 /// an item by its id. 1872 /// This type conforms to the \ref concepts::ReadMap "ReadMap" concept. 1871 1873 /// \see inverse() 1872 1874 class InverseMap { … … 1883 1885 explicit InverseMap(const IdMap& map) : _graph(map._graph) {} 1884 1886 1885 /// \brief Gives back the given item fromits id.1887 /// \brief Gives back an item by its id. 1886 1888 /// 1887 /// Gives back the given item fromits id.1889 /// Gives back an item by its id. 1888 1890 Item operator[](int id) const { return _graph->fromId(id, Item());} 1889 1891 … … 1898 1900 }; 1899 1901 1902 /// \brief Returns an \c IdMap class. 1903 /// 1904 /// This function just returns an \c IdMap class. 1905 /// \relates IdMap 1906 template <typename K, typename GR> 1907 inline IdMap<GR, K> idMap(const GR& graph) { 1908 return IdMap<GR, K>(graph); 1909 } 1900 1910 1901 1911 /// \brief General cross reference graph map type. … … 1904 1914 /// It wraps a standard graph map (\c NodeMap, \c ArcMap or \c EdgeMap) 1905 1915 /// and if a key is set to a new value, then stores it in the inverse map. 1906 /// The values of the map can be accessed 1907 /// with stl compatible forward iterator. 1916 /// The graph items can be accessed by their values either using 1917 /// \c InverseMap or \c operator()(), and the values of the map can be 1918 /// accessed with an STL compatible forward iterator (\c ValueIt). 1919 /// 1920 /// This map is intended to be used when all associated values are 1921 /// different (the map is actually invertable) or there are only a few 1922 /// items with the same value. 1923 /// Otherwise consider to use \c IterableValueMap, which is more 1924 /// suitable and more efficient for such cases. It provides iterators 1925 /// to traverse the items with the same associated value, however 1926 /// it does not have \c InverseMap. 1908 1927 /// 1909 1928 /// This type is not reference map, so it cannot be modified with … … 1946 1965 /// \brief Forward iterator for values. 1947 1966 /// 1948 /// This iterator is an stlcompatible forward1967 /// This iterator is an STL compatible forward 1949 1968 /// iterator on the values of the map. The values can 1950 1969 /// be accessed in the <tt>[beginValue, endValue)</tt> range. 1951 1970 /// They are considered with multiplicity, so each value is 1952 1971 /// traversed for each item it is assigned to. 1953 class ValueIt erator1972 class ValueIt 1954 1973 : public std::iterator<std::forward_iterator_tag, Value> { 1955 1974 friend class CrossRefMap; 1956 1975 private: 1957 ValueIt erator(typename Container::const_iterator _it)1976 ValueIt(typename Container::const_iterator _it) 1958 1977 : it(_it) {} 1959 1978 public: 1960 1979 1961 ValueIterator() {} 1962 1963 ValueIterator& operator++() { ++it; return *this; } 1964 ValueIterator operator++(int) { 1965 ValueIterator tmp(*this); 1980 /// Constructor 1981 ValueIt() {} 1982 1983 /// \e 1984 ValueIt& operator++() { ++it; return *this; } 1985 /// \e 1986 ValueIt operator++(int) { 1987 ValueIt tmp(*this); 1966 1988 operator++(); 1967 1989 return tmp; 1968 1990 } 1969 1991 1992 /// \e 1970 1993 const Value& operator*() const { return it->first; } 1994 /// \e 1971 1995 const Value* operator->() const { return &(it->first); } 1972 1996 1973 bool operator==(ValueIterator jt) const { return it == jt.it; } 1974 bool operator!=(ValueIterator jt) const { return it != jt.it; } 1997 /// \e 1998 bool operator==(ValueIt jt) const { return it == jt.it; } 1999 /// \e 2000 bool operator!=(ValueIt jt) const { return it != jt.it; } 1975 2001 1976 2002 private: 1977 2003 typename Container::const_iterator it; 1978 2004 }; 2005 2006 /// Alias for \c ValueIt 2007 typedef ValueIt ValueIterator; 1979 2008 1980 2009 /// \brief Returns an iterator to the first value. 1981 2010 /// 1982 /// Returns an stlcompatible iterator to the2011 /// Returns an STL compatible iterator to the 1983 2012 /// first value of the map. The values of the 1984 2013 /// map can be accessed in the <tt>[beginValue, endValue)</tt> 1985 2014 /// range. 1986 ValueIt eratorbeginValue() const {1987 return ValueIt erator(_inv_map.begin());2015 ValueIt beginValue() const { 2016 return ValueIt(_inv_map.begin()); 1988 2017 } 1989 2018 1990 2019 /// \brief Returns an iterator after the last value. 1991 2020 /// 1992 /// Returns an stlcompatible iterator after the2021 /// Returns an STL compatible iterator after the 1993 2022 /// last value of the map. The values of the 1994 2023 /// map can be accessed in the <tt>[beginValue, endValue)</tt> 1995 2024 /// range. 1996 ValueIt eratorendValue() const {1997 return ValueIt erator(_inv_map.end());2025 ValueIt endValue() const { 2026 return ValueIt(_inv_map.end()); 1998 2027 } 1999 2028 … … 2032 2061 typename Container::const_iterator it = _inv_map.find(val); 2033 2062 return it != _inv_map.end() ? it->second : INVALID; 2063 } 2064 2065 /// \brief Returns the number of items with the given value. 2066 /// 2067 /// This function returns the number of items with the given value 2068 /// associated with it. 2069 int count(const Value &val) const { 2070 return _inv_map.count(val); 2034 2071 } 2035 2072 … … 2083 2120 public: 2084 2121 2085 /// \brief The inverse map type. 2086 /// 2087 /// The inverse of this map. The subscript operator of the map 2088 /// gives back the item that was last assigned to the value. 2122 /// \brief The inverse map type of CrossRefMap. 2123 /// 2124 /// The inverse map type of CrossRefMap. The subscript operator gives 2125 /// back an item by its value. 2126 /// This type conforms to the \ref concepts::ReadMap "ReadMap" concept. 2127 /// \see inverse() 2089 2128 class InverseMap { 2090 2129 public: … … 2113 2152 }; 2114 2153 2115 /// \brief It gives back the read-only inverse map.2116 /// 2117 /// It gives back the read-only inverse map.2154 /// \brief Gives back the inverse of the map. 2155 /// 2156 /// Gives back the inverse of the CrossRefMap. 2118 2157 InverseMap inverse() const { 2119 2158 return InverseMap(*this); … … 2122 2161 }; 2123 2162 2124 /// \brief Provides continuous and unique IDfor the2163 /// \brief Provides continuous and unique id for the 2125 2164 /// items of a graph. 2126 2165 /// 2127 2166 /// RangeIdMap provides a unique and continuous 2128 /// IDfor each item of a given type (\c Node, \c Arc or2167 /// id for each item of a given type (\c Node, \c Arc or 2129 2168 /// \c Edge) in a graph. This id is 2130 2169 /// - \b unique: different items get different ids, … … 2137 2176 /// the \c id() function of the graph or \ref IdMap. 2138 2177 /// This map can be inverted with its member class \c InverseMap, 2139 /// or with the \c operator() member.2178 /// or with the \c operator()() member. 2140 2179 /// 2141 2180 /// \tparam GR The graph type. … … 2265 2304 } 2266 2305 2267 /// \brief Gives back the \e RangeId of the item2268 /// 2269 /// Gives back the \e RangeId of the item.2306 /// \brief Gives back the \e range \e id of the item 2307 /// 2308 /// Gives back the \e range \e id of the item. 2270 2309 int operator[](const Item& item) const { 2271 2310 return Map::operator[](item); 2272 2311 } 2273 2312 2274 /// \brief Gives back the item belonging to a \e RangeId2275 /// 2276 /// Gives back the item belonging to a \e RangeId.2313 /// \brief Gives back the item belonging to a \e range \e id 2314 /// 2315 /// Gives back the item belonging to the given \e range \e id. 2277 2316 Item operator()(int id) const { 2278 2317 return _inv_map[id]; … … 2288 2327 /// \brief The inverse map type of RangeIdMap. 2289 2328 /// 2290 /// The inverse map type of RangeIdMap. 2329 /// The inverse map type of RangeIdMap. The subscript operator gives 2330 /// back an item by its \e range \e id. 2331 /// This type conforms to the \ref concepts::ReadMap "ReadMap" concept. 2291 2332 class InverseMap { 2292 2333 public: … … 2306 2347 /// 2307 2348 /// Subscript operator. It gives back the item 2308 /// that the descriptorcurrently belongs to.2349 /// that the given \e range \e id currently belongs to. 2309 2350 Value operator[](const Key& key) const { 2310 2351 return _inverted(key); … … 2324 2365 /// \brief Gives back the inverse of the map. 2325 2366 /// 2326 /// Gives back the inverse of the map.2367 /// Gives back the inverse of the RangeIdMap. 2327 2368 const InverseMap inverse() const { 2328 2369 return InverseMap(*this); … … 2330 2371 }; 2331 2372 2373 /// \brief Returns a \c RangeIdMap class. 2374 /// 2375 /// This function just returns an \c RangeIdMap class. 2376 /// \relates RangeIdMap 2377 template <typename K, typename GR> 2378 inline RangeIdMap<GR, K> rangeIdMap(const GR& graph) { 2379 return RangeIdMap<GR, K>(graph); 2380 } 2381 2332 2382 /// \brief Dynamic iterable \c bool map. 2333 2383 /// … … 2335 2385 /// \c bool value for graph items (\c Node, \c Arc or \c Edge). 2336 2386 /// For both \c true and \c false values it is possible to iterate on 2337 /// the keys .2387 /// the keys mapped to the value. 2338 2388 /// 2339 2389 /// This type is a reference map, so it can be modified with the … … 2704 2754 /// mapped to the value. 2705 2755 /// 2756 /// This map is intended to be used with small integer values, for which 2757 /// it is efficient, and supports iteration only for non-negative values. 2758 /// If you need large values and/or iteration for negative integers, 2759 /// consider to use \ref IterableValueMap instead. 2760 /// 2706 2761 /// This type is a reference map, so it can be modified with the 2707 2762 /// subscript operator. … … 2985 3040 /// \brief Dynamic iterable map for comparable values. 2986 3041 /// 2987 /// This class provides a special graph map type which can store a n3042 /// This class provides a special graph map type which can store a 2988 3043 /// comparable value for graph items (\c Node, \c Arc or \c Edge). 2989 3044 /// For each value it is possible to iterate on the keys mapped to 2990 /// the value. 2991 /// 2992 /// The map stores for each value a linked list with 2993 /// the items which mapped to the value, and the values are stored 2994 /// in balanced binary tree. The values of the map can be accessed 2995 /// with stl compatible forward iterator. 3045 /// the value (\c ItemIt), and the values of the map can be accessed 3046 /// with an STL compatible forward iterator (\c ValueIt). 3047 /// The map stores a linked list for each value, which contains 3048 /// the items mapped to the value, and the used values are stored 3049 /// in balanced binary tree (\c std::map). 3050 /// 3051 /// \ref IterableBoolMap and \ref IterableIntMap are similar classes 3052 /// specialized for \c bool and \c int values, respectively. 2996 3053 /// 2997 3054 /// This type is not reference map, so it cannot be modified with … … 3072 3129 /// \brief Forward iterator for values. 3073 3130 /// 3074 /// This iterator is an stlcompatible forward3131 /// This iterator is an STL compatible forward 3075 3132 /// iterator on the values of the map. The values can 3076 3133 /// be accessed in the <tt>[beginValue, endValue)</tt> range. 3077 class ValueIt erator3134 class ValueIt 3078 3135 : public std::iterator<std::forward_iterator_tag, Value> { 3079 3136 friend class IterableValueMap; 3080 3137 private: 3081 ValueIt erator(typename std::map<Value, Key>::const_iterator _it)3138 ValueIt(typename std::map<Value, Key>::const_iterator _it) 3082 3139 : it(_it) {} 3083 3140 public: 3084 3141 3085 ValueIterator() {} 3086 3087 ValueIterator& operator++() { ++it; return *this; } 3088 ValueIterator operator++(int) { 3089 ValueIterator tmp(*this); 3142 /// Constructor 3143 ValueIt() {} 3144 3145 /// \e 3146 ValueIt& operator++() { ++it; return *this; } 3147 /// \e 3148 ValueIt operator++(int) { 3149 ValueIt tmp(*this); 3090 3150 operator++(); 3091 3151 return tmp; 3092 3152 } 3093 3153 3154 /// \e 3094 3155 const Value& operator*() const { return it->first; } 3156 /// \e 3095 3157 const Value* operator->() const { return &(it->first); } 3096 3158 3097 bool operator==(ValueIterator jt) const { return it == jt.it; } 3098 bool operator!=(ValueIterator jt) const { return it != jt.it; } 3159 /// \e 3160 bool operator==(ValueIt jt) const { return it == jt.it; } 3161 /// \e 3162 bool operator!=(ValueIt jt) const { return it != jt.it; } 3099 3163 3100 3164 private: … … 3104 3168 /// \brief Returns an iterator to the first value. 3105 3169 /// 3106 /// Returns an stlcompatible iterator to the3170 /// Returns an STL compatible iterator to the 3107 3171 /// first value of the map. The values of the 3108 3172 /// map can be accessed in the <tt>[beginValue, endValue)</tt> 3109 3173 /// range. 3110 ValueIt eratorbeginValue() const {3111 return ValueIt erator(_first.begin());3174 ValueIt beginValue() const { 3175 return ValueIt(_first.begin()); 3112 3176 } 3113 3177 3114 3178 /// \brief Returns an iterator after the last value. 3115 3179 /// 3116 /// Returns an stlcompatible iterator after the3180 /// Returns an STL compatible iterator after the 3117 3181 /// last value of the map. The values of the 3118 3182 /// map can be accessed in the <tt>[beginValue, endValue)</tt> 3119 3183 /// range. 3120 ValueIt eratorendValue() const {3121 return ValueIt erator(_first.end());3184 ValueIt endValue() const { 3185 return ValueIt(_first.end()); 3122 3186 } 3123 3187 … … 3237 3301 public: 3238 3302 3239 /// \e3303 /// The key type (the \c Arc type of the digraph). 3240 3304 typedef typename GR::Arc Key; 3241 /// \e3305 /// The value type (the \c Node type of the digraph). 3242 3306 typedef typename GR::Node Value; 3243 3307 … … 3278 3342 public: 3279 3343 3280 /// \e3344 /// The key type (the \c Arc type of the digraph). 3281 3345 typedef typename GR::Arc Key; 3282 /// \e3346 /// The value type (the \c Node type of the digraph). 3283 3347 typedef typename GR::Node Value; 3284 3348 … … 3320 3384 public: 3321 3385 3386 /// The key type (the \c Edge type of the digraph). 3387 typedef typename GR::Edge Key; 3388 /// The value type (the \c Arc type of the digraph). 3322 3389 typedef typename GR::Arc Value; 3323 typedef typename GR::Edge Key;3324 3390 3325 3391 /// \brief Constructor … … 3360 3426 public: 3361 3427 3428 /// The key type (the \c Edge type of the digraph). 3429 typedef typename GR::Edge Key; 3430 /// The value type (the \c Arc type of the digraph). 3362 3431 typedef typename GR::Arc Value; 3363 typedef typename GR::Edge Key;3364 3432 3365 3433 /// \brief Constructor -
lemon/min_cost_arborescence.h
r625 r713 489 489 /// The simplest way to execute the algorithm is to use 490 490 /// one of the member functions called \c run(...). \n 491 /// If you need morecontrol on the execution,492 /// first you must call \ref init(), then you can add several491 /// If you need better control on the execution, 492 /// you have to call \ref init() first, then you can add several 493 493 /// source nodes with \ref addSource(). 494 494 /// Finally \ref start() will perform the arborescence -
lemon/preflow.h
r689 r715 53 53 /// The type of the map that stores the flow values. 54 54 /// It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept. 55 #ifdef DOXYGEN 56 typedef GR::ArcMap<Value> FlowMap; 57 #else 55 58 typedef typename Digraph::template ArcMap<Value> FlowMap; 59 #endif 56 60 57 61 /// \brief Instantiates a FlowMap. … … 68 72 /// The elevator type used by Preflow algorithm. 69 73 /// 70 /// \sa Elevator 71 /// \sa LinkedElevator 72 typedef LinkedElevator<Digraph, typename Digraph::Node> Elevator; 74 /// \sa Elevator, LinkedElevator 75 #ifdef DOXYGEN 76 typedef lemon::Elevator<GR, GR::Node> Elevator; 77 #else 78 typedef lemon::Elevator<Digraph, typename Digraph::Node> Elevator; 79 #endif 73 80 74 81 /// \brief Instantiates an Elevator. … … 392 399 /// The simplest way to execute the preflow algorithm is to use 393 400 /// \ref run() or \ref runMinCut().\n 394 /// If you need morecontrol on the initial solution or the execution,395 /// first you have to call one of the \ref init() functions, then401 /// If you need better control on the initial solution or the execution, 402 /// you have to call one of the \ref init() functions first, then 396 403 /// \ref startFirstPhase() and if you need it \ref startSecondPhase(). 397 404 -
test/maps_test.cc
r695 r726 23 23 #include <lemon/concepts/maps.h> 24 24 #include <lemon/maps.h> 25 #include <lemon/list_graph.h> 25 26 #include <lemon/smart_graph.h> 27 #include <lemon/adaptors.h> 28 #include <lemon/dfs.h> 26 29 27 30 #include "test_tools.h" … … 61 64 typedef ReadWriteMap<A, bool> BoolWriteMap; 62 65 typedef ReferenceMap<A, bool, bool&, const bool&> BoolRefMap; 66 67 template<typename Map1, typename Map2, typename ItemIt> 68 void compareMap(const Map1& map1, const Map2& map2, ItemIt it) { 69 for (; it != INVALID; ++it) 70 check(map1[it] == map2[it], "The maps are not equal"); 71 } 63 72 64 73 int main() … … 330 339 { 331 340 typedef std::vector<int> vec; 341 checkConcept<WriteMap<int, bool>, LoggerBoolMap<vec::iterator> >(); 342 checkConcept<WriteMap<int, bool>, 343 LoggerBoolMap<std::back_insert_iterator<vec> > >(); 344 332 345 vec v1; 333 346 vec v2(10); … … 349 362 it != map2.end(); ++it ) 350 363 check(v1[i++] == *it, "Something is wrong with LoggerBoolMap"); 364 365 typedef ListDigraph Graph; 366 DIGRAPH_TYPEDEFS(Graph); 367 Graph gr; 368 369 Node n0 = gr.addNode(); 370 Node n1 = gr.addNode(); 371 Node n2 = gr.addNode(); 372 Node n3 = gr.addNode(); 373 374 gr.addArc(n3, n0); 375 gr.addArc(n3, n2); 376 gr.addArc(n0, n2); 377 gr.addArc(n2, n1); 378 gr.addArc(n0, n1); 379 380 { 381 std::vector<Node> v; 382 dfs(gr).processedMap(loggerBoolMap(std::back_inserter(v))).run(); 383 384 check(v.size()==4 && v[0]==n1 && v[1]==n2 && v[2]==n0 && v[3]==n3, 385 "Something is wrong with LoggerBoolMap"); 386 } 387 { 388 std::vector<Node> v(countNodes(gr)); 389 dfs(gr).processedMap(loggerBoolMap(v.begin())).run(); 390 391 check(v.size()==4 && v[0]==n1 && v[1]==n2 && v[2]==n0 && v[3]==n3, 392 "Something is wrong with LoggerBoolMap"); 393 } 394 } 395 396 // IdMap, RangeIdMap 397 { 398 typedef ListDigraph Graph; 399 DIGRAPH_TYPEDEFS(Graph); 400 401 checkConcept<ReadMap<Node, int>, IdMap<Graph, Node> >(); 402 checkConcept<ReadMap<Arc, int>, IdMap<Graph, Arc> >(); 403 checkConcept<ReadMap<Node, int>, RangeIdMap<Graph, Node> >(); 404 checkConcept<ReadMap<Arc, int>, RangeIdMap<Graph, Arc> >(); 405 406 Graph gr; 407 IdMap<Graph, Node> nmap(gr); 408 IdMap<Graph, Arc> amap(gr); 409 RangeIdMap<Graph, Node> nrmap(gr); 410 RangeIdMap<Graph, Arc> armap(gr); 411 412 Node n0 = gr.addNode(); 413 Node n1 = gr.addNode(); 414 Node n2 = gr.addNode(); 415 416 Arc a0 = gr.addArc(n0, n1); 417 Arc a1 = gr.addArc(n0, n2); 418 Arc a2 = gr.addArc(n2, n1); 419 Arc a3 = gr.addArc(n2, n0); 420 421 check(nmap[n0] == gr.id(n0) && nmap(gr.id(n0)) == n0, "Wrong IdMap"); 422 check(nmap[n1] == gr.id(n1) && nmap(gr.id(n1)) == n1, "Wrong IdMap"); 423 check(nmap[n2] == gr.id(n2) && nmap(gr.id(n2)) == n2, "Wrong IdMap"); 424 425 check(amap[a0] == gr.id(a0) && amap(gr.id(a0)) == a0, "Wrong IdMap"); 426 check(amap[a1] == gr.id(a1) && amap(gr.id(a1)) == a1, "Wrong IdMap"); 427 check(amap[a2] == gr.id(a2) && amap(gr.id(a2)) == a2, "Wrong IdMap"); 428 check(amap[a3] == gr.id(a3) && amap(gr.id(a3)) == a3, "Wrong IdMap"); 429 430 check(nmap.inverse()[gr.id(n0)] == n0, "Wrong IdMap::InverseMap"); 431 check(amap.inverse()[gr.id(a0)] == a0, "Wrong IdMap::InverseMap"); 432 433 check(nrmap.size() == 3 && armap.size() == 4, 434 "Wrong RangeIdMap::size()"); 435 436 check(nrmap[n0] == 0 && nrmap(0) == n0, "Wrong RangeIdMap"); 437 check(nrmap[n1] == 1 && nrmap(1) == n1, "Wrong RangeIdMap"); 438 check(nrmap[n2] == 2 && nrmap(2) == n2, "Wrong RangeIdMap"); 439 440 check(armap[a0] == 0 && armap(0) == a0, "Wrong RangeIdMap"); 441 check(armap[a1] == 1 && armap(1) == a1, "Wrong RangeIdMap"); 442 check(armap[a2] == 2 && armap(2) == a2, "Wrong RangeIdMap"); 443 check(armap[a3] == 3 && armap(3) == a3, "Wrong RangeIdMap"); 444 445 check(nrmap.inverse()[0] == n0, "Wrong RangeIdMap::InverseMap"); 446 check(armap.inverse()[0] == a0, "Wrong RangeIdMap::InverseMap"); 447 448 gr.erase(n1); 449 450 if (nrmap[n0] == 1) nrmap.swap(n0, n2); 451 nrmap.swap(n2, n0); 452 if (armap[a1] == 1) armap.swap(a1, a3); 453 armap.swap(a3, a1); 454 455 check(nrmap.size() == 2 && armap.size() == 2, 456 "Wrong RangeIdMap::size()"); 457 458 check(nrmap[n0] == 1 && nrmap(1) == n0, "Wrong RangeIdMap"); 459 check(nrmap[n2] == 0 && nrmap(0) == n2, "Wrong RangeIdMap"); 460 461 check(armap[a1] == 1 && armap(1) == a1, "Wrong RangeIdMap"); 462 check(armap[a3] == 0 && armap(0) == a3, "Wrong RangeIdMap"); 463 464 check(nrmap.inverse()[0] == n2, "Wrong RangeIdMap::InverseMap"); 465 check(armap.inverse()[0] == a3, "Wrong RangeIdMap::InverseMap"); 466 } 467 468 // SourceMap, TargetMap, ForwardMap, BackwardMap, InDegMap, OutDegMap 469 { 470 typedef ListGraph Graph; 471 GRAPH_TYPEDEFS(Graph); 472 473 checkConcept<ReadMap<Arc, Node>, SourceMap<Graph> >(); 474 checkConcept<ReadMap<Arc, Node>, TargetMap<Graph> >(); 475 checkConcept<ReadMap<Edge, Arc>, ForwardMap<Graph> >(); 476 checkConcept<ReadMap<Edge, Arc>, BackwardMap<Graph> >(); 477 checkConcept<ReadMap<Node, int>, InDegMap<Graph> >(); 478 checkConcept<ReadMap<Node, int>, OutDegMap<Graph> >(); 479 480 Graph gr; 481 Node n0 = gr.addNode(); 482 Node n1 = gr.addNode(); 483 Node n2 = gr.addNode(); 484 485 gr.addEdge(n0,n1); 486 gr.addEdge(n1,n2); 487 gr.addEdge(n0,n2); 488 gr.addEdge(n2,n1); 489 gr.addEdge(n1,n2); 490 gr.addEdge(n0,n1); 491 492 for (EdgeIt e(gr); e != INVALID; ++e) { 493 check(forwardMap(gr)[e] == gr.direct(e, true), "Wrong ForwardMap"); 494 check(backwardMap(gr)[e] == gr.direct(e, false), "Wrong BackwardMap"); 495 } 496 497 compareMap(sourceMap(orienter(gr, constMap<Edge, bool>(true))), 498 targetMap(orienter(gr, constMap<Edge, bool>(false))), 499 EdgeIt(gr)); 500 501 typedef Orienter<Graph, const ConstMap<Edge, bool> > Digraph; 502 Digraph dgr(gr, constMap<Edge, bool>(true)); 503 OutDegMap<Digraph> odm(dgr); 504 InDegMap<Digraph> idm(dgr); 505 506 check(odm[n0] == 3 && odm[n1] == 2 && odm[n2] == 1, "Wrong OutDegMap"); 507 check(idm[n0] == 0 && idm[n1] == 3 && idm[n2] == 3, "Wrong InDegMap"); 508 509 gr.addEdge(n2, n0); 510 511 check(odm[n0] == 3 && odm[n1] == 2 && odm[n2] == 2, "Wrong OutDegMap"); 512 check(idm[n0] == 1 && idm[n1] == 3 && idm[n2] == 3, "Wrong InDegMap"); 513 } 514 515 // CrossRefMap 516 { 517 typedef ListDigraph Graph; 518 DIGRAPH_TYPEDEFS(Graph); 519 520 checkConcept<ReadWriteMap<Node, int>, 521 CrossRefMap<Graph, Node, int> >(); 522 checkConcept<ReadWriteMap<Node, bool>, 523 CrossRefMap<Graph, Node, bool> >(); 524 checkConcept<ReadWriteMap<Node, double>, 525 CrossRefMap<Graph, Node, double> >(); 526 527 Graph gr; 528 typedef CrossRefMap<Graph, Node, char> CRMap; 529 CRMap map(gr); 530 531 Node n0 = gr.addNode(); 532 Node n1 = gr.addNode(); 533 Node n2 = gr.addNode(); 534 535 map.set(n0, 'A'); 536 map.set(n1, 'B'); 537 map.set(n2, 'C'); 538 539 check(map[n0] == 'A' && map('A') == n0 && map.inverse()['A'] == n0, 540 "Wrong CrossRefMap"); 541 check(map[n1] == 'B' && map('B') == n1 && map.inverse()['B'] == n1, 542 "Wrong CrossRefMap"); 543 check(map[n2] == 'C' && map('C') == n2 && map.inverse()['C'] == n2, 544 "Wrong CrossRefMap"); 545 check(map.count('A') == 1 && map.count('B') == 1 && map.count('C') == 1, 546 "Wrong CrossRefMap::count()"); 547 548 CRMap::ValueIt it = map.beginValue(); 549 check(*it++ == 'A' && *it++ == 'B' && *it++ == 'C' && 550 it == map.endValue(), "Wrong value iterator"); 551 552 map.set(n2, 'A'); 553 554 check(map[n0] == 'A' && map[n1] == 'B' && map[n2] == 'A', 555 "Wrong CrossRefMap"); 556 check(map('A') == n0 && map.inverse()['A'] == n0, "Wrong CrossRefMap"); 557 check(map('B') == n1 && map.inverse()['B'] == n1, "Wrong CrossRefMap"); 558 check(map('C') == INVALID && map.inverse()['C'] == INVALID, 559 "Wrong CrossRefMap"); 560 check(map.count('A') == 2 && map.count('B') == 1 && map.count('C') == 0, 561 "Wrong CrossRefMap::count()"); 562 563 it = map.beginValue(); 564 check(*it++ == 'A' && *it++ == 'A' && *it++ == 'B' && 565 it == map.endValue(), "Wrong value iterator"); 566 567 map.set(n0, 'C'); 568 569 check(map[n0] == 'C' && map[n1] == 'B' && map[n2] == 'A', 570 "Wrong CrossRefMap"); 571 check(map('A') == n2 && map.inverse()['A'] == n2, "Wrong CrossRefMap"); 572 check(map('B') == n1 && map.inverse()['B'] == n1, "Wrong CrossRefMap"); 573 check(map('C') == n0 && map.inverse()['C'] == n0, "Wrong CrossRefMap"); 574 check(map.count('A') == 1 && map.count('B') == 1 && map.count('C') == 1, 575 "Wrong CrossRefMap::count()"); 576 577 it = map.beginValue(); 578 check(*it++ == 'A' && *it++ == 'B' && *it++ == 'C' && 579 it == map.endValue(), "Wrong value iterator"); 351 580 } 352 581 … … 547 776 } 548 777 549 for (Ivm::ValueIt eratorvit = map1.beginValue();778 for (Ivm::ValueIt vit = map1.beginValue(); 550 779 vit != map1.endValue(); ++vit) { 551 780 check(map1[static_cast<Item>(Ivm::ItemIt(map1, *vit))] == *vit, 552 "Wrong ValueIt erator");781 "Wrong ValueIt"); 553 782 } 554 783
Note: See TracChangeset
for help on using the changeset viewer.