Changes in / [316:689f24ee83e6:317:a0ab96ad65fe] in lemon-main
- Files:
-
- 2 added
- 1 deleted
- 38 edited
Legend:
- Unmodified
- Added
- Removed
-
Makefile.am
r227 r310 25 25 bin_PROGRAMS = 26 26 check_PROGRAMS = 27 dist_bin_SCRIPTS = 27 28 TESTS = 28 29 XFAIL_TESTS = … … 32 33 include doc/Makefile.am 33 34 include demo/Makefile.am 34 include benchmark/Makefile.am35 35 include tools/Makefile.am 36 36 -
README
r246 r310 38 38 Contains programs to check the integrity and correctness of LEMON. 39 39 40 benchmark/41 42 Contains programs for measuring the performance of algorithms.43 44 40 tools/ 45 41 -
configure.ac
r296 r310 82 82 AM_CONDITIONAL([WANT_TOOLS], [test x"$enable_tools" != x"no"]) 83 83 84 dnl Disable/enable building the benchmarks.85 AC_ARG_ENABLE([benchmark],86 AS_HELP_STRING([--enable-benchmark], [build the benchmarks])87 AS_HELP_STRING([--disable-benchmark], [do not build the benchmarks @<:@default@:>@]),88 [], [enable_benchmark=no])89 AC_MSG_CHECKING([whether to build the benchmarks])90 if test x"$enable_benchmark" != x"no"; then91 AC_MSG_RESULT([yes])92 else93 AC_MSG_RESULT([no])94 fi95 AM_CONDITIONAL([WANT_BENCHMARK], [test x"$enable_benchmark" != x"no"])96 97 84 dnl Checks for header files. 98 85 AC_CHECK_HEADERS(limits.h sys/time.h sys/times.h unistd.h) … … 133 120 #echo SOPLEX support................ : $lx_soplex_found 134 121 #echo 135 echo Build benchmarks.............. : $enable_benchmark136 122 echo Build demo programs........... : $enable_demo 137 123 echo Build additional tools........ : $enable_tools -
demo/arg_parser_demo.cc
r209 r311 28 28 29 29 using namespace lemon; 30 int main(int argc, c onst char **argv)30 int main(int argc, char **argv) 31 31 { 32 32 // Initialize the argument parser -
demo/graph_to_eps_demo.cc
r220 r313 27 27 /// how to handle parallel egdes, how to change the properties (like 28 28 /// color, shape, size, title etc.) of nodes and arcs individually 29 /// using appropriate \ref maps-page "graph maps".29 /// using appropriate graph maps. 30 30 /// 31 31 /// \include graph_to_eps_demo.cc -
doc/Makefile.am
r316 r317 8 8 doc/license.dox \ 9 9 doc/mainpage.dox \ 10 doc/migration.dox \ 10 11 doc/named-param.dox \ 11 12 doc/namespaces.dox \ -
doc/groups.dox
r236 r314 55 55 You are free to use the graph structure that fit your requirements 56 56 the best, most graph algorithms and auxiliary data structures can be used 57 with any graph structures. 57 with any graph structure. 58 59 <b>See also:</b> \ref graph_concepts "Graph Structure Concepts". 58 60 */ 59 61 … … 75 77 This group describes the map structures implemented in LEMON. 76 78 77 LEMON provides several special purpose maps that e.g. combine79 LEMON provides several special purpose maps and map adaptors that e.g. combine 78 80 new maps from existing ones. 81 82 <b>See also:</b> \ref map_concepts "Map Concepts". 79 83 */ 80 84 … … 87 91 values to the nodes and arcs of graphs. 88 92 */ 89 90 93 91 94 /** … … 105 108 algorithms. If a function type algorithm is called then the function 106 109 type map adaptors can be used comfortable. For example let's see the 107 usage of map adaptors with the \c digraphToEps() function.110 usage of map adaptors with the \c graphToEps() function. 108 111 \code 109 112 Color nodeColor(int deg) { … … 119 122 Digraph::NodeMap<int> degree_map(graph); 120 123 121 digraphToEps(graph, "graph.eps")124 graphToEps(graph, "graph.eps") 122 125 .coords(coords).scaleToA4().undirected() 123 126 .nodeColors(composeMap(functorToMap(nodeColor), degree_map)) … … 125 128 \endcode 126 129 The \c functorToMap() function makes an \c int to \c Color map from the 127 \ e nodeColor() function. The \c composeMap() compose the \edegree_map130 \c nodeColor() function. The \c composeMap() compose the \c degree_map 128 131 and the previously created map. The composed map is a proper function to 129 132 get the color of each node. … … 174 177 175 178 \sa lemon::concepts::Path 176 177 179 */ 178 180 … … 186 188 */ 187 189 188 189 190 /** 190 191 @defgroup algs Algorithms … … 202 203 203 204 This group describes the common graph search algorithms like 204 Breadth- first search (Bfs) and Depth-first search (Dfs).205 */ 206 207 /** 208 @defgroup shortest_path Shortest Path algorithms205 Breadth-First Search (BFS) and Depth-First Search (DFS). 206 */ 207 208 /** 209 @defgroup shortest_path Shortest Path Algorithms 209 210 @ingroup algs 210 211 \brief Algorithms for finding shortest paths. … … 214 215 215 216 /** 216 @defgroup max_flow Maximum Flow algorithms217 @defgroup max_flow Maximum Flow Algorithms 217 218 @ingroup algs 218 219 \brief Algorithms for finding maximum flows. … … 242 243 provides functions to query the minimum cut, which is the dual linear 243 244 programming problem of the maximum flow. 244 245 */ 246 247 /** 248 @defgroup min_cost_flow Minimum Cost Flow algorithms 245 */ 246 247 /** 248 @defgroup min_cost_flow Minimum Cost Flow Algorithms 249 249 @ingroup algs 250 250 … … 256 256 257 257 /** 258 @defgroup min_cut Minimum Cut algorithms258 @defgroup min_cut Minimum Cut Algorithms 259 259 @ingroup algs 260 260 … … 283 283 If you want to find minimum cut just between two distinict nodes, 284 284 please see the \ref max_flow "Maximum Flow page". 285 286 */ 287 288 /** 289 @defgroup graph_prop Connectivity and other graph properties 285 */ 286 287 /** 288 @defgroup graph_prop Connectivity and Other Graph Properties 290 289 @ingroup algs 291 290 \brief Algorithms for discovering the graph properties … … 299 298 300 299 /** 301 @defgroup planar Planarity embedding and drawing300 @defgroup planar Planarity Embedding and Drawing 302 301 @ingroup algs 303 302 \brief Algorithms for planarity checking, embedding and drawing … … 311 310 312 311 /** 313 @defgroup matching Matching algorithms312 @defgroup matching Matching Algorithms 314 313 @ingroup algs 315 314 \brief Algorithms for finding matchings in graphs and bipartite graphs. … … 349 348 \image html bipartite_matching.png 350 349 \image latex bipartite_matching.eps "Bipartite Matching" width=\textwidth 351 352 */ 353 354 /** 355 @defgroup spantree Minimum Spanning Tree algorithms 350 */ 351 352 /** 353 @defgroup spantree Minimum Spanning Tree Algorithms 356 354 @ingroup algs 357 355 \brief Algorithms for finding a minimum cost spanning tree in a graph. … … 361 359 */ 362 360 363 364 /** 365 @defgroup auxalg Auxiliary algorithms 361 /** 362 @defgroup auxalg Auxiliary Algorithms 366 363 @ingroup algs 367 364 \brief Auxiliary algorithms implemented in LEMON. … … 372 369 373 370 /** 374 @defgroup approx Approximation algorithms 371 @defgroup approx Approximation Algorithms 372 @ingroup algs 375 373 \brief Approximation algorithms. 376 374 … … 386 384 This group describes some general optimization frameworks 387 385 implemented in LEMON. 388 389 */ 390 391 /** 392 @defgroup lp_group Lp and Mip solvers 386 */ 387 388 /** 389 @defgroup lp_group Lp and Mip Solvers 393 390 @ingroup gen_opt_group 394 391 \brief Lp and Mip solver interfaces for LEMON. … … 397 394 various LP solvers could be used in the same manner with this 398 395 interface. 399 400 */ 401 402 /** 403 @defgroup lp_utils Tools for Lp and Mip solvers 396 */ 397 398 /** 399 @defgroup lp_utils Tools for Lp and Mip Solvers 404 400 @ingroup lp_group 405 401 \brief Helper tools to the Lp and Mip solvers. … … 442 438 443 439 /** 444 @defgroup timecount Time measuring and Counting440 @defgroup timecount Time Measuring and Counting 445 441 @ingroup misc 446 442 \brief Simple tools for measuring the performance of algorithms. … … 448 444 This group describes simple tools for measuring the performance 449 445 of algorithms. 450 */451 452 /**453 @defgroup graphbits Tools for Graph Implementation454 @ingroup utils455 \brief Tools to make it easier to create graphs.456 457 This group describes the tools that makes it easier to create graphs and458 the maps that dynamically update with the graph changes.459 446 */ 460 447 … … 472 459 473 460 This group describes the tools for importing and exporting graphs 474 and graph related data. Now it supports the LEMON format, the 475 \c DIMACS format and the encapsulated postscript (EPS) format. 461 and graph related data. Now it supports the \ref lgf-format 462 "LEMON Graph Format", the \c DIMACS format and the encapsulated 463 postscript (EPS) format. 476 464 */ 477 465 … … 479 467 @defgroup lemon_io LEMON Input-Output 480 468 @ingroup io_group 481 \brief Reading and writing \ref lgf-format "LEMON Graph Format".469 \brief Reading and writing LEMON Graph Format. 482 470 483 471 This group describes methods for reading and writing … … 486 474 487 475 /** 488 @defgroup eps_io Postscript exporting476 @defgroup eps_io Postscript Exporting 489 477 @ingroup io_group 490 478 \brief General \c EPS drawer and graph exporter … … 493 481 graph exporting tools. 494 482 */ 495 496 483 497 484 /** … … 522 509 523 510 - Finally, They can serve as a skeleton of a new implementation of a concept. 524 525 */ 526 511 */ 527 512 528 513 /** … … 535 520 */ 536 521 537 /* --- Unused group 538 @defgroup experimental Experimental Structures and Algorithms 539 This group describes some Experimental structures and algorithms. 540 The stuff here is subject to change. 522 /** 523 @defgroup map_concepts Map Concepts 524 @ingroup concept 525 \brief Skeleton and concept checking classes for maps 526 527 This group describes the skeletons and concept checking classes of maps. 541 528 */ 542 529 -
doc/lgf.dox
r236 r313 79 79 \endcode 80 80 81 The \c \@edges is just a synonym of \c \@arcs. The @arcs section can81 The \c \@edges is just a synonym of \c \@arcs. The \@arcs section can 82 82 also store the edge set of an undirected graph. In such case there is 83 83 a conventional method for store arc maps in the file, if two columns -
doc/mainpage.dox
r209 r314 51 51 If you 52 52 want to see how LEMON works, see 53 some \ref demoprograms "demo programs" !53 some \ref demoprograms "demo programs". 54 54 55 55 If you know what you are looking for then try to find it under the … … 57 57 section. 58 58 59 59 If you are a user of the old (0.x) series of LEMON, please check out the 60 \ref migration "Migration Guide" for the backward incompatibilities. 60 61 */ -
lemon/arg_parser.cc
r214 r311 27 27 } 28 28 29 ArgParser::ArgParser(int argc, const char * *argv) :_argc(argc), _argv(argv),30 29 ArgParser::ArgParser(int argc, const char * const *argv) 30 :_argc(argc), _argv(argv), _command_name(argv[0]) { 31 31 funcOption("-help","Print a short help message",_showHelp,this); 32 32 synonym("help","-help"); 33 33 synonym("h","-help"); 34 35 34 } 36 35 -
lemon/arg_parser.h
r290 r311 47 47 48 48 int _argc; 49 const char * *_argv;49 const char * const *_argv; 50 50 51 51 enum OptType { UNKNOWN=0, BOOL=1, STRING=2, DOUBLE=3, INTEGER=4, FUNC=5 }; … … 120 120 121 121 ///Constructor 122 ArgParser(int argc, const char * *argv);122 ArgParser(int argc, const char * const *argv); 123 123 124 124 ~ArgParser(); -
lemon/bfs.h
r292 r301 50 50 ///It must meet the \ref concepts::WriteMap "WriteMap" concept. 51 51 typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap; 52 ///Instantiates a \refPredMap.53 54 ///This function instantiates a \refPredMap.52 ///Instantiates a PredMap. 53 54 ///This function instantiates a PredMap. 55 55 ///\param g is the digraph, to which we would like to define the 56 /// \refPredMap.56 ///PredMap. 57 57 static PredMap *createPredMap(const Digraph &g) 58 58 { … … 65 65 ///It must meet the \ref concepts::WriteMap "WriteMap" concept. 66 66 typedef NullMap<typename Digraph::Node,bool> ProcessedMap; 67 ///Instantiates a \refProcessedMap.68 69 ///This function instantiates a \refProcessedMap.67 ///Instantiates a ProcessedMap. 68 69 ///This function instantiates a ProcessedMap. 70 70 ///\param g is the digraph, to which 71 ///we would like to define the \refProcessedMap71 ///we would like to define the ProcessedMap 72 72 #ifdef DOXYGEN 73 73 static ProcessedMap *createProcessedMap(const Digraph &g) … … 84 84 ///It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept. 85 85 typedef typename Digraph::template NodeMap<bool> ReachedMap; 86 ///Instantiates a \refReachedMap.87 88 ///This function instantiates a \refReachedMap.86 ///Instantiates a ReachedMap. 87 88 ///This function instantiates a ReachedMap. 89 89 ///\param g is the digraph, to which 90 ///we would like to define the \refReachedMap.90 ///we would like to define the ReachedMap. 91 91 static ReachedMap *createReachedMap(const Digraph &g) 92 92 { … … 99 99 ///It must meet the \ref concepts::WriteMap "WriteMap" concept. 100 100 typedef typename Digraph::template NodeMap<int> DistMap; 101 ///Instantiates a \refDistMap.102 103 ///This function instantiates a \refDistMap.101 ///Instantiates a DistMap. 102 103 ///This function instantiates a DistMap. 104 104 ///\param g is the digraph, to which we would like to define the 105 /// \refDistMap.105 ///DistMap. 106 106 static DistMap *createDistMap(const Digraph &g) 107 107 { … … 228 228 }; 229 229 ///\brief \ref named-templ-param "Named parameter" for setting 230 /// \refPredMap type.230 ///PredMap type. 231 231 /// 232 232 ///\ref named-templ-param "Named parameter" for setting 233 /// \refPredMap type.233 ///PredMap type. 234 234 template <class T> 235 235 struct SetPredMap : public Bfs< Digraph, SetPredMapTraits<T> > { … … 247 247 }; 248 248 ///\brief \ref named-templ-param "Named parameter" for setting 249 /// \refDistMap type.249 ///DistMap type. 250 250 /// 251 251 ///\ref named-templ-param "Named parameter" for setting 252 /// \refDistMap type.252 ///DistMap type. 253 253 template <class T> 254 254 struct SetDistMap : public Bfs< Digraph, SetDistMapTraits<T> > { … … 266 266 }; 267 267 ///\brief \ref named-templ-param "Named parameter" for setting 268 /// \refReachedMap type.268 ///ReachedMap type. 269 269 /// 270 270 ///\ref named-templ-param "Named parameter" for setting 271 /// \refReachedMap type.271 ///ReachedMap type. 272 272 template <class T> 273 273 struct SetReachedMap : public Bfs< Digraph, SetReachedMapTraits<T> > { … … 285 285 }; 286 286 ///\brief \ref named-templ-param "Named parameter" for setting 287 /// \refProcessedMap type.287 ///ProcessedMap type. 288 288 /// 289 289 ///\ref named-templ-param "Named parameter" for setting 290 /// \refProcessedMap type.290 ///ProcessedMap type. 291 291 template <class T> 292 292 struct SetProcessedMap : public Bfs< Digraph, SetProcessedMapTraits<T> > { … … 303 303 }; 304 304 ///\brief \ref named-templ-param "Named parameter" for setting 305 /// \refProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>.305 ///ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>. 306 306 /// 307 307 ///\ref named-templ-param "Named parameter" for setting 308 /// \refProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>.308 ///ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>. 309 309 ///If you don't set it explicitly, it will be automatically allocated. 310 310 struct SetStandardProcessedMap : … … 836 836 ///It must meet the \ref concepts::WriteMap "WriteMap" concept. 837 837 typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap; 838 ///Instantiates a \refPredMap.839 840 ///This function instantiates a \refPredMap.838 ///Instantiates a PredMap. 839 840 ///This function instantiates a PredMap. 841 841 ///\param g is the digraph, to which we would like to define the 842 /// \refPredMap.842 ///PredMap. 843 843 static PredMap *createPredMap(const Digraph &g) 844 844 { … … 852 852 ///By default it is a NullMap. 853 853 typedef NullMap<typename Digraph::Node,bool> ProcessedMap; 854 ///Instantiates a \refProcessedMap.855 856 ///This function instantiates a \refProcessedMap.854 ///Instantiates a ProcessedMap. 855 856 ///This function instantiates a ProcessedMap. 857 857 ///\param g is the digraph, to which 858 ///we would like to define the \refProcessedMap.858 ///we would like to define the ProcessedMap. 859 859 #ifdef DOXYGEN 860 860 static ProcessedMap *createProcessedMap(const Digraph &g) … … 871 871 ///It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept. 872 872 typedef typename Digraph::template NodeMap<bool> ReachedMap; 873 ///Instantiates a \refReachedMap.874 875 ///This function instantiates a \refReachedMap.873 ///Instantiates a ReachedMap. 874 875 ///This function instantiates a ReachedMap. 876 876 ///\param g is the digraph, to which 877 ///we would like to define the \refReachedMap.877 ///we would like to define the ReachedMap. 878 878 static ReachedMap *createReachedMap(const Digraph &g) 879 879 { … … 886 886 ///It must meet the \ref concepts::WriteMap "WriteMap" concept. 887 887 typedef typename Digraph::template NodeMap<int> DistMap; 888 ///Instantiates a \refDistMap.889 890 ///This function instantiates a \refDistMap.888 ///Instantiates a DistMap. 889 890 ///This function instantiates a DistMap. 891 891 ///\param g is the digraph, to which we would like to define 892 ///the \refDistMap892 ///the DistMap 893 893 static DistMap *createDistMap(const Digraph &g) 894 894 { … … 903 903 }; 904 904 905 /// Default traits class used by \refBfsWizard905 /// Default traits class used by BfsWizard 906 906 907 907 /// To make it easier to use Bfs algorithm … … 1069 1069 }; 1070 1070 ///\brief \ref named-func-param "Named parameter" 1071 ///for setting \refPredMap object.1071 ///for setting PredMap object. 1072 1072 /// 1073 1073 ///\ref named-func-param "Named parameter" 1074 ///for setting \refPredMap object.1074 ///for setting PredMap object. 1075 1075 template<class T> 1076 1076 BfsWizard<SetPredMapBase<T> > predMap(const T &t) … … 1087 1087 }; 1088 1088 ///\brief \ref named-func-param "Named parameter" 1089 ///for setting \refReachedMap object.1089 ///for setting ReachedMap object. 1090 1090 /// 1091 1091 /// \ref named-func-param "Named parameter" 1092 ///for setting \refReachedMap object.1092 ///for setting ReachedMap object. 1093 1093 template<class T> 1094 1094 BfsWizard<SetReachedMapBase<T> > reachedMap(const T &t) … … 1105 1105 }; 1106 1106 ///\brief \ref named-func-param "Named parameter" 1107 ///for setting \refDistMap object.1107 ///for setting DistMap object. 1108 1108 /// 1109 1109 /// \ref named-func-param "Named parameter" 1110 ///for setting \refDistMap object.1110 ///for setting DistMap object. 1111 1111 template<class T> 1112 1112 BfsWizard<SetDistMapBase<T> > distMap(const T &t) … … 1123 1123 }; 1124 1124 ///\brief \ref named-func-param "Named parameter" 1125 ///for setting \refProcessedMap object.1125 ///for setting ProcessedMap object. 1126 1126 /// 1127 1127 /// \ref named-func-param "Named parameter" 1128 ///for setting \refProcessedMap object.1128 ///for setting ProcessedMap object. 1129 1129 template<class T> 1130 1130 BfsWizard<SetProcessedMapBase<T> > processedMap(const T &t) … … 1268 1268 typedef typename Digraph::template NodeMap<bool> ReachedMap; 1269 1269 1270 /// \brief Instantiates a \refReachedMap.1271 /// 1272 /// This function instantiates a \refReachedMap.1270 /// \brief Instantiates a ReachedMap. 1271 /// 1272 /// This function instantiates a ReachedMap. 1273 1273 /// \param digraph is the digraph, to which 1274 /// we would like to define the \refReachedMap.1274 /// we would like to define the ReachedMap. 1275 1275 static ReachedMap *createReachedMap(const Digraph &digraph) { 1276 1276 return new ReachedMap(digraph); -
lemon/bits/alteration_notifier.h
r236 r314 25 25 #include <lemon/core.h> 26 26 27 // /\ingroup graphbits28 // /\file29 // /\brief Observer notifier for graph alteration observers.27 //\ingroup graphbits 28 //\file 29 //\brief Observer notifier for graph alteration observers. 30 30 31 31 namespace lemon { 32 32 33 /// \ingroup graphbits 34 /// 35 /// \brief Notifier class to notify observes about alterations in 36 /// a container. 37 /// 38 /// The simple graph's can be refered as two containers, one node container 39 /// and one edge container. But they are not standard containers they 40 /// does not store values directly they are just key continars for more 41 /// value containers which are the node and edge maps. 42 /// 43 /// The graph's node and edge sets can be changed as we add or erase 44 /// nodes and edges in the graph. LEMON would like to handle easily 45 /// that the node and edge maps should contain values for all nodes or 46 /// edges. If we want to check on every indicing if the map contains 47 /// the current indicing key that cause a drawback in the performance 48 /// in the library. We use another solution we notify all maps about 49 /// an alteration in the graph, which cause only drawback on the 50 /// alteration of the graph. 51 /// 52 /// This class provides an interface to the container. The \e first() and \e 53 /// next() member functions make possible to iterate on the keys of the 54 /// container. The \e id() function returns an integer id for each key. 55 /// The \e maxId() function gives back an upper bound of the ids. 56 /// 57 /// For the proper functonality of this class, we should notify it 58 /// about each alteration in the container. The alterations have four type 59 /// as \e add(), \e erase(), \e build() and \e clear(). The \e add() and 60 /// \e erase() signals that only one or few items added or erased to or 61 /// from the graph. If all items are erased from the graph or from an empty 62 /// graph a new graph is builded then it can be signaled with the 63 /// clear() and build() members. Important rule that if we erase items 64 /// from graph we should first signal the alteration and after that erase 65 /// them from the container, on the other way on item addition we should 66 /// first extend the container and just after that signal the alteration. 67 /// 68 /// The alteration can be observed with a class inherited from the 69 /// \e ObserverBase nested class. The signals can be handled with 70 /// overriding the virtual functions defined in the base class. The 71 /// observer base can be attached to the notifier with the 72 /// \e attach() member and can be detached with detach() function. The 73 /// alteration handlers should not call any function which signals 74 /// an other alteration in the same notifier and should not 75 /// detach any observer from the notifier. 76 /// 77 /// Alteration observers try to be exception safe. If an \e add() or 78 /// a \e clear() function throws an exception then the remaining 79 /// observeres will not be notified and the fulfilled additions will 80 /// be rolled back by calling the \e erase() or \e clear() 81 /// functions. Thence the \e erase() and \e clear() should not throw 82 /// exception. Actullay, it can be throw only 83 /// \ref AlterationObserver::ImmediateDetach ImmediateDetach 84 /// exception which detach the observer from the notifier. 85 /// 86 /// There are some place when the alteration observing is not completly 87 /// reliable. If we want to carry out the node degree in the graph 88 /// as in the \ref InDegMap and we use the reverseEdge that cause 89 /// unreliable functionality. Because the alteration observing signals 90 /// only erasing and adding but not the reversing it will stores bad 91 /// degrees. The sub graph adaptors cannot signal the alterations because 92 /// just a setting in the filter map can modify the graph and this cannot 93 /// be watched in any way. 94 /// 95 /// \param _Container The container which is observed. 96 /// \param _Item The item type which is obserbved. 33 // \ingroup graphbits 34 // 35 // \brief Notifier class to notify observes about alterations in 36 // a container. 37 // 38 // The simple graph's can be refered as two containers, one node container 39 // and one edge container. But they are not standard containers they 40 // does not store values directly they are just key continars for more 41 // value containers which are the node and edge maps. 42 // 43 // The graph's node and edge sets can be changed as we add or erase 44 // nodes and edges in the graph. LEMON would like to handle easily 45 // that the node and edge maps should contain values for all nodes or 46 // edges. If we want to check on every indicing if the map contains 47 // the current indicing key that cause a drawback in the performance 48 // in the library. We use another solution we notify all maps about 49 // an alteration in the graph, which cause only drawback on the 50 // alteration of the graph. 51 // 52 // This class provides an interface to the container. The \e first() and \e 53 // next() member functions make possible to iterate on the keys of the 54 // container. The \e id() function returns an integer id for each key. 55 // The \e maxId() function gives back an upper bound of the ids. 56 // 57 // For the proper functonality of this class, we should notify it 58 // about each alteration in the container. The alterations have four type 59 // as \e add(), \e erase(), \e build() and \e clear(). The \e add() and 60 // \e erase() signals that only one or few items added or erased to or 61 // from the graph. If all items are erased from the graph or from an empty 62 // graph a new graph is builded then it can be signaled with the 63 // clear() and build() members. Important rule that if we erase items 64 // from graph we should first signal the alteration and after that erase 65 // them from the container, on the other way on item addition we should 66 // first extend the container and just after that signal the alteration. 67 // 68 // The alteration can be observed with a class inherited from the 69 // \e ObserverBase nested class. The signals can be handled with 70 // overriding the virtual functions defined in the base class. The 71 // observer base can be attached to the notifier with the 72 // \e attach() member and can be detached with detach() function. The 73 // alteration handlers should not call any function which signals 74 // an other alteration in the same notifier and should not 75 // detach any observer from the notifier. 76 // 77 // Alteration observers try to be exception safe. If an \e add() or 78 // a \e clear() function throws an exception then the remaining 79 // observeres will not be notified and the fulfilled additions will 80 // be rolled back by calling the \e erase() or \e clear() 81 // functions. Thence the \e erase() and \e clear() should not throw 82 // exception. Actullay, it can be throw only \ref ImmediateDetach 83 // exception which detach the observer from the notifier. 84 // 85 // There are some place when the alteration observing is not completly 86 // reliable. If we want to carry out the node degree in the graph 87 // as in the \ref InDegMap and we use the reverseEdge that cause 88 // unreliable functionality. Because the alteration observing signals 89 // only erasing and adding but not the reversing it will stores bad 90 // degrees. The sub graph adaptors cannot signal the alterations because 91 // just a setting in the filter map can modify the graph and this cannot 92 // be watched in any way. 93 // 94 // \param _Container The container which is observed. 95 // \param _Item The item type which is obserbved. 97 96 98 97 template <typename _Container, typename _Item> … … 105 104 typedef _Item Item; 106 105 107 // /\brief Exception which can be called from \e clear() and108 // /\e erase().109 // /110 // /From the \e clear() and \e erase() function only this111 // /exception is allowed to throw. The exception immediatly112 // /detaches the current observer from the notifier. Because the113 // /\e clear() and \e erase() should not throw other exceptions114 // /it can be used to invalidate the observer.106 // \brief Exception which can be called from \e clear() and 107 // \e erase(). 108 // 109 // From the \e clear() and \e erase() function only this 110 // exception is allowed to throw. The exception immediatly 111 // detaches the current observer from the notifier. Because the 112 // \e clear() and \e erase() should not throw other exceptions 113 // it can be used to invalidate the observer. 115 114 struct ImmediateDetach {}; 116 115 117 /// \brief ObserverBase is the base class for the observers. 118 /// 119 /// ObserverBase is the abstract base class for the observers. 120 /// It will be notified about an item was inserted into or 121 /// erased from the graph. 122 /// 123 /// The observer interface contains some pure virtual functions 124 /// to override. The add() and erase() functions are 125 /// to notify the oberver when one item is added or 126 /// erased. 127 /// 128 /// The build() and clear() members are to notify the observer 129 /// about the container is built from an empty container or 130 /// is cleared to an empty container. 131 116 // \brief ObserverBase is the base class for the observers. 117 // 118 // ObserverBase is the abstract base class for the observers. 119 // It will be notified about an item was inserted into or 120 // erased from the graph. 121 // 122 // The observer interface contains some pure virtual functions 123 // to override. The add() and erase() functions are 124 // to notify the oberver when one item is added or 125 // erased. 126 // 127 // The build() and clear() members are to notify the observer 128 // about the container is built from an empty container or 129 // is cleared to an empty container. 132 130 class ObserverBase { 133 131 protected: … … 136 134 friend class AlterationNotifier; 137 135 138 /// \brief Default constructor. 139 /// 140 /// Default constructor for ObserverBase. 141 /// 136 // \brief Default constructor. 137 // 138 // Default constructor for ObserverBase. 142 139 ObserverBase() : _notifier(0) {} 143 140 144 // /\brief Constructor which attach the observer into notifier.145 // /146 // /Constructor which attach the observer into notifier.141 // \brief Constructor which attach the observer into notifier. 142 // 143 // Constructor which attach the observer into notifier. 147 144 ObserverBase(AlterationNotifier& nf) { 148 145 attach(nf); 149 146 } 150 147 151 // /\brief Constructor which attach the obserever to the same notifier.152 // /153 // /Constructor which attach the obserever to the same notifier as154 // /the other observer is attached to.148 // \brief Constructor which attach the obserever to the same notifier. 149 // 150 // Constructor which attach the obserever to the same notifier as 151 // the other observer is attached to. 155 152 ObserverBase(const ObserverBase& copy) { 156 153 if (copy.attached()) { … … 159 156 } 160 157 161 // /\brief Destructor158 // \brief Destructor 162 159 virtual ~ObserverBase() { 163 160 if (attached()) { … … 166 163 } 167 164 168 /// \brief Attaches the observer into an AlterationNotifier. 169 /// 170 /// This member attaches the observer into an AlterationNotifier. 171 /// 165 // \brief Attaches the observer into an AlterationNotifier. 166 // 167 // This member attaches the observer into an AlterationNotifier. 172 168 void attach(AlterationNotifier& nf) { 173 169 nf.attach(*this); 174 170 } 175 171 176 /// \brief Detaches the observer into an AlterationNotifier. 177 /// 178 /// This member detaches the observer from an AlterationNotifier. 179 /// 172 // \brief Detaches the observer into an AlterationNotifier. 173 // 174 // This member detaches the observer from an AlterationNotifier. 180 175 void detach() { 181 176 _notifier->detach(*this); 182 177 } 183 178 184 /// \brief Gives back a pointer to the notifier which the map 185 /// attached into. 186 /// 187 /// This function gives back a pointer to the notifier which the map 188 /// attached into. 189 /// 179 // \brief Gives back a pointer to the notifier which the map 180 // attached into. 181 // 182 // This function gives back a pointer to the notifier which the map 183 // attached into. 190 184 Notifier* notifier() const { return const_cast<Notifier*>(_notifier); } 191 185 192 // /Gives back true when the observer is attached into a notifier.186 // Gives back true when the observer is attached into a notifier. 193 187 bool attached() const { return _notifier != 0; } 194 188 … … 202 196 typename std::list<ObserverBase*>::iterator _index; 203 197 204 // /\brief The member function to notificate the observer about an205 // /item is added to the container.206 // /207 // /The add() member function notificates the observer about an item208 // /is added to the container. It have to be overrided in the209 // /subclasses.198 // \brief The member function to notificate the observer about an 199 // item is added to the container. 200 // 201 // The add() member function notificates the observer about an item 202 // is added to the container. It have to be overrided in the 203 // subclasses. 210 204 virtual void add(const Item&) = 0; 211 205 212 // /\brief The member function to notificate the observer about213 // /more item is added to the container.214 // /215 // /The add() member function notificates the observer about more item216 // /is added to the container. It have to be overrided in the217 // /subclasses.206 // \brief The member function to notificate the observer about 207 // more item is added to the container. 208 // 209 // The add() member function notificates the observer about more item 210 // is added to the container. It have to be overrided in the 211 // subclasses. 218 212 virtual void add(const std::vector<Item>& items) = 0; 219 213 220 // /\brief The member function to notificate the observer about an221 // /item is erased from the container.222 // /223 // /The erase() member function notificates the observer about an224 // /item is erased from the container. It have to be overrided in225 // /the subclasses.214 // \brief The member function to notificate the observer about an 215 // item is erased from the container. 216 // 217 // The erase() member function notificates the observer about an 218 // item is erased from the container. It have to be overrided in 219 // the subclasses. 226 220 virtual void erase(const Item&) = 0; 227 221 228 // /\brief The member function to notificate the observer about229 // /more item is erased from the container.230 // /231 // /The erase() member function notificates the observer about more item232 // /is erased from the container. It have to be overrided in the233 // /subclasses.222 // \brief The member function to notificate the observer about 223 // more item is erased from the container. 224 // 225 // The erase() member function notificates the observer about more item 226 // is erased from the container. It have to be overrided in the 227 // subclasses. 234 228 virtual void erase(const std::vector<Item>& items) = 0; 235 229 236 /// \brief The member function to notificate the observer about the 237 /// container is built. 238 /// 239 /// The build() member function notificates the observer about the 240 /// container is built from an empty container. It have to be 241 /// overrided in the subclasses. 242 230 // \brief The member function to notificate the observer about the 231 // container is built. 232 // 233 // The build() member function notificates the observer about the 234 // container is built from an empty container. It have to be 235 // overrided in the subclasses. 243 236 virtual void build() = 0; 244 237 245 // /\brief The member function to notificate the observer about all246 // /items are erased from the container.247 // /248 // /The clear() member function notificates the observer about all249 // /items are erased from the container. It have to be overrided in250 // /the subclasses.238 // \brief The member function to notificate the observer about all 239 // items are erased from the container. 240 // 241 // The clear() member function notificates the observer about all 242 // items are erased from the container. It have to be overrided in 243 // the subclasses. 251 244 virtual void clear() = 0; 252 245 … … 263 256 public: 264 257 265 // /\brief Default constructor.266 // /267 // /The default constructor of the AlterationNotifier.268 // /It creates an empty notifier.258 // \brief Default constructor. 259 // 260 // The default constructor of the AlterationNotifier. 261 // It creates an empty notifier. 269 262 AlterationNotifier() 270 263 : container(0) {} 271 264 272 // /\brief Constructor.273 // /274 // /Constructor with the observed container parameter.265 // \brief Constructor. 266 // 267 // Constructor with the observed container parameter. 275 268 AlterationNotifier(const Container& _container) 276 269 : container(&_container) {} 277 270 278 // /\brief Copy Constructor of the AlterationNotifier.279 // /280 // /Copy constructor of the AlterationNotifier.281 // /It creates only an empty notifier because the copiable282 // /notifier's observers have to be registered still into that notifier.271 // \brief Copy Constructor of the AlterationNotifier. 272 // 273 // Copy constructor of the AlterationNotifier. 274 // It creates only an empty notifier because the copiable 275 // notifier's observers have to be registered still into that notifier. 283 276 AlterationNotifier(const AlterationNotifier& _notifier) 284 277 : container(_notifier.container) {} 285 278 286 /// \brief Destructor. 287 /// 288 /// Destructor of the AlterationNotifier. 289 /// 279 // \brief Destructor. 280 // 281 // Destructor of the AlterationNotifier. 290 282 ~AlterationNotifier() { 291 283 typename Observers::iterator it; … … 295 287 } 296 288 297 // /\brief Sets the container.298 // /299 // /Sets the container.289 // \brief Sets the container. 290 // 291 // Sets the container. 300 292 void setContainer(const Container& _container) { 301 293 container = &_container; … … 308 300 public: 309 301 310 311 312 /// \brief First item in the container. 313 /// 314 /// Returns the first item in the container. It is 315 /// for start the iteration on the container. 302 // \brief First item in the container. 303 // 304 // Returns the first item in the container. It is 305 // for start the iteration on the container. 316 306 void first(Item& item) const { 317 307 container->first(item); 318 308 } 319 309 320 // /\brief Next item in the container.321 // /322 // /Returns the next item in the container. It is323 // /for iterate on the container.310 // \brief Next item in the container. 311 // 312 // Returns the next item in the container. It is 313 // for iterate on the container. 324 314 void next(Item& item) const { 325 315 container->next(item); 326 316 } 327 317 328 // /\brief Returns the id of the item.329 // /330 // /Returns the id of the item provided by the container.318 // \brief Returns the id of the item. 319 // 320 // Returns the id of the item provided by the container. 331 321 int id(const Item& item) const { 332 322 return container->id(item); 333 323 } 334 324 335 // /\brief Returns the maximum id of the container.336 // /337 // /Returns the maximum id of the container.325 // \brief Returns the maximum id of the container. 326 // 327 // Returns the maximum id of the container. 338 328 int maxId() const { 339 329 return container->maxId(Item()); … … 355 345 public: 356 346 357 /// \brief Notifies all the registed observers about an item added to 358 /// the container. 359 /// 360 /// It notifies all the registed observers about an item added to 361 /// the container. 362 /// 347 // \brief Notifies all the registed observers about an item added to 348 // the container. 349 // 350 // It notifies all the registed observers about an item added to 351 // the container. 363 352 void add(const Item& item) { 364 353 typename Observers::reverse_iterator it; … … 376 365 } 377 366 378 /// \brief Notifies all the registed observers about more item added to 379 /// the container. 380 /// 381 /// It notifies all the registed observers about more item added to 382 /// the container. 383 /// 367 // \brief Notifies all the registed observers about more item added to 368 // the container. 369 // 370 // It notifies all the registed observers about more item added to 371 // the container. 384 372 void add(const std::vector<Item>& items) { 385 373 typename Observers::reverse_iterator it; … … 397 385 } 398 386 399 /// \brief Notifies all the registed observers about an item erased from 400 /// the container. 401 /// 402 /// It notifies all the registed observers about an item erased from 403 /// the container. 404 /// 387 // \brief Notifies all the registed observers about an item erased from 388 // the container. 389 // 390 // It notifies all the registed observers about an item erased from 391 // the container. 405 392 void erase(const Item& item) throw() { 406 393 typename Observers::iterator it = _observers.begin(); … … 417 404 } 418 405 419 /// \brief Notifies all the registed observers about more item erased 420 /// from the container. 421 /// 422 /// It notifies all the registed observers about more item erased from 423 /// the container. 424 /// 406 // \brief Notifies all the registed observers about more item erased 407 // from the container. 408 // 409 // It notifies all the registed observers about more item erased from 410 // the container. 425 411 void erase(const std::vector<Item>& items) { 426 412 typename Observers::iterator it = _observers.begin(); … … 437 423 } 438 424 439 // /\brief Notifies all the registed observers about the container is440 // /built.441 // /442 // /Notifies all the registed observers about the container is built443 // /from an empty container.425 // \brief Notifies all the registed observers about the container is 426 // built. 427 // 428 // Notifies all the registed observers about the container is built 429 // from an empty container. 444 430 void build() { 445 431 typename Observers::reverse_iterator it; … … 457 443 } 458 444 459 // /\brief Notifies all the registed observers about all items are460 // /erased.461 // /462 // /Notifies all the registed observers about all items are erased463 // /from the container.445 // \brief Notifies all the registed observers about all items are 446 // erased. 447 // 448 // Notifies all the registed observers about all items are erased 449 // from the container. 464 450 void clear() { 465 451 typename Observers::iterator it = _observers.begin(); -
lemon/bits/array_map.h
r263 r314 27 27 #include <lemon/concepts/maps.h> 28 28 29 // /\ingroup graphbits30 // /\file31 // /\brief Graph map based on the array storage.29 // \ingroup graphbits 30 // \file 31 // \brief Graph map based on the array storage. 32 32 33 33 namespace lemon { 34 34 35 // /\ingroup graphbits36 // /37 // /\brief Graph map based on the array storage.38 // /39 // /The ArrayMap template class is graph map structure what40 // /automatically updates the map when a key is added to or erased from41 // /the map. This map uses the allocators to implement42 // /the container functionality.43 // /44 // /The template parameters are the Graph the current Item type and45 // /the Value type of the map.35 // \ingroup graphbits 36 // 37 // \brief Graph map based on the array storage. 38 // 39 // The ArrayMap template class is graph map structure what 40 // automatically updates the map when a key is added to or erased from 41 // the map. This map uses the allocators to implement 42 // the container functionality. 43 // 44 // The template parameters are the Graph the current Item type and 45 // the Value type of the map. 46 46 template <typename _Graph, typename _Item, typename _Value> 47 47 class ArrayMap 48 48 : public ItemSetTraits<_Graph, _Item>::ItemNotifier::ObserverBase { 49 49 public: 50 // /The graph type of the maps.50 // The graph type of the maps. 51 51 typedef _Graph Graph; 52 // /The item type of the map.52 // The item type of the map. 53 53 typedef _Item Item; 54 // /The reference map tag.54 // The reference map tag. 55 55 typedef True ReferenceMapTag; 56 56 57 // /The key type of the maps.57 // The key type of the maps. 58 58 typedef _Item Key; 59 // /The value type of the map.59 // The value type of the map. 60 60 typedef _Value Value; 61 61 62 // /The const reference type of the map.62 // The const reference type of the map. 63 63 typedef const _Value& ConstReference; 64 // /The reference type of the map.64 // The reference type of the map. 65 65 typedef _Value& Reference; 66 66 67 // /The notifier type.67 // The notifier type. 68 68 typedef typename ItemSetTraits<_Graph, _Item>::ItemNotifier Notifier; 69 69 70 // /The MapBase of the Map which imlements the core regisitry function.70 // The MapBase of the Map which imlements the core regisitry function. 71 71 typedef typename Notifier::ObserverBase Parent; 72 72 … … 76 76 public: 77 77 78 // /\brief Graph initialized map constructor.79 // /80 // /Graph initialized map constructor.78 // \brief Graph initialized map constructor. 79 // 80 // Graph initialized map constructor. 81 81 explicit ArrayMap(const Graph& graph) { 82 82 Parent::attach(graph.notifier(Item())); … … 90 90 } 91 91 92 // /\brief Constructor to use default value to initialize the map.93 // /94 // /It constructs a map and initialize all of the the map.92 // \brief Constructor to use default value to initialize the map. 93 // 94 // It constructs a map and initialize all of the the map. 95 95 ArrayMap(const Graph& graph, const Value& value) { 96 96 Parent::attach(graph.notifier(Item())); … … 105 105 106 106 private: 107 // /\brief Constructor to copy a map of the same map type.108 // /109 // /Constructor to copy a map of the same map type.107 // \brief Constructor to copy a map of the same map type. 108 // 109 // Constructor to copy a map of the same map type. 110 110 ArrayMap(const ArrayMap& copy) : Parent() { 111 111 if (copy.attached()) { … … 123 123 } 124 124 125 // /\brief Assign operator.126 // /127 // /This operator assigns for each item in the map the128 // /value mapped to the same item in the copied map.129 // /The parameter map should be indiced with the same130 // /itemset because this assign operator does not change131 // /the container of the map.125 // \brief Assign operator. 126 // 127 // This operator assigns for each item in the map the 128 // value mapped to the same item in the copied map. 129 // The parameter map should be indiced with the same 130 // itemset because this assign operator does not change 131 // the container of the map. 132 132 ArrayMap& operator=(const ArrayMap& cmap) { 133 133 return operator=<ArrayMap>(cmap); … … 135 135 136 136 137 // /\brief Template assign operator.138 // /139 // /The given parameter should be conform to the ReadMap140 // /concecpt and could be indiced by the current item set of141 // /the NodeMap. In this case the value for each item142 // /is assigned by the value of the given ReadMap.137 // \brief Template assign operator. 138 // 139 // The given parameter should be conform to the ReadMap 140 // concecpt and could be indiced by the current item set of 141 // the NodeMap. In this case the value for each item 142 // is assigned by the value of the given ReadMap. 143 143 template <typename CMap> 144 144 ArrayMap& operator=(const CMap& cmap) { … … 153 153 154 154 public: 155 // /\brief The destructor of the map.156 // /157 // /The destructor of the map.155 // \brief The destructor of the map. 156 // 157 // The destructor of the map. 158 158 virtual ~ArrayMap() { 159 159 if (attached()) { … … 171 171 public: 172 172 173 // /\brief The subscript operator.174 // /175 // /The subscript operator. The map can be subscripted by the176 // /actual keys of the graph.173 // \brief The subscript operator. 174 // 175 // The subscript operator. The map can be subscripted by the 176 // actual keys of the graph. 177 177 Value& operator[](const Key& key) { 178 178 int id = Parent::notifier()->id(key); … … 180 180 } 181 181 182 // /\brief The const subscript operator.183 // /184 // /The const subscript operator. The map can be subscripted by the185 // /actual keys of the graph.182 // \brief The const subscript operator. 183 // 184 // The const subscript operator. The map can be subscripted by the 185 // actual keys of the graph. 186 186 const Value& operator[](const Key& key) const { 187 187 int id = Parent::notifier()->id(key); … … 189 189 } 190 190 191 // /\brief Setter function of the map.192 // /193 // /Setter function of the map. Equivalent with map[key] = val.194 // /This is a compatibility feature with the not dereferable maps.191 // \brief Setter function of the map. 192 // 193 // Setter function of the map. Equivalent with map[key] = val. 194 // This is a compatibility feature with the not dereferable maps. 195 195 void set(const Key& key, const Value& val) { 196 196 (*this)[key] = val; … … 199 199 protected: 200 200 201 // /\brief Adds a new key to the map.202 // /203 // /It adds a new key to the map. It called by the observer notifier204 // /and it overrides the add() member function of the observer base.201 // \brief Adds a new key to the map. 202 // 203 // It adds a new key to the map. It called by the observer notifier 204 // and it overrides the add() member function of the observer base. 205 205 virtual void add(const Key& key) { 206 206 Notifier* nf = Parent::notifier(); … … 227 227 } 228 228 229 // /\brief Adds more new keys to the map.230 // /231 // /It adds more new keys to the map. It called by the observer notifier232 // /and it overrides the add() member function of the observer base.229 // \brief Adds more new keys to the map. 230 // 231 // It adds more new keys to the map. It called by the observer notifier 232 // and it overrides the add() member function of the observer base. 233 233 virtual void add(const std::vector<Key>& keys) { 234 234 Notifier* nf = Parent::notifier(); … … 271 271 } 272 272 273 // /\brief Erase a key from the map.274 // /275 // /Erase a key from the map. It called by the observer notifier276 // /and it overrides the erase() member function of the observer base.273 // \brief Erase a key from the map. 274 // 275 // Erase a key from the map. It called by the observer notifier 276 // and it overrides the erase() member function of the observer base. 277 277 virtual void erase(const Key& key) { 278 278 int id = Parent::notifier()->id(key); … … 280 280 } 281 281 282 // /\brief Erase more keys from the map.283 // /284 // /Erase more keys from the map. It called by the observer notifier285 // /and it overrides the erase() member function of the observer base.282 // \brief Erase more keys from the map. 283 // 284 // Erase more keys from the map. It called by the observer notifier 285 // and it overrides the erase() member function of the observer base. 286 286 virtual void erase(const std::vector<Key>& keys) { 287 287 for (int i = 0; i < int(keys.size()); ++i) { … … 291 291 } 292 292 293 // /\brief Buildes the map.294 // /295 // /It buildes the map. It called by the observer notifier296 // /and it overrides the build() member function of the observer base.293 // \brief Buildes the map. 294 // 295 // It buildes the map. It called by the observer notifier 296 // and it overrides the build() member function of the observer base. 297 297 virtual void build() { 298 298 Notifier* nf = Parent::notifier(); … … 305 305 } 306 306 307 // /\brief Clear the map.308 // /309 // /It erase all items from the map. It called by the observer notifier310 // /and it overrides the clear() member function of the observer base.307 // \brief Clear the map. 308 // 309 // It erase all items from the map. It called by the observer notifier 310 // and it overrides the clear() member function of the observer base. 311 311 virtual void clear() { 312 312 Notifier* nf = Parent::notifier(); -
lemon/bits/base_extender.h
r289 r314 29 29 #include <lemon/concepts/maps.h> 30 30 31 // /\ingroup digraphbits32 // /\file33 // /\brief Extenders for the digraph types31 //\ingroup digraphbits 32 //\file 33 //\brief Extenders for the digraph types 34 34 namespace lemon { 35 35 36 // /\ingroup digraphbits37 // /38 // /\brief BaseDigraph to BaseGraph extender36 // \ingroup digraphbits 37 // 38 // \brief BaseDigraph to BaseGraph extender 39 39 template <typename Base> 40 40 class UndirDigraphExtender : public Base { … … 75 75 }; 76 76 77 // /First node of the edge77 // First node of the edge 78 78 Node u(const Edge &e) const { 79 79 return Parent::source(e); 80 80 } 81 81 82 // /Source of the given arc82 // Source of the given arc 83 83 Node source(const Arc &e) const { 84 84 return e.forward ? Parent::source(e) : Parent::target(e); 85 85 } 86 86 87 // /Second node of the edge87 // Second node of the edge 88 88 Node v(const Edge &e) const { 89 89 return Parent::target(e); 90 90 } 91 91 92 // /Target of the given arc92 // Target of the given arc 93 93 Node target(const Arc &e) const { 94 94 return e.forward ? Parent::target(e) : Parent::source(e); 95 95 } 96 96 97 // /\brief Directed arc from an edge.98 // /99 // /Returns a directed arc corresponding to the specified edge.100 // /If the given bool is true, the first node of the given edge and101 // /the source node of the returned arc are the same.97 // \brief Directed arc from an edge. 98 // 99 // Returns a directed arc corresponding to the specified edge. 100 // If the given bool is true, the first node of the given edge and 101 // the source node of the returned arc are the same. 102 102 static Arc direct(const Edge &e, bool d) { 103 103 return Arc(e, d); 104 104 } 105 105 106 // /Returns whether the given directed arc has the same orientation107 // /as the corresponding edge.106 // Returns whether the given directed arc has the same orientation 107 // as the corresponding edge. 108 108 static bool direction(const Arc &a) { return a.forward; } 109 109 -
lemon/bits/bezier.h
r209 r314 20 20 #define LEMON_BEZIER_H 21 21 22 // /\ingroup misc23 // /\file24 // /\brief Classes to compute with Bezier curves.25 // /26 // /Up to now this file is used internally by \ref graph_to_eps.h22 //\ingroup misc 23 //\file 24 //\brief Classes to compute with Bezier curves. 25 // 26 //Up to now this file is used internally by \ref graph_to_eps.h 27 27 28 28 #include<lemon/dim2.h> -
lemon/bits/default_map.h
r209 r314 20 20 #define LEMON_BITS_DEFAULT_MAP_H 21 21 22 23 22 #include <lemon/bits/array_map.h> 24 23 #include <lemon/bits/vector_map.h> 25 24 //#include <lemon/bits/debug_map.h> 26 25 27 // /\ingroup graphbits28 // /\file29 // /\brief Graph maps that construct and destruct their elements dynamically.26 //\ingroup graphbits 27 //\file 28 //\brief Graph maps that construct and destruct their elements dynamically. 30 29 31 30 namespace lemon { … … 150 149 // #endif 151 150 152 // / \e151 // DefaultMap class 153 152 template <typename _Graph, typename _Item, typename _Value> 154 153 class DefaultMap -
lemon/bits/enable_if.h
r220 r314 36 36 #define LEMON_BITS_ENABLE_IF_H 37 37 38 // /\file39 // /\brief Miscellaneous basic utilities38 //\file 39 //\brief Miscellaneous basic utilities 40 40 41 41 namespace lemon 42 42 { 43 43 44 // /Basic type for defining "tags". A "YES" condition for \c enable_if.44 // Basic type for defining "tags". A "YES" condition for \c enable_if. 45 45 46 // /Basic type for defining "tags". A "YES" condition for \c enable_if.47 // /48 // /\sa False46 // Basic type for defining "tags". A "YES" condition for \c enable_if. 47 // 48 //\sa False 49 49 struct True { 50 // /\e50 //\e 51 51 static const bool value = true; 52 52 }; 53 53 54 // /Basic type for defining "tags". A "NO" condition for \c enable_if.54 // Basic type for defining "tags". A "NO" condition for \c enable_if. 55 55 56 // /Basic type for defining "tags". A "NO" condition for \c enable_if.57 // /58 // /\sa True56 // Basic type for defining "tags". A "NO" condition for \c enable_if. 57 // 58 //\sa True 59 59 struct False { 60 // /\e60 //\e 61 61 static const bool value = false; 62 62 }; -
lemon/bits/graph_extender.h
r263 r314 28 28 #include <lemon/concepts/maps.h> 29 29 30 // /\ingroup graphbits31 // /\file32 // /\brief Extenders for the digraph types30 //\ingroup graphbits 31 //\file 32 //\brief Extenders for the digraph types 33 33 namespace lemon { 34 34 35 // /\ingroup graphbits36 // /37 // /\brief Extender for the Digraphs35 // \ingroup graphbits 36 // 37 // \brief Extender for the Digraphs 38 38 template <typename Base> 39 39 class DigraphExtender : public Base { … … 187 187 }; 188 188 189 // /\brief Base node of the iterator190 // /191 // /Returns the base node (i.e. the source in this case) of the iterator189 // \brief Base node of the iterator 190 // 191 // Returns the base node (i.e. the source in this case) of the iterator 192 192 Node baseNode(const OutArcIt &arc) const { 193 193 return Parent::source(arc); 194 194 } 195 // /\brief Running node of the iterator196 // /197 // /Returns the running node (i.e. the target in this case) of the198 // /iterator195 // \brief Running node of the iterator 196 // 197 // Returns the running node (i.e. the target in this case) of the 198 // iterator 199 199 Node runningNode(const OutArcIt &arc) const { 200 200 return Parent::target(arc); 201 201 } 202 202 203 // /\brief Base node of the iterator204 // /205 // /Returns the base node (i.e. the target in this case) of the iterator203 // \brief Base node of the iterator 204 // 205 // Returns the base node (i.e. the target in this case) of the iterator 206 206 Node baseNode(const InArcIt &arc) const { 207 207 return Parent::target(arc); 208 208 } 209 // /\brief Running node of the iterator210 // /211 // /Returns the running node (i.e. the source in this case) of the212 // /iterator209 // \brief Running node of the iterator 210 // 211 // Returns the running node (i.e. the source in this case) of the 212 // iterator 213 213 Node runningNode(const InArcIt &arc) const { 214 214 return Parent::source(arc); … … 326 326 }; 327 327 328 // /\ingroup _graphbits329 // /330 // /\brief Extender for the Graphs328 // \ingroup _graphbits 329 // 330 // \brief Extender for the Graphs 331 331 template <typename Base> 332 332 class GraphExtender : public Base { … … 556 556 }; 557 557 558 // /\brief Base node of the iterator559 // /560 // /Returns the base node (ie. the source in this case) of the iterator558 // \brief Base node of the iterator 559 // 560 // Returns the base node (ie. the source in this case) of the iterator 561 561 Node baseNode(const OutArcIt &arc) const { 562 562 return Parent::source(static_cast<const Arc&>(arc)); 563 563 } 564 // /\brief Running node of the iterator565 // /566 // /Returns the running node (ie. the target in this case) of the567 // /iterator564 // \brief Running node of the iterator 565 // 566 // Returns the running node (ie. the target in this case) of the 567 // iterator 568 568 Node runningNode(const OutArcIt &arc) const { 569 569 return Parent::target(static_cast<const Arc&>(arc)); 570 570 } 571 571 572 // /\brief Base node of the iterator573 // /574 // /Returns the base node (ie. the target in this case) of the iterator572 // \brief Base node of the iterator 573 // 574 // Returns the base node (ie. the target in this case) of the iterator 575 575 Node baseNode(const InArcIt &arc) const { 576 576 return Parent::target(static_cast<const Arc&>(arc)); 577 577 } 578 // /\brief Running node of the iterator579 // /580 // /Returns the running node (ie. the source in this case) of the581 // /iterator578 // \brief Running node of the iterator 579 // 580 // Returns the running node (ie. the source in this case) of the 581 // iterator 582 582 Node runningNode(const InArcIt &arc) const { 583 583 return Parent::source(static_cast<const Arc&>(arc)); 584 584 } 585 585 586 // /Base node of the iterator587 // /588 // /Returns the base node of the iterator586 // Base node of the iterator 587 // 588 // Returns the base node of the iterator 589 589 Node baseNode(const IncEdgeIt &edge) const { 590 590 return edge._direction ? u(edge) : v(edge); 591 591 } 592 // /Running node of the iterator593 // /594 // /Returns the running node of the iterator592 // Running node of the iterator 593 // 594 // Returns the running node of the iterator 595 595 Node runningNode(const IncEdgeIt &edge) const { 596 596 return edge._direction ? v(edge) : u(edge); -
lemon/bits/map_extender.h
r263 r314 27 27 #include <lemon/concepts/maps.h> 28 28 29 // /\file30 // /\brief Extenders for iterable maps.29 //\file 30 //\brief Extenders for iterable maps. 31 31 32 32 namespace lemon { 33 33 34 // /\ingroup graphbits35 // /36 // /\brief Extender for maps34 // \ingroup graphbits 35 // 36 // \brief Extender for maps 37 37 template <typename _Map> 38 38 class MapExtender : public _Map { … … 172 172 }; 173 173 174 // /\ingroup graphbits175 // /176 // /\brief Extender for maps which use a subset of the items.174 // \ingroup graphbits 175 // 176 // \brief Extender for maps which use a subset of the items. 177 177 template <typename _Graph, typename _Map> 178 178 class SubMapExtender : public _Map { -
lemon/bits/traits.h
r220 r314 20 20 #define LEMON_BITS_TRAITS_H 21 21 22 // /\file23 // /\brief Traits for graphs and maps24 // /22 //\file 23 //\brief Traits for graphs and maps 24 // 25 25 26 26 #include <lemon/bits/enable_if.h> -
lemon/bits/vector_map.h
r280 r314 29 29 #include <lemon/concepts/maps.h> 30 30 31 // /\ingroup graphbits32 // /33 // /\file34 // /\brief Vector based graph maps.31 //\ingroup graphbits 32 // 33 //\file 34 //\brief Vector based graph maps. 35 35 namespace lemon { 36 36 37 // /\ingroup graphbits38 // /39 // /\brief Graph map based on the std::vector storage.40 // /41 // /The VectorMap template class is graph map structure what42 // /automatically updates the map when a key is added to or erased from43 // /the map. This map type uses the std::vector to store the values.44 // /45 // /\tparam _Graph The graph this map is attached to.46 // /\tparam _Item The item type of the graph items.47 // /\tparam _Value The value type of the map.37 // \ingroup graphbits 38 // 39 // \brief Graph map based on the std::vector storage. 40 // 41 // The VectorMap template class is graph map structure what 42 // automatically updates the map when a key is added to or erased from 43 // the map. This map type uses the std::vector to store the values. 44 // 45 // \tparam _Graph The graph this map is attached to. 46 // \tparam _Item The item type of the graph items. 47 // \tparam _Value The value type of the map. 48 48 template <typename _Graph, typename _Item, typename _Value> 49 49 class VectorMap … … 51 51 private: 52 52 53 // /The container type of the map.53 // The container type of the map. 54 54 typedef std::vector<_Value> Container; 55 55 56 56 public: 57 57 58 // /The graph type of the map.58 // The graph type of the map. 59 59 typedef _Graph Graph; 60 // /The item type of the map.60 // The item type of the map. 61 61 typedef _Item Item; 62 // /The reference map tag.62 // The reference map tag. 63 63 typedef True ReferenceMapTag; 64 64 65 // /The key type of the map.65 // The key type of the map. 66 66 typedef _Item Key; 67 // /The value type of the map.67 // The value type of the map. 68 68 typedef _Value Value; 69 69 70 // /The notifier type.70 // The notifier type. 71 71 typedef typename ItemSetTraits<_Graph, _Item>::ItemNotifier Notifier; 72 72 73 // /The map type.73 // The map type. 74 74 typedef VectorMap Map; 75 // /The base class of the map.75 // The base class of the map. 76 76 typedef typename Notifier::ObserverBase Parent; 77 77 78 // /The reference type of the map;78 // The reference type of the map; 79 79 typedef typename Container::reference Reference; 80 // /The const reference type of the map;80 // The const reference type of the map; 81 81 typedef typename Container::const_reference ConstReference; 82 82 83 83 84 // /\brief Constructor to attach the new map into the notifier.85 // /86 // /It constructs a map and attachs it into the notifier.87 // /It adds all the items of the graph to the map.84 // \brief Constructor to attach the new map into the notifier. 85 // 86 // It constructs a map and attachs it into the notifier. 87 // It adds all the items of the graph to the map. 88 88 VectorMap(const Graph& graph) { 89 89 Parent::attach(graph.notifier(Item())); … … 91 91 } 92 92 93 // /\brief Constructor uses given value to initialize the map.94 // /95 // /It constructs a map uses a given value to initialize the map.96 // /It adds all the items of the graph to the map.93 // \brief Constructor uses given value to initialize the map. 94 // 95 // It constructs a map uses a given value to initialize the map. 96 // It adds all the items of the graph to the map. 97 97 VectorMap(const Graph& graph, const Value& value) { 98 98 Parent::attach(graph.notifier(Item())); … … 101 101 102 102 private: 103 // /\brief Copy constructor104 // /105 // /Copy constructor.103 // \brief Copy constructor 104 // 105 // Copy constructor. 106 106 VectorMap(const VectorMap& _copy) : Parent() { 107 107 if (_copy.attached()) { … … 111 111 } 112 112 113 // /\brief Assign operator.114 // /115 // /This operator assigns for each item in the map the116 // /value mapped to the same item in the copied map.117 // /The parameter map should be indiced with the same118 // /itemset because this assign operator does not change119 // /the container of the map.113 // \brief Assign operator. 114 // 115 // This operator assigns for each item in the map the 116 // value mapped to the same item in the copied map. 117 // The parameter map should be indiced with the same 118 // itemset because this assign operator does not change 119 // the container of the map. 120 120 VectorMap& operator=(const VectorMap& cmap) { 121 121 return operator=<VectorMap>(cmap); … … 123 123 124 124 125 // /\brief Template assign operator.126 // /127 // /The given parameter should be conform to the ReadMap128 // /concecpt and could be indiced by the current item set of129 // /the NodeMap. In this case the value for each item130 // /is assigned by the value of the given ReadMap.125 // \brief Template assign operator. 126 // 127 // The given parameter should be conform to the ReadMap 128 // concecpt and could be indiced by the current item set of 129 // the NodeMap. In this case the value for each item 130 // is assigned by the value of the given ReadMap. 131 131 template <typename CMap> 132 132 VectorMap& operator=(const CMap& cmap) { … … 142 142 public: 143 143 144 // /\brief The subcript operator.145 // /146 // /The subscript operator. The map can be subscripted by the147 // /actual items of the graph.144 // \brief The subcript operator. 145 // 146 // The subscript operator. The map can be subscripted by the 147 // actual items of the graph. 148 148 Reference operator[](const Key& key) { 149 149 return container[Parent::notifier()->id(key)]; 150 150 } 151 151 152 // /\brief The const subcript operator.153 // /154 // /The const subscript operator. The map can be subscripted by the155 // /actual items of the graph.152 // \brief The const subcript operator. 153 // 154 // The const subscript operator. The map can be subscripted by the 155 // actual items of the graph. 156 156 ConstReference operator[](const Key& key) const { 157 157 return container[Parent::notifier()->id(key)]; … … 159 159 160 160 161 // /\brief The setter function of the map.162 // /163 // /It the same as operator[](key) = value expression.161 // \brief The setter function of the map. 162 // 163 // It the same as operator[](key) = value expression. 164 164 void set(const Key& key, const Value& value) { 165 165 (*this)[key] = value; … … 168 168 protected: 169 169 170 // /\brief Adds a new key to the map.171 // /172 // /It adds a new key to the map. It called by the observer notifier173 // /and it overrides the add() member function of the observer base.170 // \brief Adds a new key to the map. 171 // 172 // It adds a new key to the map. It called by the observer notifier 173 // and it overrides the add() member function of the observer base. 174 174 virtual void add(const Key& key) { 175 175 int id = Parent::notifier()->id(key); … … 179 179 } 180 180 181 // /\brief Adds more new keys to the map.182 // /183 // /It adds more new keys to the map. It called by the observer notifier184 // /and it overrides the add() member function of the observer base.181 // \brief Adds more new keys to the map. 182 // 183 // It adds more new keys to the map. It called by the observer notifier 184 // and it overrides the add() member function of the observer base. 185 185 virtual void add(const std::vector<Key>& keys) { 186 186 int max = container.size() - 1; … … 194 194 } 195 195 196 // /\brief Erase a key from the map.197 // /198 // /Erase a key from the map. It called by the observer notifier199 // /and it overrides the erase() member function of the observer base.196 // \brief Erase a key from the map. 197 // 198 // Erase a key from the map. It called by the observer notifier 199 // and it overrides the erase() member function of the observer base. 200 200 virtual void erase(const Key& key) { 201 201 container[Parent::notifier()->id(key)] = Value(); 202 202 } 203 203 204 // /\brief Erase more keys from the map.205 // /206 // /Erase more keys from the map. It called by the observer notifier207 // /and it overrides the erase() member function of the observer base.204 // \brief Erase more keys from the map. 205 // 206 // Erase more keys from the map. It called by the observer notifier 207 // and it overrides the erase() member function of the observer base. 208 208 virtual void erase(const std::vector<Key>& keys) { 209 209 for (int i = 0; i < int(keys.size()); ++i) { … … 212 212 } 213 213 214 // /\brief Buildes the map.215 // /216 // /It buildes the map. It called by the observer notifier217 // /and it overrides the build() member function of the observer base.214 // \brief Buildes the map. 215 // 216 // It buildes the map. It called by the observer notifier 217 // and it overrides the build() member function of the observer base. 218 218 virtual void build() { 219 219 int size = Parent::notifier()->maxId() + 1; … … 222 222 } 223 223 224 // /\brief Clear the map.225 // /226 // /It erase all items from the map. It called by the observer notifier227 // /and it overrides the clear() member function of the observer base.224 // \brief Clear the map. 225 // 226 // It erase all items from the map. It called by the observer notifier 227 // and it overrides the clear() member function of the observer base. 228 228 virtual void clear() { 229 229 container.clear(); -
lemon/color.h
r209 r313 93 93 extern const Color DARK_CYAN; 94 94 95 ///Map <tt>int</tt>s to different \ref Color "Color"s95 ///Map <tt>int</tt>s to different <tt>Color</tt>s 96 96 97 97 ///This map assigns one of the predefined \ref Color "Color"s to -
lemon/concepts/graph_components.h
r263 r313 983 983 /// 984 984 /// This class describes the common interface of the graph maps 985 /// (NodeMap, ArcMap), that is \ref maps-page "maps" whichcan be used to985 /// (NodeMap, ArcMap), that is maps that can be used to 986 986 /// associate data to graph descriptors (nodes or arcs). 987 987 template <typename _Graph, typename _Item, typename _Value> -
lemon/concepts/maps.h
r220 r314 23 23 #include <lemon/concept_check.h> 24 24 25 ///\ingroup concept25 ///\ingroup map_concepts 26 26 ///\file 27 27 ///\brief The concept of maps. … … 31 31 namespace concepts { 32 32 33 /// \addtogroup concept33 /// \addtogroup map_concepts 34 34 /// @{ 35 35 -
lemon/core.h
r282 r313 59 59 /// @{ 60 60 61 ///Create convenien ttypedefs for the digraph types and iterators61 ///Create convenience typedefs for the digraph types and iterators 62 62 63 63 ///This \c \#define creates convenient type definitions for the following … … 81 81 typedef Digraph::ArcMap<bool> BoolArcMap; \ 82 82 typedef Digraph::ArcMap<int> IntArcMap; \ 83 typedef Digraph::ArcMap<double> DoubleArcMap ;84 85 ///Create convenien ttypedefs for the digraph types and iterators83 typedef Digraph::ArcMap<double> DoubleArcMap 84 85 ///Create convenience typedefs for the digraph types and iterators 86 86 87 87 ///\see DIGRAPH_TYPEDEFS … … 101 101 typedef typename Digraph::template ArcMap<bool> BoolArcMap; \ 102 102 typedef typename Digraph::template ArcMap<int> IntArcMap; \ 103 typedef typename Digraph::template ArcMap<double> DoubleArcMap ;104 105 ///Create convenien ttypedefs for the graph types and iterators103 typedef typename Digraph::template ArcMap<double> DoubleArcMap 104 105 ///Create convenience typedefs for the graph types and iterators 106 106 107 107 ///This \c \#define creates the same convenient type definitions as defined … … 120 120 typedef Graph::EdgeMap<bool> BoolEdgeMap; \ 121 121 typedef Graph::EdgeMap<int> IntEdgeMap; \ 122 typedef Graph::EdgeMap<double> DoubleEdgeMap ;123 124 ///Create convenien ttypedefs for the graph types and iterators122 typedef Graph::EdgeMap<double> DoubleEdgeMap 123 124 ///Create convenience typedefs for the graph types and iterators 125 125 126 126 ///\see GRAPH_TYPEDEFS … … 135 135 typedef typename Graph::template EdgeMap<bool> BoolEdgeMap; \ 136 136 typedef typename Graph::template EdgeMap<int> IntEdgeMap; \ 137 typedef typename Graph::template EdgeMap<double> DoubleEdgeMap ;137 typedef typename Graph::template EdgeMap<double> DoubleEdgeMap 138 138 139 139 /// \brief Function to count the items in a graph. … … 1555 1555 ///structure is updated after each graph alteration. Thus although 1556 1556 ///this data structure is theoretically faster than \ref ArcLookUp 1557 ///and \ref AllArcLook up, it often provides worse performance than1557 ///and \ref AllArcLookUp, it often provides worse performance than 1558 1558 ///them. 1559 1559 Arc operator()(Node s, Node t, Arc p = INVALID) const { … … 1700 1700 ///Find an arc between two nodes. 1701 1701 1702 ///Find an arc between two nodes in time <em>O</em>(log<em>d</em>), where1703 /// <em>d</em> is the number of outgoing arcs of \c s.1702 ///Find an arc between two nodes in time <em>O</em>(log<em>d</em>), 1703 ///where <em>d</em> is the number of outgoing arcs of \c s. 1704 1704 ///\param s The source node. 1705 1705 ///\param t The target node. … … 1818 1818 ///\endcode 1819 1819 /// 1820 ///Finding the first arc take <em>O</em>(log<em>d</em>) time, where1821 /// <em>d</em> is the number of outgoing arcs of \c s. Then,the1820 ///Finding the first arc take <em>O</em>(log<em>d</em>) time, 1821 ///where <em>d</em> is the number of outgoing arcs of \c s. Then the 1822 1822 ///consecutive arcs are found in constant time. 1823 1823 /// -
lemon/dfs.h
r292 r313 51 51 ///It must meet the \ref concepts::WriteMap "WriteMap" concept. 52 52 typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap; 53 ///Instantiates a \refPredMap.54 55 ///This function instantiates a \refPredMap.53 ///Instantiates a PredMap. 54 55 ///This function instantiates a PredMap. 56 56 ///\param g is the digraph, to which we would like to define the 57 /// \refPredMap.57 ///PredMap. 58 58 static PredMap *createPredMap(const Digraph &g) 59 59 { … … 66 66 ///It must meet the \ref concepts::WriteMap "WriteMap" concept. 67 67 typedef NullMap<typename Digraph::Node,bool> ProcessedMap; 68 ///Instantiates a \refProcessedMap.69 70 ///This function instantiates a \refProcessedMap.68 ///Instantiates a ProcessedMap. 69 70 ///This function instantiates a ProcessedMap. 71 71 ///\param g is the digraph, to which 72 ///we would like to define the \refProcessedMap72 ///we would like to define the ProcessedMap 73 73 #ifdef DOXYGEN 74 74 static ProcessedMap *createProcessedMap(const Digraph &g) … … 85 85 ///It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept. 86 86 typedef typename Digraph::template NodeMap<bool> ReachedMap; 87 ///Instantiates a \refReachedMap.88 89 ///This function instantiates a \refReachedMap.87 ///Instantiates a ReachedMap. 88 89 ///This function instantiates a ReachedMap. 90 90 ///\param g is the digraph, to which 91 ///we would like to define the \refReachedMap.91 ///we would like to define the ReachedMap. 92 92 static ReachedMap *createReachedMap(const Digraph &g) 93 93 { … … 100 100 ///It must meet the \ref concepts::WriteMap "WriteMap" concept. 101 101 typedef typename Digraph::template NodeMap<int> DistMap; 102 ///Instantiates a \refDistMap.103 104 ///This function instantiates a \refDistMap.102 ///Instantiates a DistMap. 103 104 ///This function instantiates a DistMap. 105 105 ///\param g is the digraph, to which we would like to define the 106 /// \refDistMap.106 ///DistMap. 107 107 static DistMap *createDistMap(const Digraph &g) 108 108 { … … 228 228 }; 229 229 ///\brief \ref named-templ-param "Named parameter" for setting 230 /// \refPredMap type.230 ///PredMap type. 231 231 /// 232 232 ///\ref named-templ-param "Named parameter" for setting 233 /// \refPredMap type.233 ///PredMap type. 234 234 template <class T> 235 235 struct SetPredMap : public Dfs<Digraph, SetPredMapTraits<T> > { … … 247 247 }; 248 248 ///\brief \ref named-templ-param "Named parameter" for setting 249 /// \refDistMap type.249 ///DistMap type. 250 250 /// 251 251 ///\ref named-templ-param "Named parameter" for setting 252 /// \refDistMap type.252 ///DistMap type. 253 253 template <class T> 254 254 struct SetDistMap : public Dfs< Digraph, SetDistMapTraits<T> > { … … 266 266 }; 267 267 ///\brief \ref named-templ-param "Named parameter" for setting 268 /// \refReachedMap type.268 ///ReachedMap type. 269 269 /// 270 270 ///\ref named-templ-param "Named parameter" for setting 271 /// \refReachedMap type.271 ///ReachedMap type. 272 272 template <class T> 273 273 struct SetReachedMap : public Dfs< Digraph, SetReachedMapTraits<T> > { … … 285 285 }; 286 286 ///\brief \ref named-templ-param "Named parameter" for setting 287 /// \refProcessedMap type.287 ///ProcessedMap type. 288 288 /// 289 289 ///\ref named-templ-param "Named parameter" for setting 290 /// \refProcessedMap type.290 ///ProcessedMap type. 291 291 template <class T> 292 292 struct SetProcessedMap : public Dfs< Digraph, SetProcessedMapTraits<T> > { … … 302 302 }; 303 303 ///\brief \ref named-templ-param "Named parameter" for setting 304 /// \refProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>.304 ///ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>. 305 305 /// 306 306 ///\ref named-templ-param "Named parameter" for setting 307 /// \refProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>.307 ///ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>. 308 308 ///If you don't set it explicitly, it will be automatically allocated. 309 309 struct SetStandardProcessedMap : … … 769 769 ///It must meet the \ref concepts::WriteMap "WriteMap" concept. 770 770 typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap; 771 ///Instantiates a \refPredMap.772 773 ///This function instantiates a \refPredMap.771 ///Instantiates a PredMap. 772 773 ///This function instantiates a PredMap. 774 774 ///\param g is the digraph, to which we would like to define the 775 /// \refPredMap.775 ///PredMap. 776 776 static PredMap *createPredMap(const Digraph &g) 777 777 { … … 785 785 ///By default it is a NullMap. 786 786 typedef NullMap<typename Digraph::Node,bool> ProcessedMap; 787 ///Instantiates a \refProcessedMap.788 789 ///This function instantiates a \refProcessedMap.787 ///Instantiates a ProcessedMap. 788 789 ///This function instantiates a ProcessedMap. 790 790 ///\param g is the digraph, to which 791 ///we would like to define the \refProcessedMap.791 ///we would like to define the ProcessedMap. 792 792 #ifdef DOXYGEN 793 793 static ProcessedMap *createProcessedMap(const Digraph &g) … … 804 804 ///It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept. 805 805 typedef typename Digraph::template NodeMap<bool> ReachedMap; 806 ///Instantiates a \refReachedMap.807 808 ///This function instantiates a \refReachedMap.806 ///Instantiates a ReachedMap. 807 808 ///This function instantiates a ReachedMap. 809 809 ///\param g is the digraph, to which 810 ///we would like to define the \refReachedMap.810 ///we would like to define the ReachedMap. 811 811 static ReachedMap *createReachedMap(const Digraph &g) 812 812 { … … 819 819 ///It must meet the \ref concepts::WriteMap "WriteMap" concept. 820 820 typedef typename Digraph::template NodeMap<int> DistMap; 821 ///Instantiates a \refDistMap.822 823 ///This function instantiates a \refDistMap.821 ///Instantiates a DistMap. 822 823 ///This function instantiates a DistMap. 824 824 ///\param g is the digraph, to which we would like to define 825 ///the \refDistMap825 ///the DistMap 826 826 static DistMap *createDistMap(const Digraph &g) 827 827 { … … 836 836 }; 837 837 838 /// Default traits class used by \refDfsWizard838 /// Default traits class used by DfsWizard 839 839 840 840 /// To make it easier to use Dfs algorithm … … 1002 1002 }; 1003 1003 ///\brief \ref named-func-param "Named parameter" 1004 ///for setting \refPredMap object.1004 ///for setting PredMap object. 1005 1005 /// 1006 1006 ///\ref named-func-param "Named parameter" 1007 ///for setting \refPredMap object.1007 ///for setting PredMap object. 1008 1008 template<class T> 1009 1009 DfsWizard<SetPredMapBase<T> > predMap(const T &t) … … 1020 1020 }; 1021 1021 ///\brief \ref named-func-param "Named parameter" 1022 ///for setting \refReachedMap object.1022 ///for setting ReachedMap object. 1023 1023 /// 1024 1024 /// \ref named-func-param "Named parameter" 1025 ///for setting \refReachedMap object.1025 ///for setting ReachedMap object. 1026 1026 template<class T> 1027 1027 DfsWizard<SetReachedMapBase<T> > reachedMap(const T &t) … … 1038 1038 }; 1039 1039 ///\brief \ref named-func-param "Named parameter" 1040 ///for setting \refDistMap object.1040 ///for setting DistMap object. 1041 1041 /// 1042 1042 /// \ref named-func-param "Named parameter" 1043 ///for setting \refDistMap object.1043 ///for setting DistMap object. 1044 1044 template<class T> 1045 1045 DfsWizard<SetDistMapBase<T> > distMap(const T &t) … … 1056 1056 }; 1057 1057 ///\brief \ref named-func-param "Named parameter" 1058 ///for setting \refProcessedMap object.1058 ///for setting ProcessedMap object. 1059 1059 /// 1060 1060 /// \ref named-func-param "Named parameter" 1061 ///for setting \refProcessedMap object.1061 ///for setting ProcessedMap object. 1062 1062 template<class T> 1063 1063 DfsWizard<SetProcessedMapBase<T> > processedMap(const T &t) … … 1214 1214 typedef typename Digraph::template NodeMap<bool> ReachedMap; 1215 1215 1216 /// \brief Instantiates a \refReachedMap.1217 /// 1218 /// This function instantiates a \refReachedMap.1216 /// \brief Instantiates a ReachedMap. 1217 /// 1218 /// This function instantiates a ReachedMap. 1219 1219 /// \param digraph is the digraph, to which 1220 /// we would like to define the \refReachedMap.1220 /// we would like to define the ReachedMap. 1221 1221 static ReachedMap *createReachedMap(const Digraph &digraph) { 1222 1222 return new ReachedMap(digraph); -
lemon/dijkstra.h
r290 r313 140 140 ///It must meet the \ref concepts::WriteMap "WriteMap" concept. 141 141 typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap; 142 ///Instantiates a \refPredMap.143 144 ///This function instantiates a \refPredMap.142 ///Instantiates a PredMap. 143 144 ///This function instantiates a PredMap. 145 145 ///\param g is the digraph, to which we would like to define the 146 /// \refPredMap.146 ///PredMap. 147 147 static PredMap *createPredMap(const Digraph &g) 148 148 { … … 156 156 ///By default it is a NullMap. 157 157 typedef NullMap<typename Digraph::Node,bool> ProcessedMap; 158 ///Instantiates a \refProcessedMap.159 160 ///This function instantiates a \refProcessedMap.158 ///Instantiates a ProcessedMap. 159 160 ///This function instantiates a ProcessedMap. 161 161 ///\param g is the digraph, to which 162 ///we would like to define the \refProcessedMap162 ///we would like to define the ProcessedMap 163 163 #ifdef DOXYGEN 164 164 static ProcessedMap *createProcessedMap(const Digraph &g) … … 175 175 ///It must meet the \ref concepts::WriteMap "WriteMap" concept. 176 176 typedef typename Digraph::template NodeMap<typename LM::Value> DistMap; 177 ///Instantiates a \refDistMap.178 179 ///This function instantiates a \refDistMap.177 ///Instantiates a DistMap. 178 179 ///This function instantiates a DistMap. 180 180 ///\param g is the digraph, to which we would like to define 181 ///the \refDistMap181 ///the DistMap 182 182 static DistMap *createDistMap(const Digraph &g) 183 183 { … … 328 328 }; 329 329 ///\brief \ref named-templ-param "Named parameter" for setting 330 /// \refPredMap type.330 ///PredMap type. 331 331 /// 332 332 ///\ref named-templ-param "Named parameter" for setting 333 /// \refPredMap type.333 ///PredMap type. 334 334 template <class T> 335 335 struct SetPredMap … … 348 348 }; 349 349 ///\brief \ref named-templ-param "Named parameter" for setting 350 /// \refDistMap type.350 ///DistMap type. 351 351 /// 352 352 ///\ref named-templ-param "Named parameter" for setting 353 /// \refDistMap type.353 ///DistMap type. 354 354 template <class T> 355 355 struct SetDistMap … … 368 368 }; 369 369 ///\brief \ref named-templ-param "Named parameter" for setting 370 /// \refProcessedMap type.370 ///ProcessedMap type. 371 371 /// 372 372 ///\ref named-templ-param "Named parameter" for setting 373 /// \refProcessedMap type.373 ///ProcessedMap type. 374 374 template <class T> 375 375 struct SetProcessedMap … … 386 386 }; 387 387 ///\brief \ref named-templ-param "Named parameter" for setting 388 /// \refProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>.388 ///ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>. 389 389 /// 390 390 ///\ref named-templ-param "Named parameter" for setting 391 /// \refProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>.391 ///ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>. 392 392 ///If you don't set it explicitly, it will be automatically allocated. 393 393 struct SetStandardProcessedMap … … 454 454 455 455 /// \brief \ref named-templ-param "Named parameter" for setting 456 ///\ refOperationTraits type456 ///\c OperationTraits type 457 457 /// 458 458 ///\ref named-templ-param "Named parameter" for setting … … 987 987 ///It must meet the \ref concepts::WriteMap "WriteMap" concept. 988 988 typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap; 989 ///Instantiates a \refPredMap.990 991 ///This function instantiates a \refPredMap.989 ///Instantiates a PredMap. 990 991 ///This function instantiates a PredMap. 992 992 ///\param g is the digraph, to which we would like to define the 993 /// \refPredMap.993 ///PredMap. 994 994 static PredMap *createPredMap(const Digraph &g) 995 995 { … … 1003 1003 ///By default it is a NullMap. 1004 1004 typedef NullMap<typename Digraph::Node,bool> ProcessedMap; 1005 ///Instantiates a \refProcessedMap.1006 1007 ///This function instantiates a \refProcessedMap.1005 ///Instantiates a ProcessedMap. 1006 1007 ///This function instantiates a ProcessedMap. 1008 1008 ///\param g is the digraph, to which 1009 ///we would like to define the \refProcessedMap.1009 ///we would like to define the ProcessedMap. 1010 1010 #ifdef DOXYGEN 1011 1011 static ProcessedMap *createProcessedMap(const Digraph &g) … … 1022 1022 ///It must meet the \ref concepts::WriteMap "WriteMap" concept. 1023 1023 typedef typename Digraph::template NodeMap<typename LM::Value> DistMap; 1024 ///Instantiates a \refDistMap.1025 1026 ///This function instantiates a \refDistMap.1024 ///Instantiates a DistMap. 1025 1026 ///This function instantiates a DistMap. 1027 1027 ///\param g is the digraph, to which we would like to define 1028 ///the \refDistMap1028 ///the DistMap 1029 1029 static DistMap *createDistMap(const Digraph &g) 1030 1030 { … … 1039 1039 }; 1040 1040 1041 /// Default traits class used by \refDijkstraWizard1041 /// Default traits class used by DijkstraWizard 1042 1042 1043 1043 /// To make it easier to use Dijkstra algorithm … … 1199 1199 }; 1200 1200 ///\brief \ref named-func-param "Named parameter" 1201 ///for setting \refPredMap object.1201 ///for setting PredMap object. 1202 1202 /// 1203 1203 ///\ref named-func-param "Named parameter" 1204 ///for setting \refPredMap object.1204 ///for setting PredMap object. 1205 1205 template<class T> 1206 1206 DijkstraWizard<SetPredMapBase<T> > predMap(const T &t) … … 1217 1217 }; 1218 1218 ///\brief \ref named-func-param "Named parameter" 1219 ///for setting \refDistMap object.1219 ///for setting DistMap object. 1220 1220 /// 1221 1221 ///\ref named-func-param "Named parameter" 1222 ///for setting \refDistMap object.1222 ///for setting DistMap object. 1223 1223 template<class T> 1224 1224 DijkstraWizard<SetDistMapBase<T> > distMap(const T &t) … … 1235 1235 }; 1236 1236 ///\brief \ref named-func-param "Named parameter" 1237 ///for setting \refProcessedMap object.1237 ///for setting ProcessedMap object. 1238 1238 /// 1239 1239 /// \ref named-func-param "Named parameter" 1240 ///for setting \refProcessedMap object.1240 ///for setting ProcessedMap object. 1241 1241 template<class T> 1242 1242 DijkstraWizard<SetProcessedMapBase<T> > processedMap(const T &t) -
lemon/dim2.h
r253 r314 260 260 261 261 262 /// Bounding box of plain vectors ( \ref Pointpoints).262 /// Bounding box of plain vectors (points). 263 263 264 264 /// A class to calculate or store the bounding box of plain vectors 265 /// (\ref Point points).265 /// (\ref Point "points"). 266 266 template<typename T> 267 267 class Box { … … 574 574 } 575 575 576 ///Map of x-coordinates of a \ref Point "Point"-map 577 578 ///\ingroup maps 576 ///Map of x-coordinates of a <tt>Point</tt>-map 577 579 578 ///Map of x-coordinates of a \ref Point "Point"-map. 580 579 /// … … 593 592 }; 594 593 595 ///Returns an \ref XMap class 596 597 ///This function just returns an \ref XMap class. 598 /// 599 ///\ingroup maps 594 ///Returns an XMap class 595 596 ///This function just returns an XMap class. 600 597 ///\relates XMap 601 598 template<class M> … … 611 608 } 612 609 613 ///Constant (read only) version of \ref XMap 614 615 ///\ingroup maps 616 ///Constant (read only) version of \ref XMap 610 ///Constant (read only) version of XMap 611 612 ///Constant (read only) version of XMap. 617 613 /// 618 614 template<class M> … … 629 625 }; 630 626 631 ///Returns a \ref ConstXMap class 632 633 ///This function just returns a \ref ConstXMap class. 634 /// 635 ///\ingroup maps 627 ///Returns a ConstXMap class 628 629 ///This function just returns a ConstXMap class. 636 630 ///\relates ConstXMap 637 631 template<class M> … … 641 635 } 642 636 643 ///Map of y-coordinates of a \ref Point "Point"-map 644 645 ///\ingroup maps 637 ///Map of y-coordinates of a <tt>Point</tt>-map 638 646 639 ///Map of y-coordinates of a \ref Point "Point"-map. 647 640 /// … … 660 653 }; 661 654 662 ///Returns a \ref YMap class 663 664 ///This function just returns a \ref YMap class. 665 /// 666 ///\ingroup maps 655 ///Returns a YMap class 656 657 ///This function just returns a YMap class. 667 658 ///\relates YMap 668 659 template<class M> … … 678 669 } 679 670 680 ///Constant (read only) version of \ref YMap 681 682 ///\ingroup maps 683 ///Constant (read only) version of \ref YMap 671 ///Constant (read only) version of YMap 672 673 ///Constant (read only) version of YMap. 684 674 /// 685 675 template<class M> … … 696 686 }; 697 687 698 ///Returns a \ref ConstYMap class 699 700 ///This function just returns a \ref ConstYMap class. 701 /// 702 ///\ingroup maps 688 ///Returns a ConstYMap class 689 690 ///This function just returns a ConstYMap class. 703 691 ///\relates ConstYMap 704 692 template<class M> … … 709 697 710 698 711 ///\brief Map of the \ref Point::normSquare() "normSquare()" 712 ///of a \ref Point "Point"-map 699 ///\brief Map of the normSquare() of a <tt>Point</tt>-map 713 700 /// 714 701 ///Map of the \ref Point::normSquare() "normSquare()" 715 702 ///of a \ref Point "Point"-map. 716 ///\ingroup maps717 703 template<class M> 718 704 class NormSquareMap … … 728 714 }; 729 715 730 ///Returns a \ref NormSquareMap class 731 732 ///This function just returns a \ref NormSquareMap class. 733 /// 734 ///\ingroup maps 716 ///Returns a NormSquareMap class 717 718 ///This function just returns a NormSquareMap class. 735 719 ///\relates NormSquareMap 736 720 template<class M> -
lemon/graph_to_eps.h
r291 r313 63 63 } 64 64 65 ///Default traits class of \refGraphToEps65 ///Default traits class of GraphToEps 66 66 67 67 ///Default traits class of \ref GraphToEps. -
lemon/lgf_reader.h
r295 r303 392 392 class DigraphReader; 393 393 394 /// \brief Return a \ref DigraphReader class 395 /// 396 /// This function just returns a \ref DigraphReader class. 397 /// \relates DigraphReader 394 398 template <typename Digraph> 395 399 DigraphReader<Digraph> digraphReader(Digraph& digraph, 396 std::istream& is = std::cin); 397 400 std::istream& is = std::cin) { 401 DigraphReader<Digraph> tmp(digraph, is); 402 return tmp; 403 } 404 405 /// \brief Return a \ref DigraphReader class 406 /// 407 /// This function just returns a \ref DigraphReader class. 408 /// \relates DigraphReader 398 409 template <typename Digraph> 399 DigraphReader<Digraph> digraphReader(Digraph& digraph, const std::string& fn); 400 410 DigraphReader<Digraph> digraphReader(Digraph& digraph, 411 const std::string& fn) { 412 DigraphReader<Digraph> tmp(digraph, fn); 413 return tmp; 414 } 415 416 /// \brief Return a \ref DigraphReader class 417 /// 418 /// This function just returns a \ref DigraphReader class. 419 /// \relates DigraphReader 401 420 template <typename Digraph> 402 DigraphReader<Digraph> digraphReader(Digraph& digraph, const char *fn); 421 DigraphReader<Digraph> digraphReader(Digraph& digraph, const char* fn) { 422 DigraphReader<Digraph> tmp(digraph, fn); 423 return tmp; 424 } 403 425 404 426 /// \ingroup lemon_io … … 1190 1212 }; 1191 1213 1192 /// \brief Return a \ref DigraphReader class 1214 template <typename Graph> 1215 class GraphReader; 1216 1217 /// \brief Return a \ref GraphReader class 1193 1218 /// 1194 /// This function just returns a \ref DigraphReader class. 1195 /// \relates DigraphReader 1196 template <typename Digraph> 1197 DigraphReader<Digraph> digraphReader(Digraph& digraph, 1198 std::istream& is = std::cin) { 1199 DigraphReader<Digraph> tmp(digraph, is); 1219 /// This function just returns a \ref GraphReader class. 1220 /// \relates GraphReader 1221 template <typename Graph> 1222 GraphReader<Graph> graphReader(Graph& graph, std::istream& is = std::cin) { 1223 GraphReader<Graph> tmp(graph, is); 1200 1224 return tmp; 1201 1225 } 1202 1226 1203 /// \brief Return a \ref DigraphReader class1227 /// \brief Return a \ref GraphReader class 1204 1228 /// 1205 /// This function just returns a \ref DigraphReader class. 1206 /// \relates DigraphReader 1207 template <typename Digraph> 1208 DigraphReader<Digraph> digraphReader(Digraph& digraph, 1209 const std::string& fn) { 1210 DigraphReader<Digraph> tmp(digraph, fn); 1229 /// This function just returns a \ref GraphReader class. 1230 /// \relates GraphReader 1231 template <typename Graph> 1232 GraphReader<Graph> graphReader(Graph& graph, const std::string& fn) { 1233 GraphReader<Graph> tmp(graph, fn); 1211 1234 return tmp; 1212 1235 } 1213 1236 1214 /// \brief Return a \ref DigraphReader class1237 /// \brief Return a \ref GraphReader class 1215 1238 /// 1216 /// This function just returns a \ref DigraphReader class.1217 /// \relates DigraphReader1218 template <typename Digraph>1219 DigraphReader<Digraph> digraphReader(Digraph& digraph, const char* fn) {1220 DigraphReader<Digraph> tmp(digraph, fn);1239 /// This function just returns a \ref GraphReader class. 1240 /// \relates GraphReader 1241 template <typename Graph> 1242 GraphReader<Graph> graphReader(Graph& graph, const char* fn) { 1243 GraphReader<Graph> tmp(graph, fn); 1221 1244 return tmp; 1222 1245 } 1223 1224 template <typename Graph>1225 class GraphReader;1226 1227 template <typename Graph>1228 GraphReader<Graph> graphReader(Graph& graph,1229 std::istream& is = std::cin);1230 1231 template <typename Graph>1232 GraphReader<Graph> graphReader(Graph& graph, const std::string& fn);1233 1234 template <typename Graph>1235 GraphReader<Graph> graphReader(Graph& graph, const char *fn);1236 1246 1237 1247 /// \ingroup lemon_io … … 2031 2041 2032 2042 }; 2033 2034 /// \brief Return a \ref GraphReader class2035 ///2036 /// This function just returns a \ref GraphReader class.2037 /// \relates GraphReader2038 template <typename Graph>2039 GraphReader<Graph> graphReader(Graph& graph, std::istream& is = std::cin) {2040 GraphReader<Graph> tmp(graph, is);2041 return tmp;2042 }2043 2044 /// \brief Return a \ref GraphReader class2045 ///2046 /// This function just returns a \ref GraphReader class.2047 /// \relates GraphReader2048 template <typename Graph>2049 GraphReader<Graph> graphReader(Graph& graph, const std::string& fn) {2050 GraphReader<Graph> tmp(graph, fn);2051 return tmp;2052 }2053 2054 /// \brief Return a \ref GraphReader class2055 ///2056 /// This function just returns a \ref GraphReader class.2057 /// \relates GraphReader2058 template <typename Graph>2059 GraphReader<Graph> graphReader(Graph& graph, const char* fn) {2060 GraphReader<Graph> tmp(graph, fn);2061 return tmp;2062 }2063 2043 2064 2044 class SectionReader; -
lemon/lgf_writer.h
r295 r303 352 352 class DigraphWriter; 353 353 354 /// \brief Return a \ref DigraphWriter class 355 /// 356 /// This function just returns a \ref DigraphWriter class. 357 /// \relates DigraphWriter 354 358 template <typename Digraph> 355 359 DigraphWriter<Digraph> digraphWriter(const Digraph& digraph, 356 std::ostream& os = std::cout); 357 360 std::ostream& os = std::cout) { 361 DigraphWriter<Digraph> tmp(digraph, os); 362 return tmp; 363 } 364 365 /// \brief Return a \ref DigraphWriter class 366 /// 367 /// This function just returns a \ref DigraphWriter class. 368 /// \relates DigraphWriter 358 369 template <typename Digraph> 359 370 DigraphWriter<Digraph> digraphWriter(const Digraph& digraph, 360 const std::string& fn); 361 371 const std::string& fn) { 372 DigraphWriter<Digraph> tmp(digraph, fn); 373 return tmp; 374 } 375 376 /// \brief Return a \ref DigraphWriter class 377 /// 378 /// This function just returns a \ref DigraphWriter class. 379 /// \relates DigraphWriter 362 380 template <typename Digraph> 363 381 DigraphWriter<Digraph> digraphWriter(const Digraph& digraph, 364 const char *fn); 382 const char* fn) { 383 DigraphWriter<Digraph> tmp(digraph, fn); 384 return tmp; 385 } 365 386 366 387 /// \ingroup lemon_io … … 914 935 }; 915 936 916 /// \brief Return a \ref DigraphWriter class 917 /// 918 /// This function just returns a \ref DigraphWriter class. 919 /// \relates DigraphWriter 920 template <typename Digraph> 921 DigraphWriter<Digraph> digraphWriter(const Digraph& digraph, 922 std::ostream& os = std::cout) { 923 DigraphWriter<Digraph> tmp(digraph, os); 937 template <typename Graph> 938 class GraphWriter; 939 940 /// \brief Return a \ref GraphWriter class 941 /// 942 /// This function just returns a \ref GraphWriter class. 943 /// \relates GraphWriter 944 template <typename Graph> 945 GraphWriter<Graph> graphWriter(const Graph& graph, 946 std::ostream& os = std::cout) { 947 GraphWriter<Graph> tmp(graph, os); 924 948 return tmp; 925 949 } 926 950 927 /// \brief Return a \ref DigraphWriter class 928 /// 929 /// This function just returns a \ref DigraphWriter class. 930 /// \relates DigraphWriter 931 template <typename Digraph> 932 DigraphWriter<Digraph> digraphWriter(const Digraph& digraph, 933 const std::string& fn) { 934 DigraphWriter<Digraph> tmp(digraph, fn); 951 /// \brief Return a \ref GraphWriter class 952 /// 953 /// This function just returns a \ref GraphWriter class. 954 /// \relates GraphWriter 955 template <typename Graph> 956 GraphWriter<Graph> graphWriter(const Graph& graph, const std::string& fn) { 957 GraphWriter<Graph> tmp(graph, fn); 935 958 return tmp; 936 959 } 937 960 938 /// \brief Return a \ref DigraphWriter class 939 /// 940 /// This function just returns a \ref DigraphWriter class. 941 /// \relates DigraphWriter 942 template <typename Digraph> 943 DigraphWriter<Digraph> digraphWriter(const Digraph& digraph, 944 const char* fn) { 945 DigraphWriter<Digraph> tmp(digraph, fn); 961 /// \brief Return a \ref GraphWriter class 962 /// 963 /// This function just returns a \ref GraphWriter class. 964 /// \relates GraphWriter 965 template <typename Graph> 966 GraphWriter<Graph> graphWriter(const Graph& graph, const char* fn) { 967 GraphWriter<Graph> tmp(graph, fn); 946 968 return tmp; 947 969 } 948 949 template <typename Graph>950 class GraphWriter;951 952 template <typename Graph>953 GraphWriter<Graph> graphWriter(const Graph& graph,954 std::ostream& os = std::cout);955 956 template <typename Graph>957 GraphWriter<Graph> graphWriter(const Graph& graph, const std::string& fn);958 959 template <typename Graph>960 GraphWriter<Graph> graphWriter(const Graph& graph, const char *fn);961 970 962 971 /// \ingroup lemon_io … … 1526 1535 /// @} 1527 1536 }; 1528 1529 /// \brief Return a \ref GraphWriter class1530 ///1531 /// This function just returns a \ref GraphWriter class.1532 /// \relates GraphWriter1533 template <typename Graph>1534 GraphWriter<Graph> graphWriter(const Graph& graph,1535 std::ostream& os = std::cout) {1536 GraphWriter<Graph> tmp(graph, os);1537 return tmp;1538 }1539 1540 /// \brief Return a \ref GraphWriter class1541 ///1542 /// This function just returns a \ref GraphWriter class.1543 /// \relates GraphWriter1544 template <typename Graph>1545 GraphWriter<Graph> graphWriter(const Graph& graph, const std::string& fn) {1546 GraphWriter<Graph> tmp(graph, fn);1547 return tmp;1548 }1549 1550 /// \brief Return a \ref GraphWriter class1551 ///1552 /// This function just returns a \ref GraphWriter class.1553 /// \relates GraphWriter1554 template <typename Graph>1555 GraphWriter<Graph> graphWriter(const Graph& graph, const char* fn) {1556 GraphWriter<Graph> tmp(graph, fn);1557 return tmp;1558 }1559 1537 1560 1538 class SectionWriter; -
lemon/list_graph.h
r280 r313 414 414 /// 415 415 ///\note The <tt>InArcIt</tt>s referencing the changed arc remain 416 ///valid. However the <tt>ArcIt< tt>s and <tt>OutArcIt</tt>s are416 ///valid. However the <tt>ArcIt</tt>s and <tt>OutArcIt</tt>s are 417 417 ///invalidated. 418 418 /// -
lemon/maps.h
r280 r314 44 44 class MapBase { 45 45 public: 46 /// \b iref The key type of the map.46 /// \brief The key type of the map. 47 47 typedef K Key; 48 48 /// \brief The value type of the map. … … 74 74 }; 75 75 76 /// Returns a \ refNullMap class77 78 /// This function just returns a \ refNullMap class.76 /// Returns a \c NullMap class 77 78 /// This function just returns a \c NullMap class. 79 79 /// \relates NullMap 80 80 template <typename K, typename V> … … 89 89 /// value to each key. 90 90 /// 91 /// In other aspects it is equivalent to \ refNullMap.91 /// In other aspects it is equivalent to \c NullMap. 92 92 /// So it conforms the \ref concepts::ReadWriteMap "ReadWriteMap" 93 93 /// concept, but it absorbs the data written to it. … … 134 134 }; 135 135 136 /// Returns a \ refConstMap class137 138 /// This function just returns a \ refConstMap class.136 /// Returns a \c ConstMap class 137 138 /// This function just returns a \c ConstMap class. 139 139 /// \relates ConstMap 140 140 template<typename K, typename V> … … 157 157 /// value to each key. 158 158 /// 159 /// In other aspects it is equivalent to \ refNullMap.159 /// In other aspects it is equivalent to \c NullMap. 160 160 /// So it conforms the \ref concepts::ReadWriteMap "ReadWriteMap" 161 161 /// concept, but it absorbs the data written to it. … … 183 183 }; 184 184 185 /// Returns a \ refConstMap class with inlined constant value186 187 /// This function just returns a \ refConstMap class with inlined185 /// Returns a \c ConstMap class with inlined constant value 186 187 /// This function just returns a \c ConstMap class with inlined 188 188 /// constant value. 189 189 /// \relates ConstMap … … 213 213 }; 214 214 215 /// Returns an \ refIdentityMap class216 217 /// This function just returns an \ refIdentityMap class.215 /// Returns an \c IdentityMap class 216 217 /// This function just returns an \c IdentityMap class. 218 218 /// \relates IdentityMap 219 219 template<typename T> … … 229 229 /// values to integer keys from the range <tt>[0..size-1]</tt>. 230 230 /// It can be used with some data structures, for example 231 /// \ ref UnionFind, \refBinHeap, when the used items are small231 /// \c UnionFind, \c BinHeap, when the used items are small 232 232 /// integers. This map conforms the \ref concepts::ReferenceMap 233 233 /// "ReferenceMap" concept. … … 269 269 : _vector(vector.begin(), vector.end()) {} 270 270 271 /// Constructs the map from another \ refRangeMap.271 /// Constructs the map from another \c RangeMap. 272 272 template <typename V1> 273 273 RangeMap(const RangeMap<V1> &c) … … 312 312 }; 313 313 314 /// Returns a \ refRangeMap class315 316 /// This function just returns a \ refRangeMap class.314 /// Returns a \c RangeMap class 315 316 /// This function just returns a \c RangeMap class. 317 317 /// \relates RangeMap 318 318 template<typename V> … … 321 321 } 322 322 323 /// \brief Returns a \ refRangeMap class created from an appropriate323 /// \brief Returns a \c RangeMap class created from an appropriate 324 324 /// \c std::vector 325 325 326 /// This function just returns a \ refRangeMap class created from an326 /// This function just returns a \c RangeMap class created from an 327 327 /// appropriate \c std::vector. 328 328 /// \relates RangeMap … … 389 389 : _map(map.begin(), map.end()), _value(value) {} 390 390 391 /// \brief Constructs the map from another \ refSparseMap.391 /// \brief Constructs the map from another \c SparseMap. 392 392 template<typename V1, typename Comp1> 393 393 SparseMap(const SparseMap<Key, V1, Comp1> &c) … … 434 434 }; 435 435 436 /// Returns a \ refSparseMap class437 438 /// This function just returns a \ refSparseMap class with specified436 /// Returns a \c SparseMap class 437 438 /// This function just returns a \c SparseMap class with specified 439 439 /// default value. 440 440 /// \relates SparseMap … … 449 449 } 450 450 451 /// \brief Returns a \ refSparseMap class created from an appropriate451 /// \brief Returns a \c SparseMap class created from an appropriate 452 452 /// \c std::map 453 453 454 /// This function just returns a \ refSparseMap class created from an454 /// This function just returns a \c SparseMap class created from an 455 455 /// appropriate \c std::map. 456 456 /// \relates SparseMap … … 502 502 }; 503 503 504 /// Returns a \ refComposeMap class505 506 /// This function just returns a \ refComposeMap class.504 /// Returns a \c ComposeMap class 505 506 /// This function just returns a \c ComposeMap class. 507 507 /// 508 508 /// If \c m1 and \c m2 are maps and the \c Value type of \c m2 is … … 557 557 }; 558 558 559 /// Returns a \ refCombineMap class560 561 /// This function just returns a \ refCombineMap class.559 /// Returns a \c CombineMap class 560 561 /// This function just returns a \c CombineMap class. 562 562 /// 563 563 /// For example, if \c m1 and \c m2 are both maps with \c double … … 626 626 }; 627 627 628 /// Returns a \ refFunctorToMap class629 630 /// This function just returns a \ refFunctorToMap class.628 /// Returns a \c FunctorToMap class 629 630 /// This function just returns a \c FunctorToMap class. 631 631 /// 632 632 /// This function is specialized for adaptable binary function … … 685 685 }; 686 686 687 /// Returns a \ refMapToFunctor class688 689 /// This function just returns a \ refMapToFunctor class.687 /// Returns a \c MapToFunctor class 688 689 /// This function just returns a \c MapToFunctor class. 690 690 /// \relates MapToFunctor 691 691 template<typename M> … … 724 724 }; 725 725 726 /// Returns a \ refConvertMap class727 728 /// This function just returns a \ refConvertMap class.726 /// Returns a \c ConvertMap class 727 728 /// This function just returns a \c ConvertMap class. 729 729 /// \relates ConvertMap 730 730 template<typename V, typename M> … … 764 764 }; 765 765 766 /// Returns a \ refForkMap class767 768 /// This function just returns a \ refForkMap class.766 /// Returns a \c ForkMap class 767 768 /// This function just returns a \c ForkMap class. 769 769 /// \relates ForkMap 770 770 template <typename M1, typename M2> … … 808 808 }; 809 809 810 /// Returns an \ refAddMap class811 812 /// This function just returns an \ refAddMap class.810 /// Returns an \c AddMap class 811 812 /// This function just returns an \c AddMap class. 813 813 /// 814 814 /// For example, if \c m1 and \c m2 are both maps with \c double … … 856 856 }; 857 857 858 /// Returns a \ refSubMap class859 860 /// This function just returns a \ refSubMap class.858 /// Returns a \c SubMap class 859 860 /// This function just returns a \c SubMap class. 861 861 /// 862 862 /// For example, if \c m1 and \c m2 are both maps with \c double … … 905 905 }; 906 906 907 /// Returns a \ refMulMap class908 909 /// This function just returns a \ refMulMap class.907 /// Returns a \c MulMap class 908 909 /// This function just returns a \c MulMap class. 910 910 /// 911 911 /// For example, if \c m1 and \c m2 are both maps with \c double … … 953 953 }; 954 954 955 /// Returns a \ refDivMap class956 957 /// This function just returns a \ refDivMap class.955 /// Returns a \c DivMap class 956 957 /// This function just returns a \c DivMap class. 958 958 /// 959 959 /// For example, if \c m1 and \c m2 are both maps with \c double … … 1039 1039 }; 1040 1040 1041 /// Returns a \ refShiftMap class1042 1043 /// This function just returns a \ refShiftMap class.1041 /// Returns a \c ShiftMap class 1042 1043 /// This function just returns a \c ShiftMap class. 1044 1044 /// 1045 1045 /// For example, if \c m is a map with \c double values and \c v is … … 1053 1053 } 1054 1054 1055 /// Returns a \ refShiftWriteMap class1056 1057 /// This function just returns a \ refShiftWriteMap class.1055 /// Returns a \c ShiftWriteMap class 1056 1057 /// This function just returns a \c ShiftWriteMap class. 1058 1058 /// 1059 1059 /// For example, if \c m is a map with \c double values and \c v is … … 1141 1141 }; 1142 1142 1143 /// Returns a \ refScaleMap class1144 1145 /// This function just returns a \ refScaleMap class.1143 /// Returns a \c ScaleMap class 1144 1145 /// This function just returns a \c ScaleMap class. 1146 1146 /// 1147 1147 /// For example, if \c m is a map with \c double values and \c v is … … 1155 1155 } 1156 1156 1157 /// Returns a \ refScaleWriteMap class1158 1159 /// This function just returns a \ refScaleWriteMap class.1157 /// Returns a \c ScaleWriteMap class 1158 1159 /// This function just returns a \c ScaleWriteMap class. 1160 1160 /// 1161 1161 /// For example, if \c m is a map with \c double values and \c v is … … 1241 1241 }; 1242 1242 1243 /// Returns a \ refNegMap class1244 1245 /// This function just returns a \ refNegMap class.1243 /// Returns a \c NegMap class 1244 1245 /// This function just returns a \c NegMap class. 1246 1246 /// 1247 1247 /// For example, if \c m is a map with \c double values, then … … 1254 1254 } 1255 1255 1256 /// Returns a \ refNegWriteMap class1257 1258 /// This function just returns a \ refNegWriteMap class.1256 /// Returns a \c NegWriteMap class 1257 1258 /// This function just returns a \c NegWriteMap class. 1259 1259 /// 1260 1260 /// For example, if \c m is a map with \c double values, then … … 1297 1297 }; 1298 1298 1299 /// Returns an \ refAbsMap class1300 1301 /// This function just returns an \ refAbsMap class.1299 /// Returns an \c AbsMap class 1300 1301 /// This function just returns an \c AbsMap class. 1302 1302 /// 1303 1303 /// For example, if \c m is a map with \c double values, then … … 1346 1346 }; 1347 1347 1348 /// Returns a \ refTrueMap class1349 1350 /// This function just returns a \ refTrueMap class.1348 /// Returns a \c TrueMap class 1349 1350 /// This function just returns a \c TrueMap class. 1351 1351 /// \relates TrueMap 1352 1352 template<typename K> … … 1383 1383 }; 1384 1384 1385 /// Returns a \ refFalseMap class1386 1387 /// This function just returns a \ refFalseMap class.1385 /// Returns a \c FalseMap class 1386 1387 /// This function just returns a \c FalseMap class. 1388 1388 /// \relates FalseMap 1389 1389 template<typename K> … … 1430 1430 }; 1431 1431 1432 /// Returns an \ refAndMap class1433 1434 /// This function just returns an \ refAndMap class.1432 /// Returns an \c AndMap class 1433 1434 /// This function just returns an \c AndMap class. 1435 1435 /// 1436 1436 /// For example, if \c m1 and \c m2 are both maps with \c bool values, … … 1478 1478 }; 1479 1479 1480 /// Returns an \ refOrMap class1481 1482 /// This function just returns an \ refOrMap class.1480 /// Returns an \c OrMap class 1481 1482 /// This function just returns an \c OrMap class. 1483 1483 /// 1484 1484 /// For example, if \c m1 and \c m2 are both maps with \c bool values, … … 1545 1545 }; 1546 1546 1547 /// Returns a \ refNotMap class1548 1549 /// This function just returns a \ refNotMap class.1547 /// Returns a \c NotMap class 1548 1549 /// This function just returns a \c NotMap class. 1550 1550 /// 1551 1551 /// For example, if \c m is a map with \c bool values, then … … 1558 1558 } 1559 1559 1560 /// Returns a \ refNotWriteMap class1561 1562 /// This function just returns a \ refNotWriteMap class.1560 /// Returns a \c NotWriteMap class 1561 1562 /// This function just returns a \c NotWriteMap class. 1563 1563 /// 1564 1564 /// For example, if \c m is a map with \c bool values, then … … 1606 1606 }; 1607 1607 1608 /// Returns an \ refEqualMap class1609 1610 /// This function just returns an \ refEqualMap class.1608 /// Returns an \c EqualMap class 1609 1610 /// This function just returns an \c EqualMap class. 1611 1611 /// 1612 1612 /// For example, if \c m1 and \c m2 are maps with keys and values of … … 1654 1654 }; 1655 1655 1656 /// Returns an \ refLessMap class1657 1658 /// This function just returns an \ refLessMap class.1656 /// Returns an \c LessMap class 1657 1658 /// This function just returns an \c LessMap class. 1659 1659 /// 1660 1660 /// For example, if \c m1 and \c m2 are maps with keys and values of … … 1683 1683 1684 1684 } 1685 1686 /// @} 1687 1688 /// \addtogroup maps 1689 /// @{ 1685 1690 1686 1691 /// \brief Writable bool map for logging each \c true assigned element … … 1746 1751 }; 1747 1752 1748 /// Returns a \ refLoggerBoolMap class1749 1750 /// This function just returns a \ refLoggerBoolMap class.1753 /// Returns a \c LoggerBoolMap class 1754 1755 /// This function just returns a \c LoggerBoolMap class. 1751 1756 /// 1752 1757 /// The most important usage of it is storing certain nodes or arcs … … 1768 1773 /// \note LoggerBoolMap is just \ref concepts::WriteMap "writable", so 1769 1774 /// it cannot be used when a readable map is needed, for example as 1770 /// \c ReachedMap for \ ref Bfs, \ref Dfs and \refDijkstra algorithms.1775 /// \c ReachedMap for \c Bfs, \c Dfs and \c Dijkstra algorithms. 1771 1776 /// 1772 1777 /// \relates LoggerBoolMap … … 1775 1780 return LoggerBoolMap<Iterator>(it); 1776 1781 } 1782 1783 /// @} 1784 1785 /// \addtogroup graph_maps 1786 /// @{ 1777 1787 1778 1788 /// Provides an immutable and unique id for each item in the graph. … … 1882 1892 /// The value type of the InvertableMap. 1883 1893 typedef typename Map::Value Value; 1884 1885 1886 1894 1887 1895 /// \brief Constructor. … … 2050 2058 } 2051 2059 2052 2053 2054 2060 }; 2055 2061 … … 2267 2273 /// 2268 2274 /// Constructor 2269 /// \param _digraph The digraph that the map belongs to.2275 /// \param digraph The digraph that the map belongs to. 2270 2276 explicit SourceMap(const Digraph& digraph) : _digraph(digraph) {} 2271 2277 … … 2283 2289 }; 2284 2290 2285 /// \brief Returns a \ refSourceMap class.2286 /// 2287 /// This function just returns an \ refSourceMap class.2291 /// \brief Returns a \c SourceMap class. 2292 /// 2293 /// This function just returns an \c SourceMap class. 2288 2294 /// \relates SourceMap 2289 2295 template <typename Digraph> … … 2306 2312 /// 2307 2313 /// Constructor 2308 /// \param _digraph The digraph that the map belongs to.2314 /// \param digraph The digraph that the map belongs to. 2309 2315 explicit TargetMap(const Digraph& digraph) : _digraph(digraph) {} 2310 2316 … … 2322 2328 }; 2323 2329 2324 /// \brief Returns a \ refTargetMap class.2325 /// 2326 /// This function just returns a \ refTargetMap class.2330 /// \brief Returns a \c TargetMap class. 2331 /// 2332 /// This function just returns a \c TargetMap class. 2327 2333 /// \relates TargetMap 2328 2334 template <typename Digraph> … … 2345 2351 /// 2346 2352 /// Constructor 2347 /// \param _graph The graph that the map belongs to.2353 /// \param graph The graph that the map belongs to. 2348 2354 explicit ForwardMap(const Graph& graph) : _graph(graph) {} 2349 2355 … … 2361 2367 }; 2362 2368 2363 /// \brief Returns a \ refForwardMap class.2364 /// 2365 /// This function just returns an \ refForwardMap class.2369 /// \brief Returns a \c ForwardMap class. 2370 /// 2371 /// This function just returns an \c ForwardMap class. 2366 2372 /// \relates ForwardMap 2367 2373 template <typename Graph> … … 2384 2390 /// 2385 2391 /// Constructor 2386 /// \param _graph The graph that the map belongs to.2392 /// \param graph The graph that the map belongs to. 2387 2393 explicit BackwardMap(const Graph& graph) : _graph(graph) {} 2388 2394 … … 2400 2406 }; 2401 2407 2402 /// \brief Returns a \ refBackwardMap class2403 2404 /// This function just returns a \ refBackwardMap class.2408 /// \brief Returns a \c BackwardMap class 2409 2410 /// This function just returns a \c BackwardMap class. 2405 2411 /// \relates BackwardMap 2406 2412 template <typename Graph> -
lemon/path.h
r236 r313 850 850 int empty() const { return len == 0; } 851 851 852 /// \br eakErase all arcs in the digraph.852 /// \brief Erase all arcs in the digraph. 853 853 void clear() { 854 854 len = 0; -
lemon/smart_graph.h
r280 r313 366 366 367 367 ///This constructor immediately makes a snapshot of the digraph. 368 ///\param _gThe digraph we make a snapshot of.368 ///\param graph The digraph we make a snapshot of. 369 369 Snapshot(SmartDigraph &graph) : _graph(&graph) { 370 370 node_num=_graph->nodes.size(); … … 378 378 ///This function can be called more than once. In case of a repeated 379 379 ///call, the previous snapshot gets lost. 380 ///\param _gThe digraph we make the snapshot of.380 ///\param graph The digraph we make the snapshot of. 381 381 void save(SmartDigraph &graph) 382 382 { … … 776 776 777 777 ///This constructor immediately makes a snapshot of the digraph. 778 ///\param g The digraph we make a snapshot of.778 ///\param graph The digraph we make a snapshot of. 779 779 Snapshot(SmartGraph &graph) { 780 780 graph.saveSnapshot(*this); … … 787 787 ///This function can be called more than once. In case of a repeated 788 788 ///call, the previous snapshot gets lost. 789 ///\param g The digraph we make the snapshot of.789 ///\param graph The digraph we make the snapshot of. 790 790 void save(SmartGraph &graph) 791 791 { -
lemon/time_measure.h
r280 r314 312 312 ///Basically a Timer can be either running or stopped, 313 313 ///but it provides a bit finer control on the execution. 314 ///The \ref Timer also counts the number of \ref start()315 /// executions, and is stops only after the same amount (or more)316 /// \ref stop() "stop()"s. This can be useful e.g. to compute317 /// the running time314 ///The \ref lemon::Timer "Timer" also counts the number of 315 ///\ref lemon::Timer::start() "start()" executions, and it stops 316 ///only after the same amount (or more) \ref lemon::Timer::stop() 317 ///"stop()"s. This can be useful e.g. to compute the running time 318 318 ///of recursive functions. 319 ///320 319 321 320 ///@{ … … 473 472 }; 474 473 475 ///Same as \refTimer but prints a report on destruction.474 ///Same as Timer but prints a report on destruction. 476 475 477 476 ///Same as \ref Timer but prints a report on destruction. … … 492 491 std::ostream &_os; 493 492 public: 494 ///\e 495 493 ///Constructor 494 495 ///Constructor. 496 496 ///\param title This text will be printed before the ellapsed time. 497 497 ///\param os The stream to print the report to. 498 498 ///\param run Sets whether the timer should start immediately. 499 500 499 TimeReport(std::string title,std::ostream &os=std::cerr,bool run=true) 501 500 : Timer(run), _title(title), _os(os){} 502 /// \e Prints the ellapsed time on destruction.501 ///Destructor that prints the ellapsed time 503 502 ~TimeReport() 504 503 { … … 507 506 }; 508 507 509 ///'Do nothing' version of \refTimeReport508 ///'Do nothing' version of TimeReport 510 509 511 510 ///\sa TimeReport -
tools/Makefile.am
r146 r310 2 2 3 3 bin_PROGRAMS += 4 dist_bin_SCRIPTS += tools/lemon-0.x-to-1.x.sh 4 5 5 6 endif WANT_TOOLS
Note: See TracChangeset
for help on using the changeset viewer.