Changes in / [317:a0ab96ad65fe:316:689f24ee83e6] in lemon-main
- Files:
-
- 1 added
- 2 deleted
- 38 edited
Legend:
- Unmodified
- Added
- Removed
-
Makefile.am
r310 r227 25 25 bin_PROGRAMS = 26 26 check_PROGRAMS = 27 dist_bin_SCRIPTS =28 27 TESTS = 29 28 XFAIL_TESTS = … … 33 32 include doc/Makefile.am 34 33 include demo/Makefile.am 34 include benchmark/Makefile.am 35 35 include tools/Makefile.am 36 36 -
README
r310 r246 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 40 44 tools/ 41 45 -
configure.ac
r310 r296 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"; then 91 AC_MSG_RESULT([yes]) 92 else 93 AC_MSG_RESULT([no]) 94 fi 95 AM_CONDITIONAL([WANT_BENCHMARK], [test x"$enable_benchmark" != x"no"]) 96 84 97 dnl Checks for header files. 85 98 AC_CHECK_HEADERS(limits.h sys/time.h sys/times.h unistd.h) … … 120 133 #echo SOPLEX support................ : $lx_soplex_found 121 134 #echo 135 echo Build benchmarks.............. : $enable_benchmark 122 136 echo Build demo programs........... : $enable_demo 123 137 echo Build additional tools........ : $enable_tools -
demo/arg_parser_demo.cc
r311 r209 28 28 29 29 using namespace lemon; 30 int main(int argc, c har **argv)30 int main(int argc, const char **argv) 31 31 { 32 32 // Initialize the argument parser -
demo/graph_to_eps_demo.cc
r313 r220 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 graph maps.29 /// using appropriate \ref maps-page "graph maps". 30 30 /// 31 31 /// \include graph_to_eps_demo.cc -
doc/Makefile.am
r317 r316 8 8 doc/license.dox \ 9 9 doc/mainpage.dox \ 10 doc/migration.dox \11 10 doc/named-param.dox \ 12 11 doc/namespaces.dox \ -
doc/groups.dox
r314 r236 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 structure. 58 59 <b>See also:</b> \ref graph_concepts "Graph Structure Concepts". 57 with any graph structures. 60 58 */ 61 59 … … 77 75 This group describes the map structures implemented in LEMON. 78 76 79 LEMON provides several special purpose maps and map adaptorsthat e.g. combine77 LEMON provides several special purpose maps that e.g. combine 80 78 new maps from existing ones. 81 82 <b>See also:</b> \ref map_concepts "Map Concepts".83 79 */ 84 80 … … 91 87 values to the nodes and arcs of graphs. 92 88 */ 89 93 90 94 91 /** … … 108 105 algorithms. If a function type algorithm is called then the function 109 106 type map adaptors can be used comfortable. For example let's see the 110 usage of map adaptors with the \c graphToEps() function.107 usage of map adaptors with the \c digraphToEps() function. 111 108 \code 112 109 Color nodeColor(int deg) { … … 122 119 Digraph::NodeMap<int> degree_map(graph); 123 120 124 graphToEps(graph, "graph.eps")121 digraphToEps(graph, "graph.eps") 125 122 .coords(coords).scaleToA4().undirected() 126 123 .nodeColors(composeMap(functorToMap(nodeColor), degree_map)) … … 128 125 \endcode 129 126 The \c functorToMap() function makes an \c int to \c Color map from the 130 \ c nodeColor() function. The \c composeMap() compose the \cdegree_map127 \e nodeColor() function. The \c composeMap() compose the \e degree_map 131 128 and the previously created map. The composed map is a proper function to 132 129 get the color of each node. … … 177 174 178 175 \sa lemon::concepts::Path 176 179 177 */ 180 178 … … 188 186 */ 189 187 188 190 189 /** 191 190 @defgroup algs Algorithms … … 203 202 204 203 This group describes the common graph search algorithms like 205 Breadth- First Search (BFS) and Depth-First Search (DFS).206 */ 207 208 /** 209 @defgroup shortest_path Shortest Path Algorithms204 Breadth-first search (Bfs) and Depth-first search (Dfs). 205 */ 206 207 /** 208 @defgroup shortest_path Shortest Path algorithms 210 209 @ingroup algs 211 210 \brief Algorithms for finding shortest paths. … … 215 214 216 215 /** 217 @defgroup max_flow Maximum Flow Algorithms216 @defgroup max_flow Maximum Flow algorithms 218 217 @ingroup algs 219 218 \brief Algorithms for finding maximum flows. … … 243 242 provides functions to query the minimum cut, which is the dual linear 244 243 programming problem of the maximum flow. 245 */ 246 247 /** 248 @defgroup min_cost_flow Minimum Cost Flow Algorithms 244 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 @defgroup graph_prop Connectivity and Other Graph Properties 285 286 */ 287 288 /** 289 @defgroup graph_prop Connectivity and other graph properties 289 290 @ingroup algs 290 291 \brief Algorithms for discovering the graph properties … … 298 299 299 300 /** 300 @defgroup planar Planarity Embedding and Drawing301 @defgroup planar Planarity embedding and drawing 301 302 @ingroup algs 302 303 \brief Algorithms for planarity checking, embedding and drawing … … 310 311 311 312 /** 312 @defgroup matching Matching Algorithms313 @defgroup matching Matching algorithms 313 314 @ingroup algs 314 315 \brief Algorithms for finding matchings in graphs and bipartite graphs. … … 348 349 \image html bipartite_matching.png 349 350 \image latex bipartite_matching.eps "Bipartite Matching" width=\textwidth 350 */ 351 352 /** 353 @defgroup spantree Minimum Spanning Tree Algorithms 351 352 */ 353 354 /** 355 @defgroup spantree Minimum Spanning Tree algorithms 354 356 @ingroup algs 355 357 \brief Algorithms for finding a minimum cost spanning tree in a graph. … … 359 361 */ 360 362 361 /** 362 @defgroup auxalg Auxiliary Algorithms 363 364 /** 365 @defgroup auxalg Auxiliary algorithms 363 366 @ingroup algs 364 367 \brief Auxiliary algorithms implemented in LEMON. … … 369 372 370 373 /** 371 @defgroup approx Approximation Algorithms 372 @ingroup algs 374 @defgroup approx Approximation algorithms 373 375 \brief Approximation algorithms. 374 376 … … 384 386 This group describes some general optimization frameworks 385 387 implemented in LEMON. 386 */ 387 388 /** 389 @defgroup lp_group Lp and Mip Solvers 388 389 */ 390 391 /** 392 @defgroup lp_group Lp and Mip solvers 390 393 @ingroup gen_opt_group 391 394 \brief Lp and Mip solver interfaces for LEMON. … … 394 397 various LP solvers could be used in the same manner with this 395 398 interface. 396 */ 397 398 /** 399 @defgroup lp_utils Tools for Lp and Mip Solvers 399 400 */ 401 402 /** 403 @defgroup lp_utils Tools for Lp and Mip solvers 400 404 @ingroup lp_group 401 405 \brief Helper tools to the Lp and Mip solvers. … … 438 442 439 443 /** 440 @defgroup timecount Time Measuring and Counting444 @defgroup timecount Time measuring and Counting 441 445 @ingroup misc 442 446 \brief Simple tools for measuring the performance of algorithms. … … 444 448 This group describes simple tools for measuring the performance 445 449 of algorithms. 450 */ 451 452 /** 453 @defgroup graphbits Tools for Graph Implementation 454 @ingroup utils 455 \brief Tools to make it easier to create graphs. 456 457 This group describes the tools that makes it easier to create graphs and 458 the maps that dynamically update with the graph changes. 446 459 */ 447 460 … … 459 472 460 473 This group describes the tools for importing and exporting graphs 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. 474 and graph related data. Now it supports the LEMON format, the 475 \c DIMACS format and the encapsulated postscript (EPS) format. 464 476 */ 465 477 … … 467 479 @defgroup lemon_io LEMON Input-Output 468 480 @ingroup io_group 469 \brief Reading and writing LEMON Graph Format.481 \brief Reading and writing \ref lgf-format "LEMON Graph Format". 470 482 471 483 This group describes methods for reading and writing … … 474 486 475 487 /** 476 @defgroup eps_io Postscript Exporting488 @defgroup eps_io Postscript exporting 477 489 @ingroup io_group 478 490 \brief General \c EPS drawer and graph exporter … … 481 493 graph exporting tools. 482 494 */ 495 483 496 484 497 /** … … 509 522 510 523 - Finally, They can serve as a skeleton of a new implementation of a concept. 511 */ 524 525 */ 526 512 527 513 528 /** … … 520 535 */ 521 536 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. 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. 528 541 */ 529 542 -
doc/lgf.dox
r313 r236 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
r314 r209 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 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. 59 61 60 */ -
lemon/arg_parser.cc
r311 r214 27 27 } 28 28 29 ArgParser::ArgParser(int argc, const char * const *argv)30 :_argc(argc), _argv(argv),_command_name(argv[0]) {29 ArgParser::ArgParser(int argc, const char **argv) :_argc(argc), _argv(argv), 30 _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 34 35 } 35 36 -
lemon/arg_parser.h
r311 r290 47 47 48 48 int _argc; 49 const char * const*_argv;49 const char **_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 * const*argv);122 ArgParser(int argc, const char **argv); 123 123 124 124 ~ArgParser(); -
lemon/bfs.h
r301 r292 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 PredMap.53 54 ///This function instantiates a PredMap.52 ///Instantiates a \ref PredMap. 53 54 ///This function instantiates a \ref PredMap. 55 55 ///\param g is the digraph, to which we would like to define the 56 /// PredMap.56 ///\ref 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 ProcessedMap.68 69 ///This function instantiates a ProcessedMap.67 ///Instantiates a \ref ProcessedMap. 68 69 ///This function instantiates a \ref ProcessedMap. 70 70 ///\param g is the digraph, to which 71 ///we would like to define the ProcessedMap71 ///we would like to define the \ref 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 ReachedMap.87 88 ///This function instantiates a ReachedMap.86 ///Instantiates a \ref ReachedMap. 87 88 ///This function instantiates a \ref ReachedMap. 89 89 ///\param g is the digraph, to which 90 ///we would like to define the ReachedMap.90 ///we would like to define the \ref 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 DistMap.102 103 ///This function instantiates a DistMap.101 ///Instantiates a \ref DistMap. 102 103 ///This function instantiates a \ref DistMap. 104 104 ///\param g is the digraph, to which we would like to define the 105 /// DistMap.105 ///\ref 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 /// PredMap type.230 ///\ref PredMap type. 231 231 /// 232 232 ///\ref named-templ-param "Named parameter" for setting 233 /// PredMap type.233 ///\ref 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 /// DistMap type.249 ///\ref DistMap type. 250 250 /// 251 251 ///\ref named-templ-param "Named parameter" for setting 252 /// DistMap type.252 ///\ref 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 /// ReachedMap type.268 ///\ref ReachedMap type. 269 269 /// 270 270 ///\ref named-templ-param "Named parameter" for setting 271 /// ReachedMap type.271 ///\ref 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 /// ProcessedMap type.287 ///\ref ProcessedMap type. 288 288 /// 289 289 ///\ref named-templ-param "Named parameter" for setting 290 /// ProcessedMap type.290 ///\ref 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 /// ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>.305 ///\ref ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>. 306 306 /// 307 307 ///\ref named-templ-param "Named parameter" for setting 308 /// ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>.308 ///\ref 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 PredMap.839 840 ///This function instantiates a PredMap.838 ///Instantiates a \ref PredMap. 839 840 ///This function instantiates a \ref PredMap. 841 841 ///\param g is the digraph, to which we would like to define the 842 /// PredMap.842 ///\ref 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 ProcessedMap.855 856 ///This function instantiates a ProcessedMap.854 ///Instantiates a \ref ProcessedMap. 855 856 ///This function instantiates a \ref ProcessedMap. 857 857 ///\param g is the digraph, to which 858 ///we would like to define the ProcessedMap.858 ///we would like to define the \ref 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 ReachedMap.874 875 ///This function instantiates a ReachedMap.873 ///Instantiates a \ref ReachedMap. 874 875 ///This function instantiates a \ref ReachedMap. 876 876 ///\param g is the digraph, to which 877 ///we would like to define the ReachedMap.877 ///we would like to define the \ref 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 DistMap.889 890 ///This function instantiates a DistMap.888 ///Instantiates a \ref DistMap. 889 890 ///This function instantiates a \ref DistMap. 891 891 ///\param g is the digraph, to which we would like to define 892 ///the DistMap892 ///the \ref DistMap 893 893 static DistMap *createDistMap(const Digraph &g) 894 894 { … … 903 903 }; 904 904 905 /// Default traits class used by BfsWizard905 /// Default traits class used by \ref 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 PredMap object.1071 ///for setting \ref PredMap object. 1072 1072 /// 1073 1073 ///\ref named-func-param "Named parameter" 1074 ///for setting PredMap object.1074 ///for setting \ref 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 ReachedMap object.1089 ///for setting \ref ReachedMap object. 1090 1090 /// 1091 1091 /// \ref named-func-param "Named parameter" 1092 ///for setting ReachedMap object.1092 ///for setting \ref 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 DistMap object.1107 ///for setting \ref DistMap object. 1108 1108 /// 1109 1109 /// \ref named-func-param "Named parameter" 1110 ///for setting DistMap object.1110 ///for setting \ref 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 ProcessedMap object.1125 ///for setting \ref ProcessedMap object. 1126 1126 /// 1127 1127 /// \ref named-func-param "Named parameter" 1128 ///for setting ProcessedMap object.1128 ///for setting \ref 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 ReachedMap.1271 /// 1272 /// This function instantiates a ReachedMap.1270 /// \brief Instantiates a \ref ReachedMap. 1271 /// 1272 /// This function instantiates a \ref ReachedMap. 1273 1273 /// \param digraph is the digraph, to which 1274 /// we would like to define the ReachedMap.1274 /// we would like to define the \ref ReachedMap. 1275 1275 static ReachedMap *createReachedMap(const Digraph &digraph) { 1276 1276 return new ReachedMap(digraph); -
lemon/bits/alteration_notifier.h
r314 r236 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 \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. 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. 96 97 97 98 template <typename _Container, typename _Item> … … 104 105 typedef _Item Item; 105 106 106 // \brief Exception which can be called from \e clear() and107 // \e erase().108 // 109 // From the \e clear() and \e erase() function only this110 // exception is allowed to throw. The exception immediatly111 // detaches the current observer from the notifier. Because the112 // \e clear() and \e erase() should not throw other exceptions113 // it can be used to invalidate the observer.107 /// \brief Exception which can be called from \e clear() and 108 /// \e erase(). 109 /// 110 /// From the \e clear() and \e erase() function only this 111 /// exception is allowed to throw. The exception immediatly 112 /// detaches the current observer from the notifier. Because the 113 /// \e clear() and \e erase() should not throw other exceptions 114 /// it can be used to invalidate the observer. 114 115 struct ImmediateDetach {}; 115 116 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. 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 130 132 class ObserverBase { 131 133 protected: … … 134 136 friend class AlterationNotifier; 135 137 136 // \brief Default constructor. 137 // 138 // Default constructor for ObserverBase. 138 /// \brief Default constructor. 139 /// 140 /// Default constructor for ObserverBase. 141 /// 139 142 ObserverBase() : _notifier(0) {} 140 143 141 // \brief Constructor which attach the observer into notifier.142 // 143 // Constructor which attach the observer into notifier.144 /// \brief Constructor which attach the observer into notifier. 145 /// 146 /// Constructor which attach the observer into notifier. 144 147 ObserverBase(AlterationNotifier& nf) { 145 148 attach(nf); 146 149 } 147 150 148 // \brief Constructor which attach the obserever to the same notifier.149 // 150 // Constructor which attach the obserever to the same notifier as151 // the other observer is attached to.151 /// \brief Constructor which attach the obserever to the same notifier. 152 /// 153 /// Constructor which attach the obserever to the same notifier as 154 /// the other observer is attached to. 152 155 ObserverBase(const ObserverBase& copy) { 153 156 if (copy.attached()) { … … 156 159 } 157 160 158 // \brief Destructor161 /// \brief Destructor 159 162 virtual ~ObserverBase() { 160 163 if (attached()) { … … 163 166 } 164 167 165 // \brief Attaches the observer into an AlterationNotifier. 166 // 167 // This member attaches the observer into an AlterationNotifier. 168 /// \brief Attaches the observer into an AlterationNotifier. 169 /// 170 /// This member attaches the observer into an AlterationNotifier. 171 /// 168 172 void attach(AlterationNotifier& nf) { 169 173 nf.attach(*this); 170 174 } 171 175 172 // \brief Detaches the observer into an AlterationNotifier. 173 // 174 // This member detaches the observer from an AlterationNotifier. 176 /// \brief Detaches the observer into an AlterationNotifier. 177 /// 178 /// This member detaches the observer from an AlterationNotifier. 179 /// 175 180 void detach() { 176 181 _notifier->detach(*this); 177 182 } 178 183 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. 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 /// 184 190 Notifier* notifier() const { return const_cast<Notifier*>(_notifier); } 185 191 186 // Gives back true when the observer is attached into a notifier.192 /// Gives back true when the observer is attached into a notifier. 187 193 bool attached() const { return _notifier != 0; } 188 194 … … 196 202 typename std::list<ObserverBase*>::iterator _index; 197 203 198 // \brief The member function to notificate the observer about an199 // item is added to the container.200 // 201 // The add() member function notificates the observer about an item202 // is added to the container. It have to be overrided in the203 // subclasses.204 /// \brief The member function to notificate the observer about an 205 /// item is added to the container. 206 /// 207 /// The add() member function notificates the observer about an item 208 /// is added to the container. It have to be overrided in the 209 /// subclasses. 204 210 virtual void add(const Item&) = 0; 205 211 206 // \brief The member function to notificate the observer about207 // more item is added to the container.208 // 209 // The add() member function notificates the observer about more item210 // is added to the container. It have to be overrided in the211 // subclasses.212 /// \brief The member function to notificate the observer about 213 /// more item is added to the container. 214 /// 215 /// The add() member function notificates the observer about more item 216 /// is added to the container. It have to be overrided in the 217 /// subclasses. 212 218 virtual void add(const std::vector<Item>& items) = 0; 213 219 214 // \brief The member function to notificate the observer about an215 // item is erased from the container.216 // 217 // The erase() member function notificates the observer about an218 // item is erased from the container. It have to be overrided in219 // the subclasses.220 /// \brief The member function to notificate the observer about an 221 /// item is erased from the container. 222 /// 223 /// The erase() member function notificates the observer about an 224 /// item is erased from the container. It have to be overrided in 225 /// the subclasses. 220 226 virtual void erase(const Item&) = 0; 221 227 222 // \brief The member function to notificate the observer about223 // more item is erased from the container.224 // 225 // The erase() member function notificates the observer about more item226 // is erased from the container. It have to be overrided in the227 // subclasses.228 /// \brief The member function to notificate the observer about 229 /// more item is erased from the container. 230 /// 231 /// The erase() member function notificates the observer about more item 232 /// is erased from the container. It have to be overrided in the 233 /// subclasses. 228 234 virtual void erase(const std::vector<Item>& items) = 0; 229 235 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. 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 236 243 virtual void build() = 0; 237 244 238 // \brief The member function to notificate the observer about all239 // items are erased from the container.240 // 241 // The clear() member function notificates the observer about all242 // items are erased from the container. It have to be overrided in243 // the subclasses.245 /// \brief The member function to notificate the observer about all 246 /// items are erased from the container. 247 /// 248 /// The clear() member function notificates the observer about all 249 /// items are erased from the container. It have to be overrided in 250 /// the subclasses. 244 251 virtual void clear() = 0; 245 252 … … 256 263 public: 257 264 258 // \brief Default constructor.259 // 260 // The default constructor of the AlterationNotifier.261 // It creates an empty notifier.265 /// \brief Default constructor. 266 /// 267 /// The default constructor of the AlterationNotifier. 268 /// It creates an empty notifier. 262 269 AlterationNotifier() 263 270 : container(0) {} 264 271 265 // \brief Constructor.266 // 267 // Constructor with the observed container parameter.272 /// \brief Constructor. 273 /// 274 /// Constructor with the observed container parameter. 268 275 AlterationNotifier(const Container& _container) 269 276 : container(&_container) {} 270 277 271 // \brief Copy Constructor of the AlterationNotifier.272 // 273 // Copy constructor of the AlterationNotifier.274 // It creates only an empty notifier because the copiable275 // notifier's observers have to be registered still into that notifier.278 /// \brief Copy Constructor of the AlterationNotifier. 279 /// 280 /// Copy constructor of the AlterationNotifier. 281 /// It creates only an empty notifier because the copiable 282 /// notifier's observers have to be registered still into that notifier. 276 283 AlterationNotifier(const AlterationNotifier& _notifier) 277 284 : container(_notifier.container) {} 278 285 279 // \brief Destructor. 280 // 281 // Destructor of the AlterationNotifier. 286 /// \brief Destructor. 287 /// 288 /// Destructor of the AlterationNotifier. 289 /// 282 290 ~AlterationNotifier() { 283 291 typename Observers::iterator it; … … 287 295 } 288 296 289 // \brief Sets the container.290 // 291 // Sets the container.297 /// \brief Sets the container. 298 /// 299 /// Sets the container. 292 300 void setContainer(const Container& _container) { 293 301 container = &_container; … … 300 308 public: 301 309 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. 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. 306 316 void first(Item& item) const { 307 317 container->first(item); 308 318 } 309 319 310 // \brief Next item in the container.311 // 312 // Returns the next item in the container. It is313 // for iterate on the container.320 /// \brief Next item in the container. 321 /// 322 /// Returns the next item in the container. It is 323 /// for iterate on the container. 314 324 void next(Item& item) const { 315 325 container->next(item); 316 326 } 317 327 318 // \brief Returns the id of the item.319 // 320 // Returns the id of the item provided by the container.328 /// \brief Returns the id of the item. 329 /// 330 /// Returns the id of the item provided by the container. 321 331 int id(const Item& item) const { 322 332 return container->id(item); 323 333 } 324 334 325 // \brief Returns the maximum id of the container.326 // 327 // Returns the maximum id of the container.335 /// \brief Returns the maximum id of the container. 336 /// 337 /// Returns the maximum id of the container. 328 338 int maxId() const { 329 339 return container->maxId(Item()); … … 345 355 public: 346 356 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. 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 /// 352 363 void add(const Item& item) { 353 364 typename Observers::reverse_iterator it; … … 365 376 } 366 377 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. 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 /// 372 384 void add(const std::vector<Item>& items) { 373 385 typename Observers::reverse_iterator it; … … 385 397 } 386 398 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. 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 /// 392 405 void erase(const Item& item) throw() { 393 406 typename Observers::iterator it = _observers.begin(); … … 404 417 } 405 418 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. 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 /// 411 425 void erase(const std::vector<Item>& items) { 412 426 typename Observers::iterator it = _observers.begin(); … … 423 437 } 424 438 425 // \brief Notifies all the registed observers about the container is426 // built.427 // 428 // Notifies all the registed observers about the container is built429 // from an empty container.439 /// \brief Notifies all the registed observers about the container is 440 /// built. 441 /// 442 /// Notifies all the registed observers about the container is built 443 /// from an empty container. 430 444 void build() { 431 445 typename Observers::reverse_iterator it; … … 443 457 } 444 458 445 // \brief Notifies all the registed observers about all items are446 // erased.447 // 448 // Notifies all the registed observers about all items are erased449 // from the container.459 /// \brief Notifies all the registed observers about all items are 460 /// erased. 461 /// 462 /// Notifies all the registed observers about all items are erased 463 /// from the container. 450 464 void clear() { 451 465 typename Observers::iterator it = _observers.begin(); -
lemon/bits/array_map.h
r314 r263 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
r314 r289 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
r314 r209 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
r314 r209 20 20 #define LEMON_BITS_DEFAULT_MAP_H 21 21 22 22 23 #include <lemon/bits/array_map.h> 23 24 #include <lemon/bits/vector_map.h> 24 25 //#include <lemon/bits/debug_map.h> 25 26 26 // \ingroup graphbits27 // \file28 // \brief Graph maps that construct and destruct their elements dynamically.27 ///\ingroup graphbits 28 ///\file 29 ///\brief Graph maps that construct and destruct their elements dynamically. 29 30 30 31 namespace lemon { … … 149 150 // #endif 150 151 151 // DefaultMap class152 /// \e 152 153 template <typename _Graph, typename _Item, typename _Value> 153 154 class DefaultMap -
lemon/bits/enable_if.h
r314 r220 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
r314 r263 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
r314 r263 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
r314 r220 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
r314 r280 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
r313 r209 93 93 extern const Color DARK_CYAN; 94 94 95 ///Map <tt>int</tt>s to different <tt>Color</tt>s95 ///Map <tt>int</tt>s to different \ref Color "Color"s 96 96 97 97 ///This map assigns one of the predefined \ref Color "Color"s to -
lemon/concepts/graph_components.h
r313 r263 983 983 /// 984 984 /// This class describes the common interface of the graph maps 985 /// (NodeMap, ArcMap), that is maps thatcan be used to985 /// (NodeMap, ArcMap), that is \ref maps-page "maps" which 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
r314 r220 23 23 #include <lemon/concept_check.h> 24 24 25 ///\ingroup map_concepts25 ///\ingroup concept 26 26 ///\file 27 27 ///\brief The concept of maps. … … 31 31 namespace concepts { 32 32 33 /// \addtogroup map_concepts33 /// \addtogroup concept 34 34 /// @{ 35 35 -
lemon/core.h
r313 r282 59 59 /// @{ 60 60 61 ///Create convenien cetypedefs for the digraph types and iterators61 ///Create convenient 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 cetypedefs for the digraph types and iterators83 typedef Digraph::ArcMap<double> DoubleArcMap; 84 85 ///Create convenient 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 cetypedefs for the graph types and iterators103 typedef typename Digraph::template ArcMap<double> DoubleArcMap; 104 105 ///Create convenient 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 cetypedefs for the graph types and iterators122 typedef Graph::EdgeMap<double> DoubleEdgeMap; 123 124 ///Create convenient 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>), 1703 /// where<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>), where 1703 ///<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, 1821 /// where <em>d</em> is the number of outgoing arcs of \c s. Thenthe1820 ///Finding the first arc take <em>O</em>(log<em>d</em>) time, where 1821 ///<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
r313 r292 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 PredMap.54 55 ///This function instantiates a PredMap.53 ///Instantiates a \ref PredMap. 54 55 ///This function instantiates a \ref PredMap. 56 56 ///\param g is the digraph, to which we would like to define the 57 /// PredMap.57 ///\ref 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 ProcessedMap.69 70 ///This function instantiates a ProcessedMap.68 ///Instantiates a \ref ProcessedMap. 69 70 ///This function instantiates a \ref ProcessedMap. 71 71 ///\param g is the digraph, to which 72 ///we would like to define the ProcessedMap72 ///we would like to define the \ref 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 ReachedMap.88 89 ///This function instantiates a ReachedMap.87 ///Instantiates a \ref ReachedMap. 88 89 ///This function instantiates a \ref ReachedMap. 90 90 ///\param g is the digraph, to which 91 ///we would like to define the ReachedMap.91 ///we would like to define the \ref 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 DistMap.103 104 ///This function instantiates a DistMap.102 ///Instantiates a \ref DistMap. 103 104 ///This function instantiates a \ref DistMap. 105 105 ///\param g is the digraph, to which we would like to define the 106 /// DistMap.106 ///\ref 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 /// PredMap type.230 ///\ref PredMap type. 231 231 /// 232 232 ///\ref named-templ-param "Named parameter" for setting 233 /// PredMap type.233 ///\ref 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 /// DistMap type.249 ///\ref DistMap type. 250 250 /// 251 251 ///\ref named-templ-param "Named parameter" for setting 252 /// DistMap type.252 ///\ref 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 /// ReachedMap type.268 ///\ref ReachedMap type. 269 269 /// 270 270 ///\ref named-templ-param "Named parameter" for setting 271 /// ReachedMap type.271 ///\ref 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 /// ProcessedMap type.287 ///\ref ProcessedMap type. 288 288 /// 289 289 ///\ref named-templ-param "Named parameter" for setting 290 /// ProcessedMap type.290 ///\ref 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 /// ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>.304 ///\ref ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>. 305 305 /// 306 306 ///\ref named-templ-param "Named parameter" for setting 307 /// ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>.307 ///\ref 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 PredMap.772 773 ///This function instantiates a PredMap.771 ///Instantiates a \ref PredMap. 772 773 ///This function instantiates a \ref PredMap. 774 774 ///\param g is the digraph, to which we would like to define the 775 /// PredMap.775 ///\ref 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 ProcessedMap.788 789 ///This function instantiates a ProcessedMap.787 ///Instantiates a \ref ProcessedMap. 788 789 ///This function instantiates a \ref ProcessedMap. 790 790 ///\param g is the digraph, to which 791 ///we would like to define the ProcessedMap.791 ///we would like to define the \ref 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 ReachedMap.807 808 ///This function instantiates a ReachedMap.806 ///Instantiates a \ref ReachedMap. 807 808 ///This function instantiates a \ref ReachedMap. 809 809 ///\param g is the digraph, to which 810 ///we would like to define the ReachedMap.810 ///we would like to define the \ref 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 DistMap.822 823 ///This function instantiates a DistMap.821 ///Instantiates a \ref DistMap. 822 823 ///This function instantiates a \ref DistMap. 824 824 ///\param g is the digraph, to which we would like to define 825 ///the DistMap825 ///the \ref DistMap 826 826 static DistMap *createDistMap(const Digraph &g) 827 827 { … … 836 836 }; 837 837 838 /// Default traits class used by DfsWizard838 /// Default traits class used by \ref 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 PredMap object.1004 ///for setting \ref PredMap object. 1005 1005 /// 1006 1006 ///\ref named-func-param "Named parameter" 1007 ///for setting PredMap object.1007 ///for setting \ref 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 ReachedMap object.1022 ///for setting \ref ReachedMap object. 1023 1023 /// 1024 1024 /// \ref named-func-param "Named parameter" 1025 ///for setting ReachedMap object.1025 ///for setting \ref 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 DistMap object.1040 ///for setting \ref DistMap object. 1041 1041 /// 1042 1042 /// \ref named-func-param "Named parameter" 1043 ///for setting DistMap object.1043 ///for setting \ref 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 ProcessedMap object.1058 ///for setting \ref ProcessedMap object. 1059 1059 /// 1060 1060 /// \ref named-func-param "Named parameter" 1061 ///for setting ProcessedMap object.1061 ///for setting \ref 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 ReachedMap.1217 /// 1218 /// This function instantiates a ReachedMap.1216 /// \brief Instantiates a \ref ReachedMap. 1217 /// 1218 /// This function instantiates a \ref ReachedMap. 1219 1219 /// \param digraph is the digraph, to which 1220 /// we would like to define the ReachedMap.1220 /// we would like to define the \ref ReachedMap. 1221 1221 static ReachedMap *createReachedMap(const Digraph &digraph) { 1222 1222 return new ReachedMap(digraph); -
lemon/dijkstra.h
r313 r290 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 PredMap.143 144 ///This function instantiates a PredMap.142 ///Instantiates a \ref PredMap. 143 144 ///This function instantiates a \ref PredMap. 145 145 ///\param g is the digraph, to which we would like to define the 146 /// PredMap.146 ///\ref 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 ProcessedMap.159 160 ///This function instantiates a ProcessedMap.158 ///Instantiates a \ref ProcessedMap. 159 160 ///This function instantiates a \ref ProcessedMap. 161 161 ///\param g is the digraph, to which 162 ///we would like to define the ProcessedMap162 ///we would like to define the \ref 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 DistMap.178 179 ///This function instantiates a DistMap.177 ///Instantiates a \ref DistMap. 178 179 ///This function instantiates a \ref DistMap. 180 180 ///\param g is the digraph, to which we would like to define 181 ///the DistMap181 ///the \ref 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 /// PredMap type.330 ///\ref PredMap type. 331 331 /// 332 332 ///\ref named-templ-param "Named parameter" for setting 333 /// PredMap type.333 ///\ref 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 /// DistMap type.350 ///\ref DistMap type. 351 351 /// 352 352 ///\ref named-templ-param "Named parameter" for setting 353 /// DistMap type.353 ///\ref 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 /// ProcessedMap type.370 ///\ref ProcessedMap type. 371 371 /// 372 372 ///\ref named-templ-param "Named parameter" for setting 373 /// ProcessedMap type.373 ///\ref 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 /// ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>.388 ///\ref ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>. 389 389 /// 390 390 ///\ref named-templ-param "Named parameter" for setting 391 /// ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>.391 ///\ref 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 ///\ cOperationTraits type456 ///\ref 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 PredMap.990 991 ///This function instantiates a PredMap.989 ///Instantiates a \ref PredMap. 990 991 ///This function instantiates a \ref PredMap. 992 992 ///\param g is the digraph, to which we would like to define the 993 /// PredMap.993 ///\ref 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 ProcessedMap.1006 1007 ///This function instantiates a ProcessedMap.1005 ///Instantiates a \ref ProcessedMap. 1006 1007 ///This function instantiates a \ref ProcessedMap. 1008 1008 ///\param g is the digraph, to which 1009 ///we would like to define the ProcessedMap.1009 ///we would like to define the \ref 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 DistMap.1025 1026 ///This function instantiates a DistMap.1024 ///Instantiates a \ref DistMap. 1025 1026 ///This function instantiates a \ref DistMap. 1027 1027 ///\param g is the digraph, to which we would like to define 1028 ///the DistMap1028 ///the \ref DistMap 1029 1029 static DistMap *createDistMap(const Digraph &g) 1030 1030 { … … 1039 1039 }; 1040 1040 1041 /// Default traits class used by DijkstraWizard1041 /// Default traits class used by \ref 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 PredMap object.1201 ///for setting \ref PredMap object. 1202 1202 /// 1203 1203 ///\ref named-func-param "Named parameter" 1204 ///for setting PredMap object.1204 ///for setting \ref 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 DistMap object.1219 ///for setting \ref DistMap object. 1220 1220 /// 1221 1221 ///\ref named-func-param "Named parameter" 1222 ///for setting DistMap object.1222 ///for setting \ref 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 ProcessedMap object.1237 ///for setting \ref ProcessedMap object. 1238 1238 /// 1239 1239 /// \ref named-func-param "Named parameter" 1240 ///for setting ProcessedMap object.1240 ///for setting \ref ProcessedMap object. 1241 1241 template<class T> 1242 1242 DijkstraWizard<SetProcessedMapBase<T> > processedMap(const T &t) -
lemon/dim2.h
r314 r253 260 260 261 261 262 /// Bounding box of plain vectors ( points).262 /// Bounding box of plain vectors (\ref Point 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 <tt>Point</tt>-map 577 576 ///Map of x-coordinates of a \ref Point "Point"-map 577 578 ///\ingroup maps 578 579 ///Map of x-coordinates of a \ref Point "Point"-map. 579 580 /// … … 592 593 }; 593 594 594 ///Returns an XMap class 595 596 ///This function just returns an XMap class. 595 ///Returns an \ref XMap class 596 597 ///This function just returns an \ref XMap class. 598 /// 599 ///\ingroup maps 597 600 ///\relates XMap 598 601 template<class M> … … 608 611 } 609 612 610 ///Constant (read only) version of XMap 611 612 ///Constant (read only) version of XMap. 613 ///Constant (read only) version of \ref XMap 614 615 ///\ingroup maps 616 ///Constant (read only) version of \ref XMap 613 617 /// 614 618 template<class M> … … 625 629 }; 626 630 627 ///Returns a ConstXMap class 628 629 ///This function just returns a ConstXMap class. 631 ///Returns a \ref ConstXMap class 632 633 ///This function just returns a \ref ConstXMap class. 634 /// 635 ///\ingroup maps 630 636 ///\relates ConstXMap 631 637 template<class M> … … 635 641 } 636 642 637 ///Map of y-coordinates of a <tt>Point</tt>-map 638 643 ///Map of y-coordinates of a \ref Point "Point"-map 644 645 ///\ingroup maps 639 646 ///Map of y-coordinates of a \ref Point "Point"-map. 640 647 /// … … 653 660 }; 654 661 655 ///Returns a YMap class 656 657 ///This function just returns a YMap class. 662 ///Returns a \ref YMap class 663 664 ///This function just returns a \ref YMap class. 665 /// 666 ///\ingroup maps 658 667 ///\relates YMap 659 668 template<class M> … … 669 678 } 670 679 671 ///Constant (read only) version of YMap 672 673 ///Constant (read only) version of YMap. 680 ///Constant (read only) version of \ref YMap 681 682 ///\ingroup maps 683 ///Constant (read only) version of \ref YMap 674 684 /// 675 685 template<class M> … … 686 696 }; 687 697 688 ///Returns a ConstYMap class 689 690 ///This function just returns a ConstYMap class. 698 ///Returns a \ref ConstYMap class 699 700 ///This function just returns a \ref ConstYMap class. 701 /// 702 ///\ingroup maps 691 703 ///\relates ConstYMap 692 704 template<class M> … … 697 709 698 710 699 ///\brief Map of the normSquare() of a <tt>Point</tt>-map 711 ///\brief Map of the \ref Point::normSquare() "normSquare()" 712 ///of a \ref Point "Point"-map 700 713 /// 701 714 ///Map of the \ref Point::normSquare() "normSquare()" 702 715 ///of a \ref Point "Point"-map. 716 ///\ingroup maps 703 717 template<class M> 704 718 class NormSquareMap … … 714 728 }; 715 729 716 ///Returns a NormSquareMap class 717 718 ///This function just returns a NormSquareMap class. 730 ///Returns a \ref NormSquareMap class 731 732 ///This function just returns a \ref NormSquareMap class. 733 /// 734 ///\ingroup maps 719 735 ///\relates NormSquareMap 720 736 template<class M> -
lemon/graph_to_eps.h
r313 r291 63 63 } 64 64 65 ///Default traits class of GraphToEps65 ///Default traits class of \ref GraphToEps 66 66 67 67 ///Default traits class of \ref GraphToEps. -
lemon/lgf_reader.h
r303 r295 392 392 class DigraphReader; 393 393 394 /// \brief Return a \ref DigraphReader class395 ///396 /// This function just returns a \ref DigraphReader class.397 /// \relates DigraphReader398 394 template <typename Digraph> 399 395 DigraphReader<Digraph> digraphReader(Digraph& digraph, 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 396 std::istream& is = std::cin); 397 409 398 template <typename Digraph> 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 399 DigraphReader<Digraph> digraphReader(Digraph& digraph, const std::string& fn); 400 420 401 template <typename Digraph> 421 DigraphReader<Digraph> digraphReader(Digraph& digraph, const char* fn) { 422 DigraphReader<Digraph> tmp(digraph, fn); 423 return tmp; 424 } 402 DigraphReader<Digraph> digraphReader(Digraph& digraph, const char *fn); 425 403 426 404 /// \ingroup lemon_io … … 1212 1190 }; 1213 1191 1192 /// \brief Return a \ref DigraphReader class 1193 /// 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); 1200 return tmp; 1201 } 1202 1203 /// \brief Return a \ref DigraphReader class 1204 /// 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); 1211 return tmp; 1212 } 1213 1214 /// \brief Return a \ref DigraphReader class 1215 /// 1216 /// This function just returns a \ref DigraphReader class. 1217 /// \relates DigraphReader 1218 template <typename Digraph> 1219 DigraphReader<Digraph> digraphReader(Digraph& digraph, const char* fn) { 1220 DigraphReader<Digraph> tmp(digraph, fn); 1221 return tmp; 1222 } 1223 1214 1224 template <typename Graph> 1215 1225 class GraphReader; 1216 1226 1217 /// \brief Return a \ref GraphReader class1218 ///1219 /// This function just returns a \ref GraphReader class.1220 /// \relates GraphReader1221 1227 template <typename Graph> 1222 GraphReader<Graph> graphReader(Graph& graph, std::istream& is = std::cin) { 1223 GraphReader<Graph> tmp(graph, is); 1224 return tmp; 1225 } 1226 1227 /// \brief Return a \ref GraphReader class 1228 /// 1229 /// This function just returns a \ref GraphReader class. 1230 /// \relates GraphReader 1228 GraphReader<Graph> graphReader(Graph& graph, 1229 std::istream& is = std::cin); 1230 1231 1231 template <typename Graph> 1232 GraphReader<Graph> graphReader(Graph& graph, const std::string& fn) { 1233 GraphReader<Graph> tmp(graph, fn); 1234 return tmp; 1235 } 1236 1237 /// \brief Return a \ref GraphReader class 1238 /// 1239 /// This function just returns a \ref GraphReader class. 1240 /// \relates GraphReader 1232 GraphReader<Graph> graphReader(Graph& graph, const std::string& fn); 1233 1241 1234 template <typename Graph> 1242 GraphReader<Graph> graphReader(Graph& graph, const char* fn) { 1243 GraphReader<Graph> tmp(graph, fn); 1244 return tmp; 1245 } 1235 GraphReader<Graph> graphReader(Graph& graph, const char *fn); 1246 1236 1247 1237 /// \ingroup lemon_io … … 2041 2031 2042 2032 }; 2033 2034 /// \brief Return a \ref GraphReader class 2035 /// 2036 /// This function just returns a \ref GraphReader class. 2037 /// \relates GraphReader 2038 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 class 2045 /// 2046 /// This function just returns a \ref GraphReader class. 2047 /// \relates GraphReader 2048 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 class 2055 /// 2056 /// This function just returns a \ref GraphReader class. 2057 /// \relates GraphReader 2058 template <typename Graph> 2059 GraphReader<Graph> graphReader(Graph& graph, const char* fn) { 2060 GraphReader<Graph> tmp(graph, fn); 2061 return tmp; 2062 } 2043 2063 2044 2064 class SectionReader; -
lemon/lgf_writer.h
r303 r295 352 352 class DigraphWriter; 353 353 354 /// \brief Return a \ref DigraphWriter class355 ///356 /// This function just returns a \ref DigraphWriter class.357 /// \relates DigraphWriter358 354 template <typename Digraph> 359 355 DigraphWriter<Digraph> digraphWriter(const Digraph& digraph, 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 356 std::ostream& os = std::cout); 357 369 358 template <typename Digraph> 370 359 DigraphWriter<Digraph> digraphWriter(const Digraph& digraph, 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 360 const std::string& fn); 361 380 362 template <typename Digraph> 381 363 DigraphWriter<Digraph> digraphWriter(const Digraph& digraph, 382 const char* fn) { 383 DigraphWriter<Digraph> tmp(digraph, fn); 384 return tmp; 385 } 364 const char *fn); 386 365 387 366 /// \ingroup lemon_io … … 935 914 }; 936 915 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); 924 return tmp; 925 } 926 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); 935 return tmp; 936 } 937 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); 946 return tmp; 947 } 948 937 949 template <typename Graph> 938 950 class GraphWriter; 939 951 940 /// \brief Return a \ref GraphWriter class941 ///942 /// This function just returns a \ref GraphWriter class.943 /// \relates GraphWriter944 952 template <typename Graph> 945 953 GraphWriter<Graph> graphWriter(const Graph& graph, 946 std::ostream& os = std::cout) { 947 GraphWriter<Graph> tmp(graph, os); 948 return tmp; 949 } 950 951 /// \brief Return a \ref GraphWriter class 952 /// 953 /// This function just returns a \ref GraphWriter class. 954 /// \relates GraphWriter 954 std::ostream& os = std::cout); 955 955 956 template <typename Graph> 956 GraphWriter<Graph> graphWriter(const Graph& graph, const std::string& fn) { 957 GraphWriter<Graph> tmp(graph, fn); 958 return tmp; 959 } 960 961 /// \brief Return a \ref GraphWriter class 962 /// 963 /// This function just returns a \ref GraphWriter class. 964 /// \relates GraphWriter 957 GraphWriter<Graph> graphWriter(const Graph& graph, const std::string& fn); 958 965 959 template <typename Graph> 966 GraphWriter<Graph> graphWriter(const Graph& graph, const char* fn) { 967 GraphWriter<Graph> tmp(graph, fn); 968 return tmp; 969 } 960 GraphWriter<Graph> graphWriter(const Graph& graph, const char *fn); 970 961 971 962 /// \ingroup lemon_io … … 1535 1526 /// @} 1536 1527 }; 1528 1529 /// \brief Return a \ref GraphWriter class 1530 /// 1531 /// This function just returns a \ref GraphWriter class. 1532 /// \relates GraphWriter 1533 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 class 1541 /// 1542 /// This function just returns a \ref GraphWriter class. 1543 /// \relates GraphWriter 1544 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 class 1551 /// 1552 /// This function just returns a \ref GraphWriter class. 1553 /// \relates GraphWriter 1554 template <typename Graph> 1555 GraphWriter<Graph> graphWriter(const Graph& graph, const char* fn) { 1556 GraphWriter<Graph> tmp(graph, fn); 1557 return tmp; 1558 } 1537 1559 1538 1560 class SectionWriter; -
lemon/list_graph.h
r313 r280 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
r314 r280 44 44 class MapBase { 45 45 public: 46 /// \b rief The key type of the map.46 /// \biref 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 \ cNullMap class77 78 /// This function just returns a \ cNullMap class.76 /// Returns a \ref NullMap class 77 78 /// This function just returns a \ref 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 \ cNullMap.91 /// In other aspects it is equivalent to \ref 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 \ cConstMap class137 138 /// This function just returns a \ cConstMap class.136 /// Returns a \ref ConstMap class 137 138 /// This function just returns a \ref 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 \ cNullMap.159 /// In other aspects it is equivalent to \ref 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 \ cConstMap class with inlined constant value186 187 /// This function just returns a \ cConstMap class with inlined185 /// Returns a \ref ConstMap class with inlined constant value 186 187 /// This function just returns a \ref ConstMap class with inlined 188 188 /// constant value. 189 189 /// \relates ConstMap … … 213 213 }; 214 214 215 /// Returns an \ cIdentityMap class216 217 /// This function just returns an \ cIdentityMap class.215 /// Returns an \ref IdentityMap class 216 217 /// This function just returns an \ref 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 /// \ c UnionFind, \cBinHeap, when the used items are small231 /// \ref UnionFind, \ref 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 \ cRangeMap.271 /// Constructs the map from another \ref RangeMap. 272 272 template <typename V1> 273 273 RangeMap(const RangeMap<V1> &c) … … 312 312 }; 313 313 314 /// Returns a \ cRangeMap class315 316 /// This function just returns a \ cRangeMap class.314 /// Returns a \ref RangeMap class 315 316 /// This function just returns a \ref RangeMap class. 317 317 /// \relates RangeMap 318 318 template<typename V> … … 321 321 } 322 322 323 /// \brief Returns a \ cRangeMap class created from an appropriate323 /// \brief Returns a \ref RangeMap class created from an appropriate 324 324 /// \c std::vector 325 325 326 /// This function just returns a \ cRangeMap class created from an326 /// This function just returns a \ref 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 \ cSparseMap.391 /// \brief Constructs the map from another \ref SparseMap. 392 392 template<typename V1, typename Comp1> 393 393 SparseMap(const SparseMap<Key, V1, Comp1> &c) … … 434 434 }; 435 435 436 /// Returns a \ cSparseMap class437 438 /// This function just returns a \ cSparseMap class with specified436 /// Returns a \ref SparseMap class 437 438 /// This function just returns a \ref SparseMap class with specified 439 439 /// default value. 440 440 /// \relates SparseMap … … 449 449 } 450 450 451 /// \brief Returns a \ cSparseMap class created from an appropriate451 /// \brief Returns a \ref SparseMap class created from an appropriate 452 452 /// \c std::map 453 453 454 /// This function just returns a \ cSparseMap class created from an454 /// This function just returns a \ref SparseMap class created from an 455 455 /// appropriate \c std::map. 456 456 /// \relates SparseMap … … 502 502 }; 503 503 504 /// Returns a \ cComposeMap class505 506 /// This function just returns a \ cComposeMap class.504 /// Returns a \ref ComposeMap class 505 506 /// This function just returns a \ref 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 \ cCombineMap class560 561 /// This function just returns a \ cCombineMap class.559 /// Returns a \ref CombineMap class 560 561 /// This function just returns a \ref 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 \ cFunctorToMap class629 630 /// This function just returns a \ cFunctorToMap class.628 /// Returns a \ref FunctorToMap class 629 630 /// This function just returns a \ref FunctorToMap class. 631 631 /// 632 632 /// This function is specialized for adaptable binary function … … 685 685 }; 686 686 687 /// Returns a \ cMapToFunctor class688 689 /// This function just returns a \ cMapToFunctor class.687 /// Returns a \ref MapToFunctor class 688 689 /// This function just returns a \ref MapToFunctor class. 690 690 /// \relates MapToFunctor 691 691 template<typename M> … … 724 724 }; 725 725 726 /// Returns a \ cConvertMap class727 728 /// This function just returns a \ cConvertMap class.726 /// Returns a \ref ConvertMap class 727 728 /// This function just returns a \ref ConvertMap class. 729 729 /// \relates ConvertMap 730 730 template<typename V, typename M> … … 764 764 }; 765 765 766 /// Returns a \ cForkMap class767 768 /// This function just returns a \ cForkMap class.766 /// Returns a \ref ForkMap class 767 768 /// This function just returns a \ref ForkMap class. 769 769 /// \relates ForkMap 770 770 template <typename M1, typename M2> … … 808 808 }; 809 809 810 /// Returns an \ cAddMap class811 812 /// This function just returns an \ cAddMap class.810 /// Returns an \ref AddMap class 811 812 /// This function just returns an \ref 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 \ cSubMap class859 860 /// This function just returns a \ cSubMap class.858 /// Returns a \ref SubMap class 859 860 /// This function just returns a \ref 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 \ cMulMap class908 909 /// This function just returns a \ cMulMap class.907 /// Returns a \ref MulMap class 908 909 /// This function just returns a \ref 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 \ cDivMap class956 957 /// This function just returns a \ cDivMap class.955 /// Returns a \ref DivMap class 956 957 /// This function just returns a \ref 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 \ cShiftMap class1042 1043 /// This function just returns a \ cShiftMap class.1041 /// Returns a \ref ShiftMap class 1042 1043 /// This function just returns a \ref 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 \ cShiftWriteMap class1056 1057 /// This function just returns a \ cShiftWriteMap class.1055 /// Returns a \ref ShiftWriteMap class 1056 1057 /// This function just returns a \ref 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 \ cScaleMap class1144 1145 /// This function just returns a \ cScaleMap class.1143 /// Returns a \ref ScaleMap class 1144 1145 /// This function just returns a \ref 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 \ cScaleWriteMap class1158 1159 /// This function just returns a \ cScaleWriteMap class.1157 /// Returns a \ref ScaleWriteMap class 1158 1159 /// This function just returns a \ref 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 \ cNegMap class1244 1245 /// This function just returns a \ cNegMap class.1243 /// Returns a \ref NegMap class 1244 1245 /// This function just returns a \ref 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 \ cNegWriteMap class1257 1258 /// This function just returns a \ cNegWriteMap class.1256 /// Returns a \ref NegWriteMap class 1257 1258 /// This function just returns a \ref 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 \ cAbsMap class1300 1301 /// This function just returns an \ cAbsMap class.1299 /// Returns an \ref AbsMap class 1300 1301 /// This function just returns an \ref 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 \ cTrueMap class1349 1350 /// This function just returns a \ cTrueMap class.1348 /// Returns a \ref TrueMap class 1349 1350 /// This function just returns a \ref TrueMap class. 1351 1351 /// \relates TrueMap 1352 1352 template<typename K> … … 1383 1383 }; 1384 1384 1385 /// Returns a \ cFalseMap class1386 1387 /// This function just returns a \ cFalseMap class.1385 /// Returns a \ref FalseMap class 1386 1387 /// This function just returns a \ref FalseMap class. 1388 1388 /// \relates FalseMap 1389 1389 template<typename K> … … 1430 1430 }; 1431 1431 1432 /// Returns an \ cAndMap class1433 1434 /// This function just returns an \ cAndMap class.1432 /// Returns an \ref AndMap class 1433 1434 /// This function just returns an \ref 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 \ cOrMap class1481 1482 /// This function just returns an \ cOrMap class.1480 /// Returns an \ref OrMap class 1481 1482 /// This function just returns an \ref 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 \ cNotMap class1548 1549 /// This function just returns a \ cNotMap class.1547 /// Returns a \ref NotMap class 1548 1549 /// This function just returns a \ref 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 \ cNotWriteMap class1561 1562 /// This function just returns a \ cNotWriteMap class.1560 /// Returns a \ref NotWriteMap class 1561 1562 /// This function just returns a \ref 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 \ cEqualMap class1609 1610 /// This function just returns an \ cEqualMap class.1608 /// Returns an \ref EqualMap class 1609 1610 /// This function just returns an \ref 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 \ cLessMap class1657 1658 /// This function just returns an \ cLessMap class.1656 /// Returns an \ref LessMap class 1657 1658 /// This function just returns an \ref 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 maps1689 /// @{1690 1685 1691 1686 /// \brief Writable bool map for logging each \c true assigned element … … 1751 1746 }; 1752 1747 1753 /// Returns a \ cLoggerBoolMap class1754 1755 /// This function just returns a \ cLoggerBoolMap class.1748 /// Returns a \ref LoggerBoolMap class 1749 1750 /// This function just returns a \ref LoggerBoolMap class. 1756 1751 /// 1757 1752 /// The most important usage of it is storing certain nodes or arcs … … 1773 1768 /// \note LoggerBoolMap is just \ref concepts::WriteMap "writable", so 1774 1769 /// it cannot be used when a readable map is needed, for example as 1775 /// \c ReachedMap for \ c Bfs, \c Dfs and \cDijkstra algorithms.1770 /// \c ReachedMap for \ref Bfs, \ref Dfs and \ref Dijkstra algorithms. 1776 1771 /// 1777 1772 /// \relates LoggerBoolMap … … 1780 1775 return LoggerBoolMap<Iterator>(it); 1781 1776 } 1782 1783 /// @}1784 1785 /// \addtogroup graph_maps1786 /// @{1787 1777 1788 1778 /// Provides an immutable and unique id for each item in the graph. … … 1892 1882 /// The value type of the InvertableMap. 1893 1883 typedef typename Map::Value Value; 1884 1885 1894 1886 1895 1887 /// \brief Constructor. … … 2058 2050 } 2059 2051 2052 2053 2060 2054 }; 2061 2055 … … 2273 2267 /// 2274 2268 /// Constructor 2275 /// \param digraph The digraph that the map belongs to.2269 /// \param _digraph The digraph that the map belongs to. 2276 2270 explicit SourceMap(const Digraph& digraph) : _digraph(digraph) {} 2277 2271 … … 2289 2283 }; 2290 2284 2291 /// \brief Returns a \ cSourceMap class.2292 /// 2293 /// This function just returns an \ cSourceMap class.2285 /// \brief Returns a \ref SourceMap class. 2286 /// 2287 /// This function just returns an \ref SourceMap class. 2294 2288 /// \relates SourceMap 2295 2289 template <typename Digraph> … … 2312 2306 /// 2313 2307 /// Constructor 2314 /// \param digraph The digraph that the map belongs to.2308 /// \param _digraph The digraph that the map belongs to. 2315 2309 explicit TargetMap(const Digraph& digraph) : _digraph(digraph) {} 2316 2310 … … 2328 2322 }; 2329 2323 2330 /// \brief Returns a \ cTargetMap class.2331 /// 2332 /// This function just returns a \ cTargetMap class.2324 /// \brief Returns a \ref TargetMap class. 2325 /// 2326 /// This function just returns a \ref TargetMap class. 2333 2327 /// \relates TargetMap 2334 2328 template <typename Digraph> … … 2351 2345 /// 2352 2346 /// Constructor 2353 /// \param graph The graph that the map belongs to.2347 /// \param _graph The graph that the map belongs to. 2354 2348 explicit ForwardMap(const Graph& graph) : _graph(graph) {} 2355 2349 … … 2367 2361 }; 2368 2362 2369 /// \brief Returns a \ cForwardMap class.2370 /// 2371 /// This function just returns an \ cForwardMap class.2363 /// \brief Returns a \ref ForwardMap class. 2364 /// 2365 /// This function just returns an \ref ForwardMap class. 2372 2366 /// \relates ForwardMap 2373 2367 template <typename Graph> … … 2390 2384 /// 2391 2385 /// Constructor 2392 /// \param graph The graph that the map belongs to.2386 /// \param _graph The graph that the map belongs to. 2393 2387 explicit BackwardMap(const Graph& graph) : _graph(graph) {} 2394 2388 … … 2406 2400 }; 2407 2401 2408 /// \brief Returns a \ cBackwardMap class2409 2410 /// This function just returns a \ cBackwardMap class.2402 /// \brief Returns a \ref BackwardMap class 2403 2404 /// This function just returns a \ref BackwardMap class. 2411 2405 /// \relates BackwardMap 2412 2406 template <typename Graph> -
lemon/path.h
r313 r236 850 850 int empty() const { return len == 0; } 851 851 852 /// \br iefErase all arcs in the digraph.852 /// \break Erase all arcs in the digraph. 853 853 void clear() { 854 854 len = 0; -
lemon/smart_graph.h
r313 r280 366 366 367 367 ///This constructor immediately makes a snapshot of the digraph. 368 ///\param graphThe digraph we make a snapshot of.368 ///\param _g 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 graphThe digraph we make the snapshot of.380 ///\param _g 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 raphThe digraph we make a snapshot of.778 ///\param g 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 raphThe digraph we make the snapshot of.789 ///\param g The digraph we make the snapshot of. 790 790 void save(SmartGraph &graph) 791 791 { -
lemon/time_measure.h
r314 r280 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 lemon::Timer "Timer" also counts the number of315 /// \ref lemon::Timer::start() "start()" executions, and it stops316 /// only after the same amount (or more) \ref lemon::Timer::stop()317 /// "stop()"s. This can be useful e.g. to computethe running time314 ///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 compute 317 ///the running time 318 318 ///of recursive functions. 319 /// 319 320 320 321 ///@{ … … 472 473 }; 473 474 474 ///Same as Timer but prints a report on destruction.475 ///Same as \ref Timer but prints a report on destruction. 475 476 476 477 ///Same as \ref Timer but prints a report on destruction. … … 491 492 std::ostream &_os; 492 493 public: 493 ///Constructor 494 495 ///Constructor. 494 ///\e 495 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 499 500 TimeReport(std::string title,std::ostream &os=std::cerr,bool run=true) 500 501 : Timer(run), _title(title), _os(os){} 501 /// Destructor that prints the ellapsed time502 ///\e Prints the ellapsed time on destruction. 502 503 ~TimeReport() 503 504 { … … 506 507 }; 507 508 508 ///'Do nothing' version of TimeReport509 ///'Do nothing' version of \ref TimeReport 509 510 510 511 ///\sa TimeReport -
tools/Makefile.am
r310 r146 2 2 3 3 bin_PROGRAMS += 4 dist_bin_SCRIPTS += tools/lemon-0.x-to-1.x.sh5 4 6 5 endif WANT_TOOLS
Note: See TracChangeset
for help on using the changeset viewer.