1.1 --- a/doc/groups.dox Thu Mar 05 10:13:20 2009 +0000
1.2 +++ b/doc/groups.dox Sun Mar 29 23:08:20 2009 +0200
1.3 @@ -20,7 +20,7 @@
1.4
1.5 /**
1.6 @defgroup datas Data Structures
1.7 -This group describes the several data structures implemented in LEMON.
1.8 +This group contains the several data structures implemented in LEMON.
1.9 */
1.10
1.11 /**
1.12 @@ -142,7 +142,7 @@
1.13 @ingroup graphs
1.14 \brief Graph types between real graphs and graph adaptors.
1.15
1.16 -This group describes some graph types between real graphs and graph adaptors.
1.17 +This group contains some graph types between real graphs and graph adaptors.
1.18 These classes wrap graphs to give new functionality as the adaptors do it.
1.19 On the other hand they are not light-weight structures as the adaptors.
1.20 */
1.21 @@ -152,7 +152,7 @@
1.22 @ingroup datas
1.23 \brief Map structures implemented in LEMON.
1.24
1.25 -This group describes the map structures implemented in LEMON.
1.26 +This group contains the map structures implemented in LEMON.
1.27
1.28 LEMON provides several special purpose maps and map adaptors that e.g. combine
1.29 new maps from existing ones.
1.30 @@ -165,7 +165,7 @@
1.31 @ingroup maps
1.32 \brief Special graph-related maps.
1.33
1.34 -This group describes maps that are specifically designed to assign
1.35 +This group contains maps that are specifically designed to assign
1.36 values to the nodes and arcs/edges of graphs.
1.37
1.38 If you are looking for the standard graph maps (\c NodeMap, \c ArcMap,
1.39 @@ -177,7 +177,7 @@
1.40 \ingroup maps
1.41 \brief Tools to create new maps from existing ones
1.42
1.43 -This group describes map adaptors that are used to create "implicit"
1.44 +This group contains map adaptors that are used to create "implicit"
1.45 maps from other maps.
1.46
1.47 Most of them are \ref concepts::ReadMap "read-only maps".
1.48 @@ -240,7 +240,7 @@
1.49 @ingroup datas
1.50 \brief Two dimensional data storages implemented in LEMON.
1.51
1.52 -This group describes two dimensional data storages implemented in LEMON.
1.53 +This group contains two dimensional data storages implemented in LEMON.
1.54 */
1.55
1.56 /**
1.57 @@ -248,7 +248,7 @@
1.58 @ingroup datas
1.59 \brief %Path structures implemented in LEMON.
1.60
1.61 -This group describes the path structures implemented in LEMON.
1.62 +This group contains the path structures implemented in LEMON.
1.63
1.64 LEMON provides flexible data structures to work with paths.
1.65 All of them have similar interfaces and they can be copied easily with
1.66 @@ -264,16 +264,16 @@
1.67 @ingroup datas
1.68 \brief Auxiliary data structures implemented in LEMON.
1.69
1.70 -This group describes some data structures implemented in LEMON in
1.71 +This group contains some data structures implemented in LEMON in
1.72 order to make it easier to implement combinatorial algorithms.
1.73 */
1.74
1.75 /**
1.76 @defgroup algs Algorithms
1.77 -\brief This group describes the several algorithms
1.78 +\brief This group contains the several algorithms
1.79 implemented in LEMON.
1.80
1.81 -This group describes the several algorithms
1.82 +This group contains the several algorithms
1.83 implemented in LEMON.
1.84 */
1.85
1.86 @@ -282,7 +282,7 @@
1.87 @ingroup algs
1.88 \brief Common graph search algorithms.
1.89
1.90 -This group describes the common graph search algorithms, namely
1.91 +This group contains the common graph search algorithms, namely
1.92 \e breadth-first \e search (BFS) and \e depth-first \e search (DFS).
1.93 */
1.94
1.95 @@ -291,7 +291,7 @@
1.96 @ingroup algs
1.97 \brief Algorithms for finding shortest paths.
1.98
1.99 -This group describes the algorithms for finding shortest paths in digraphs.
1.100 +This group contains the algorithms for finding shortest paths in digraphs.
1.101
1.102 - \ref Dijkstra algorithm for finding shortest paths from a source node
1.103 when all arc lengths are non-negative.
1.104 @@ -312,7 +312,7 @@
1.105 @ingroup algs
1.106 \brief Algorithms for finding maximum flows.
1.107
1.108 -This group describes the algorithms for finding maximum flows and
1.109 +This group contains the algorithms for finding maximum flows and
1.110 feasible circulations.
1.111
1.112 The \e maximum \e flow \e problem is to find a flow of maximum value between
1.113 @@ -345,7 +345,7 @@
1.114
1.115 \brief Algorithms for finding minimum cost flows and circulations.
1.116
1.117 -This group describes the algorithms for finding minimum cost flows and
1.118 +This group contains the algorithms for finding minimum cost flows and
1.119 circulations.
1.120
1.121 The \e minimum \e cost \e flow \e problem is to find a feasible flow of
1.122 @@ -382,7 +382,7 @@
1.123
1.124 \brief Algorithms for finding minimum cut in graphs.
1.125
1.126 -This group describes the algorithms for finding minimum cut in graphs.
1.127 +This group contains the algorithms for finding minimum cut in graphs.
1.128
1.129 The \e minimum \e cut \e problem is to find a non-empty and non-complete
1.130 \f$X\f$ subset of the nodes with minimum overall capacity on
1.131 @@ -399,7 +399,7 @@
1.132 in directed graphs.
1.133 - \ref NagamochiIbaraki "Nagamochi-Ibaraki algorithm" for
1.134 calculating minimum cut in undirected graphs.
1.135 -- \ref GomoryHuTree "Gomory-Hu tree computation" for calculating
1.136 +- \ref GomoryHu "Gomory-Hu tree computation" for calculating
1.137 all-pairs minimum cut in undirected graphs.
1.138
1.139 If you want to find minimum cut just between two distinict nodes,
1.140 @@ -411,7 +411,7 @@
1.141 @ingroup algs
1.142 \brief Algorithms for discovering the graph properties
1.143
1.144 -This group describes the algorithms for discovering the graph properties
1.145 +This group contains the algorithms for discovering the graph properties
1.146 like connectivity, bipartiteness, euler property, simplicity etc.
1.147
1.148 \image html edge_biconnected_components.png
1.149 @@ -423,7 +423,7 @@
1.150 @ingroup algs
1.151 \brief Algorithms for planarity checking, embedding and drawing
1.152
1.153 -This group describes the algorithms for planarity checking,
1.154 +This group contains the algorithms for planarity checking,
1.155 embedding and drawing.
1.156
1.157 \image html planar.png
1.158 @@ -474,7 +474,7 @@
1.159 @ingroup algs
1.160 \brief Algorithms for finding a minimum cost spanning tree in a graph.
1.161
1.162 -This group describes the algorithms for finding a minimum cost spanning
1.163 +This group contains the algorithms for finding a minimum cost spanning
1.164 tree in a graph.
1.165 */
1.166
1.167 @@ -483,7 +483,7 @@
1.168 @ingroup algs
1.169 \brief Auxiliary algorithms implemented in LEMON.
1.170
1.171 -This group describes some algorithms implemented in LEMON
1.172 +This group contains some algorithms implemented in LEMON
1.173 in order to make it easier to implement complex algorithms.
1.174 */
1.175
1.176 @@ -492,16 +492,16 @@
1.177 @ingroup algs
1.178 \brief Approximation algorithms.
1.179
1.180 -This group describes the approximation and heuristic algorithms
1.181 +This group contains the approximation and heuristic algorithms
1.182 implemented in LEMON.
1.183 */
1.184
1.185 /**
1.186 @defgroup gen_opt_group General Optimization Tools
1.187 -\brief This group describes some general optimization frameworks
1.188 +\brief This group contains some general optimization frameworks
1.189 implemented in LEMON.
1.190
1.191 -This group describes some general optimization frameworks
1.192 +This group contains some general optimization frameworks
1.193 implemented in LEMON.
1.194 */
1.195
1.196 @@ -510,7 +510,7 @@
1.197 @ingroup gen_opt_group
1.198 \brief Lp and Mip solver interfaces for LEMON.
1.199
1.200 -This group describes Lp and Mip solver interfaces for LEMON. The
1.201 +This group contains Lp and Mip solver interfaces for LEMON. The
1.202 various LP solvers could be used in the same manner with this
1.203 interface.
1.204 */
1.205 @@ -529,7 +529,7 @@
1.206 @ingroup gen_opt_group
1.207 \brief Metaheuristics for LEMON library.
1.208
1.209 -This group describes some metaheuristic optimization tools.
1.210 +This group contains some metaheuristic optimization tools.
1.211 */
1.212
1.213 /**
1.214 @@ -544,7 +544,7 @@
1.215 @ingroup utils
1.216 \brief Simple basic graph utilities.
1.217
1.218 -This group describes some simple basic graph utilities.
1.219 +This group contains some simple basic graph utilities.
1.220 */
1.221
1.222 /**
1.223 @@ -552,7 +552,7 @@
1.224 @ingroup utils
1.225 \brief Tools for development, debugging and testing.
1.226
1.227 -This group describes several useful tools for development,
1.228 +This group contains several useful tools for development,
1.229 debugging and testing.
1.230 */
1.231
1.232 @@ -561,7 +561,7 @@
1.233 @ingroup misc
1.234 \brief Simple tools for measuring the performance of algorithms.
1.235
1.236 -This group describes simple tools for measuring the performance
1.237 +This group contains simple tools for measuring the performance
1.238 of algorithms.
1.239 */
1.240
1.241 @@ -570,14 +570,14 @@
1.242 @ingroup utils
1.243 \brief Exceptions defined in LEMON.
1.244
1.245 -This group describes the exceptions defined in LEMON.
1.246 +This group contains the exceptions defined in LEMON.
1.247 */
1.248
1.249 /**
1.250 @defgroup io_group Input-Output
1.251 \brief Graph Input-Output methods
1.252
1.253 -This group describes the tools for importing and exporting graphs
1.254 +This group contains the tools for importing and exporting graphs
1.255 and graph related data. Now it supports the \ref lgf-format
1.256 "LEMON Graph Format", the \c DIMACS format and the encapsulated
1.257 postscript (EPS) format.
1.258 @@ -588,7 +588,7 @@
1.259 @ingroup io_group
1.260 \brief Reading and writing LEMON Graph Format.
1.261
1.262 -This group describes methods for reading and writing
1.263 +This group contains methods for reading and writing
1.264 \ref lgf-format "LEMON Graph Format".
1.265 */
1.266
1.267 @@ -597,7 +597,7 @@
1.268 @ingroup io_group
1.269 \brief General \c EPS drawer and graph exporter
1.270
1.271 -This group describes general \c EPS drawing methods and special
1.272 +This group contains general \c EPS drawing methods and special
1.273 graph exporting tools.
1.274 */
1.275
1.276 @@ -621,7 +621,7 @@
1.277 @defgroup concept Concepts
1.278 \brief Skeleton classes and concept checking classes
1.279
1.280 -This group describes the data/algorithm skeletons and concept checking
1.281 +This group contains the data/algorithm skeletons and concept checking
1.282 classes implemented in LEMON.
1.283
1.284 The purpose of the classes in this group is fourfold.
1.285 @@ -651,7 +651,7 @@
1.286 @ingroup concept
1.287 \brief Skeleton and concept checking classes for graph structures
1.288
1.289 -This group describes the skeletons and concept checking classes of LEMON's
1.290 +This group contains the skeletons and concept checking classes of LEMON's
1.291 graph structures and helper classes used to implement these.
1.292 */
1.293
1.294 @@ -660,7 +660,7 @@
1.295 @ingroup concept
1.296 \brief Skeleton and concept checking classes for maps
1.297
1.298 -This group describes the skeletons and concept checking classes of maps.
1.299 +This group contains the skeletons and concept checking classes of maps.
1.300 */
1.301
1.302 /**
2.1 --- a/doc/mainpage.dox Thu Mar 05 10:13:20 2009 +0000
2.2 +++ b/doc/mainpage.dox Sun Mar 29 23:08:20 2009 +0200
2.3 @@ -45,16 +45,11 @@
2.4 take a look at our \ref quicktour
2.5 "Quick Tour to LEMON" which will guide you along.
2.6
2.7 -If you already feel like using our library, see the page that tells you
2.8 -\ref getstart "How to start using LEMON".
2.9 -
2.10 -If you
2.11 -want to see how LEMON works, see
2.12 -some \ref demoprograms "demo programs".
2.13 +If you already feel like using our library, see the
2.14 +<a class="el" href="http://lemon.cs.elte.hu/pub/tutorial/">LEMON Tutorial</a>.
2.15
2.16 If you know what you are looking for then try to find it under the
2.17 -<a class="el" href="modules.html">Modules</a>
2.18 -section.
2.19 +<a class="el" href="modules.html">Modules</a> section.
2.20
2.21 If you are a user of the old (0.x) series of LEMON, please check out the
2.22 \ref migration "Migration Guide" for the backward incompatibilities.
3.1 --- a/lemon/adaptors.h Thu Mar 05 10:13:20 2009 +0000
3.2 +++ b/lemon/adaptors.h Sun Mar 29 23:08:20 2009 +0200
3.3 @@ -2254,26 +2254,27 @@
3.4 ///
3.5 /// This map adaptor class adapts two arc maps of the underlying
3.6 /// digraph to get an arc map of the undirected graph.
3.7 - /// Its value type is inherited from the first arc map type
3.8 - /// (\c %ForwardMap).
3.9 - template <typename ForwardMap, typename BackwardMap>
3.10 + /// Its value type is inherited from the first arc map type (\c FW).
3.11 + /// \tparam FW The type of the "foward" arc map.
3.12 + /// \tparam BK The type of the "backward" arc map.
3.13 + template <typename FW, typename BK>
3.14 class CombinedArcMap {
3.15 public:
3.16
3.17 /// The key type of the map
3.18 typedef typename Parent::Arc Key;
3.19 /// The value type of the map
3.20 - typedef typename ForwardMap::Value Value;
3.21 -
3.22 - typedef typename MapTraits<ForwardMap>::ReferenceMapTag ReferenceMapTag;
3.23 -
3.24 - typedef typename MapTraits<ForwardMap>::ReturnValue ReturnValue;
3.25 - typedef typename MapTraits<ForwardMap>::ConstReturnValue ConstReturnValue;
3.26 - typedef typename MapTraits<ForwardMap>::ReturnValue Reference;
3.27 - typedef typename MapTraits<ForwardMap>::ConstReturnValue ConstReference;
3.28 + typedef typename FW::Value Value;
3.29 +
3.30 + typedef typename MapTraits<FW>::ReferenceMapTag ReferenceMapTag;
3.31 +
3.32 + typedef typename MapTraits<FW>::ReturnValue ReturnValue;
3.33 + typedef typename MapTraits<FW>::ConstReturnValue ConstReturnValue;
3.34 + typedef typename MapTraits<FW>::ReturnValue Reference;
3.35 + typedef typename MapTraits<FW>::ConstReturnValue ConstReference;
3.36
3.37 /// Constructor
3.38 - CombinedArcMap(ForwardMap& forward, BackwardMap& backward)
3.39 + CombinedArcMap(FW& forward, BK& backward)
3.40 : _forward(&forward), _backward(&backward) {}
3.41
3.42 /// Sets the value associated with the given key.
3.43 @@ -2305,39 +2306,36 @@
3.44
3.45 protected:
3.46
3.47 - ForwardMap* _forward;
3.48 - BackwardMap* _backward;
3.49 + FW* _forward;
3.50 + BK* _backward;
3.51
3.52 };
3.53
3.54 /// \brief Returns a combined arc map
3.55 ///
3.56 /// This function just returns a combined arc map.
3.57 - template <typename ForwardMap, typename BackwardMap>
3.58 - static CombinedArcMap<ForwardMap, BackwardMap>
3.59 - combinedArcMap(ForwardMap& forward, BackwardMap& backward) {
3.60 - return CombinedArcMap<ForwardMap, BackwardMap>(forward, backward);
3.61 + template <typename FW, typename BK>
3.62 + static CombinedArcMap<FW, BK>
3.63 + combinedArcMap(FW& forward, BK& backward) {
3.64 + return CombinedArcMap<FW, BK>(forward, backward);
3.65 }
3.66
3.67 - template <typename ForwardMap, typename BackwardMap>
3.68 - static CombinedArcMap<const ForwardMap, BackwardMap>
3.69 - combinedArcMap(const ForwardMap& forward, BackwardMap& backward) {
3.70 - return CombinedArcMap<const ForwardMap,
3.71 - BackwardMap>(forward, backward);
3.72 + template <typename FW, typename BK>
3.73 + static CombinedArcMap<const FW, BK>
3.74 + combinedArcMap(const FW& forward, BK& backward) {
3.75 + return CombinedArcMap<const FW, BK>(forward, backward);
3.76 }
3.77
3.78 - template <typename ForwardMap, typename BackwardMap>
3.79 - static CombinedArcMap<ForwardMap, const BackwardMap>
3.80 - combinedArcMap(ForwardMap& forward, const BackwardMap& backward) {
3.81 - return CombinedArcMap<ForwardMap,
3.82 - const BackwardMap>(forward, backward);
3.83 + template <typename FW, typename BK>
3.84 + static CombinedArcMap<FW, const BK>
3.85 + combinedArcMap(FW& forward, const BK& backward) {
3.86 + return CombinedArcMap<FW, const BK>(forward, backward);
3.87 }
3.88
3.89 - template <typename ForwardMap, typename BackwardMap>
3.90 - static CombinedArcMap<const ForwardMap, const BackwardMap>
3.91 - combinedArcMap(const ForwardMap& forward, const BackwardMap& backward) {
3.92 - return CombinedArcMap<const ForwardMap,
3.93 - const BackwardMap>(forward, backward);
3.94 + template <typename FW, typename BK>
3.95 + static CombinedArcMap<const FW, const BK>
3.96 + combinedArcMap(const FW& forward, const BK& backward) {
3.97 + return CombinedArcMap<const FW, const BK>(forward, backward);
3.98 }
3.99
3.100 };
3.101 @@ -3406,25 +3404,26 @@
3.102 ///
3.103 /// This map adaptor class adapts two node maps of the original digraph
3.104 /// to get a node map of the split digraph.
3.105 - /// Its value type is inherited from the first node map type
3.106 - /// (\c InNodeMap).
3.107 - template <typename InNodeMap, typename OutNodeMap>
3.108 + /// Its value type is inherited from the first node map type (\c IN).
3.109 + /// \tparam IN The type of the node map for the in-nodes.
3.110 + /// \tparam OUT The type of the node map for the out-nodes.
3.111 + template <typename IN, typename OUT>
3.112 class CombinedNodeMap {
3.113 public:
3.114
3.115 /// The key type of the map
3.116 typedef Node Key;
3.117 /// The value type of the map
3.118 - typedef typename InNodeMap::Value Value;
3.119 -
3.120 - typedef typename MapTraits<InNodeMap>::ReferenceMapTag ReferenceMapTag;
3.121 - typedef typename MapTraits<InNodeMap>::ReturnValue ReturnValue;
3.122 - typedef typename MapTraits<InNodeMap>::ConstReturnValue ConstReturnValue;
3.123 - typedef typename MapTraits<InNodeMap>::ReturnValue Reference;
3.124 - typedef typename MapTraits<InNodeMap>::ConstReturnValue ConstReference;
3.125 + typedef typename IN::Value Value;
3.126 +
3.127 + typedef typename MapTraits<IN>::ReferenceMapTag ReferenceMapTag;
3.128 + typedef typename MapTraits<IN>::ReturnValue ReturnValue;
3.129 + typedef typename MapTraits<IN>::ConstReturnValue ConstReturnValue;
3.130 + typedef typename MapTraits<IN>::ReturnValue Reference;
3.131 + typedef typename MapTraits<IN>::ConstReturnValue ConstReference;
3.132
3.133 /// Constructor
3.134 - CombinedNodeMap(InNodeMap& in_map, OutNodeMap& out_map)
3.135 + CombinedNodeMap(IN& in_map, OUT& out_map)
3.136 : _in_map(in_map), _out_map(out_map) {}
3.137
3.138 /// Returns the value associated with the given key.
3.139 @@ -3456,8 +3455,8 @@
3.140
3.141 private:
3.142
3.143 - InNodeMap& _in_map;
3.144 - OutNodeMap& _out_map;
3.145 + IN& _in_map;
3.146 + OUT& _out_map;
3.147
3.148 };
3.149
3.150 @@ -3465,29 +3464,28 @@
3.151 /// \brief Returns a combined node map
3.152 ///
3.153 /// This function just returns a combined node map.
3.154 - template <typename InNodeMap, typename OutNodeMap>
3.155 - static CombinedNodeMap<InNodeMap, OutNodeMap>
3.156 - combinedNodeMap(InNodeMap& in_map, OutNodeMap& out_map) {
3.157 - return CombinedNodeMap<InNodeMap, OutNodeMap>(in_map, out_map);
3.158 + template <typename IN, typename OUT>
3.159 + static CombinedNodeMap<IN, OUT>
3.160 + combinedNodeMap(IN& in_map, OUT& out_map) {
3.161 + return CombinedNodeMap<IN, OUT>(in_map, out_map);
3.162 }
3.163
3.164 - template <typename InNodeMap, typename OutNodeMap>
3.165 - static CombinedNodeMap<const InNodeMap, OutNodeMap>
3.166 - combinedNodeMap(const InNodeMap& in_map, OutNodeMap& out_map) {
3.167 - return CombinedNodeMap<const InNodeMap, OutNodeMap>(in_map, out_map);
3.168 + template <typename IN, typename OUT>
3.169 + static CombinedNodeMap<const IN, OUT>
3.170 + combinedNodeMap(const IN& in_map, OUT& out_map) {
3.171 + return CombinedNodeMap<const IN, OUT>(in_map, out_map);
3.172 }
3.173
3.174 - template <typename InNodeMap, typename OutNodeMap>
3.175 - static CombinedNodeMap<InNodeMap, const OutNodeMap>
3.176 - combinedNodeMap(InNodeMap& in_map, const OutNodeMap& out_map) {
3.177 - return CombinedNodeMap<InNodeMap, const OutNodeMap>(in_map, out_map);
3.178 + template <typename IN, typename OUT>
3.179 + static CombinedNodeMap<IN, const OUT>
3.180 + combinedNodeMap(IN& in_map, const OUT& out_map) {
3.181 + return CombinedNodeMap<IN, const OUT>(in_map, out_map);
3.182 }
3.183
3.184 - template <typename InNodeMap, typename OutNodeMap>
3.185 - static CombinedNodeMap<const InNodeMap, const OutNodeMap>
3.186 - combinedNodeMap(const InNodeMap& in_map, const OutNodeMap& out_map) {
3.187 - return CombinedNodeMap<const InNodeMap,
3.188 - const OutNodeMap>(in_map, out_map);
3.189 + template <typename IN, typename OUT>
3.190 + static CombinedNodeMap<const IN, const OUT>
3.191 + combinedNodeMap(const IN& in_map, const OUT& out_map) {
3.192 + return CombinedNodeMap<const IN, const OUT>(in_map, out_map);
3.193 }
3.194
3.195 /// \brief Arc map combined from an arc map and a node map of the
3.196 @@ -3495,25 +3493,26 @@
3.197 ///
3.198 /// This map adaptor class adapts an arc map and a node map of the
3.199 /// original digraph to get an arc map of the split digraph.
3.200 - /// Its value type is inherited from the original arc map type
3.201 - /// (\c ArcMap).
3.202 - template <typename ArcMap, typename NodeMap>
3.203 + /// Its value type is inherited from the original arc map type (\c AM).
3.204 + /// \tparam AM The type of the arc map.
3.205 + /// \tparam NM the type of the node map.
3.206 + template <typename AM, typename NM>
3.207 class CombinedArcMap {
3.208 public:
3.209
3.210 /// The key type of the map
3.211 typedef Arc Key;
3.212 /// The value type of the map
3.213 - typedef typename ArcMap::Value Value;
3.214 -
3.215 - typedef typename MapTraits<ArcMap>::ReferenceMapTag ReferenceMapTag;
3.216 - typedef typename MapTraits<ArcMap>::ReturnValue ReturnValue;
3.217 - typedef typename MapTraits<ArcMap>::ConstReturnValue ConstReturnValue;
3.218 - typedef typename MapTraits<ArcMap>::ReturnValue Reference;
3.219 - typedef typename MapTraits<ArcMap>::ConstReturnValue ConstReference;
3.220 + typedef typename AM::Value Value;
3.221 +
3.222 + typedef typename MapTraits<AM>::ReferenceMapTag ReferenceMapTag;
3.223 + typedef typename MapTraits<AM>::ReturnValue ReturnValue;
3.224 + typedef typename MapTraits<AM>::ConstReturnValue ConstReturnValue;
3.225 + typedef typename MapTraits<AM>::ReturnValue Reference;
3.226 + typedef typename MapTraits<AM>::ConstReturnValue ConstReference;
3.227
3.228 /// Constructor
3.229 - CombinedArcMap(ArcMap& arc_map, NodeMap& node_map)
3.230 + CombinedArcMap(AM& arc_map, NM& node_map)
3.231 : _arc_map(arc_map), _node_map(node_map) {}
3.232
3.233 /// Returns the value associated with the given key.
3.234 @@ -3544,8 +3543,10 @@
3.235 }
3.236
3.237 private:
3.238 - ArcMap& _arc_map;
3.239 - NodeMap& _node_map;
3.240 +
3.241 + AM& _arc_map;
3.242 + NM& _node_map;
3.243 +
3.244 };
3.245
3.246 /// \brief Returns a combined arc map
4.1 --- a/lemon/bin_heap.h Thu Mar 05 10:13:20 2009 +0000
4.2 +++ b/lemon/bin_heap.h Sun Mar 29 23:08:20 2009 +0200
4.3 @@ -33,35 +33,36 @@
4.4 ///
4.5 ///\brief A Binary Heap implementation.
4.6 ///
4.7 - ///This class implements the \e binary \e heap data structure. A \e heap
4.8 - ///is a data structure for storing items with specified values called \e
4.9 - ///priorities in such a way that finding the item with minimum priority is
4.10 - ///efficient. \c Compare specifies the ordering of the priorities. In a heap
4.11 - ///one can change the priority of an item, add or erase an item, etc.
4.12 + ///This class implements the \e binary \e heap data structure.
4.13 + ///
4.14 + ///A \e heap is a data structure for storing items with specified values
4.15 + ///called \e priorities in such a way that finding the item with minimum
4.16 + ///priority is efficient. \c Comp specifies the ordering of the priorities.
4.17 + ///In a heap one can change the priority of an item, add or erase an
4.18 + ///item, etc.
4.19 ///
4.20 - ///\tparam _Prio Type of the priority of the items.
4.21 - ///\tparam _ItemIntMap A read and writable Item int map, used internally
4.22 + ///\tparam PR Type of the priority of the items.
4.23 + ///\tparam IM A read and writable item map with int values, used internally
4.24 ///to handle the cross references.
4.25 - ///\tparam _Compare A class for the ordering of the priorities. The
4.26 - ///default is \c std::less<_Prio>.
4.27 + ///\tparam Comp A functor class for the ordering of the priorities.
4.28 + ///The default is \c std::less<PR>.
4.29 ///
4.30 ///\sa FibHeap
4.31 ///\sa Dijkstra
4.32 - template <typename _Prio, typename _ItemIntMap,
4.33 - typename _Compare = std::less<_Prio> >
4.34 + template <typename PR, typename IM, typename Comp = std::less<PR> >
4.35 class BinHeap {
4.36
4.37 public:
4.38 ///\e
4.39 - typedef _ItemIntMap ItemIntMap;
4.40 + typedef IM ItemIntMap;
4.41 ///\e
4.42 - typedef _Prio Prio;
4.43 + typedef PR Prio;
4.44 ///\e
4.45 typedef typename ItemIntMap::Key Item;
4.46 ///\e
4.47 typedef std::pair<Item,Prio> Pair;
4.48 ///\e
4.49 - typedef _Compare Compare;
4.50 + typedef Comp Compare;
4.51
4.52 /// \brief Type to represent the items states.
4.53 ///
4.54 @@ -69,49 +70,49 @@
4.55 /// "pre heap" or "post heap". The latter two are indifferent from the
4.56 /// heap's point of view, but may be useful to the user.
4.57 ///
4.58 - /// The ItemIntMap \e should be initialized in such way that it maps
4.59 - /// PRE_HEAP (-1) to any element to be put in the heap...
4.60 + /// The item-int map must be initialized in such way that it assigns
4.61 + /// \c PRE_HEAP (<tt>-1</tt>) to any element to be put in the heap.
4.62 enum State {
4.63 - IN_HEAP = 0,
4.64 - PRE_HEAP = -1,
4.65 - POST_HEAP = -2
4.66 + IN_HEAP = 0, ///< \e
4.67 + PRE_HEAP = -1, ///< \e
4.68 + POST_HEAP = -2 ///< \e
4.69 };
4.70
4.71 private:
4.72 - std::vector<Pair> data;
4.73 - Compare comp;
4.74 - ItemIntMap &iim;
4.75 + std::vector<Pair> _data;
4.76 + Compare _comp;
4.77 + ItemIntMap &_iim;
4.78
4.79 public:
4.80 /// \brief The constructor.
4.81 ///
4.82 /// The constructor.
4.83 - /// \param _iim should be given to the constructor, since it is used
4.84 + /// \param map should be given to the constructor, since it is used
4.85 /// internally to handle the cross references. The value of the map
4.86 - /// should be PRE_HEAP (-1) for each element.
4.87 - explicit BinHeap(ItemIntMap &_iim) : iim(_iim) {}
4.88 + /// must be \c PRE_HEAP (<tt>-1</tt>) for every item.
4.89 + explicit BinHeap(ItemIntMap &map) : _iim(map) {}
4.90
4.91 /// \brief The constructor.
4.92 ///
4.93 /// The constructor.
4.94 - /// \param _iim should be given to the constructor, since it is used
4.95 + /// \param map should be given to the constructor, since it is used
4.96 /// internally to handle the cross references. The value of the map
4.97 /// should be PRE_HEAP (-1) for each element.
4.98 ///
4.99 - /// \param _comp The comparator function object.
4.100 - BinHeap(ItemIntMap &_iim, const Compare &_comp)
4.101 - : iim(_iim), comp(_comp) {}
4.102 + /// \param comp The comparator function object.
4.103 + BinHeap(ItemIntMap &map, const Compare &comp)
4.104 + : _iim(map), _comp(comp) {}
4.105
4.106
4.107 /// The number of items stored in the heap.
4.108 ///
4.109 /// \brief Returns the number of items stored in the heap.
4.110 - int size() const { return data.size(); }
4.111 + int size() const { return _data.size(); }
4.112
4.113 /// \brief Checks if the heap stores no items.
4.114 ///
4.115 /// Returns \c true if and only if the heap stores no items.
4.116 - bool empty() const { return data.empty(); }
4.117 + bool empty() const { return _data.empty(); }
4.118
4.119 /// \brief Make empty this heap.
4.120 ///
4.121 @@ -120,7 +121,7 @@
4.122 /// the heap and after that you should set the cross reference map for
4.123 /// each item to \c PRE_HEAP.
4.124 void clear() {
4.125 - data.clear();
4.126 + _data.clear();
4.127 }
4.128
4.129 private:
4.130 @@ -128,13 +129,13 @@
4.131
4.132 static int second_child(int i) { return 2*i+2; }
4.133 bool less(const Pair &p1, const Pair &p2) const {
4.134 - return comp(p1.second, p2.second);
4.135 + return _comp(p1.second, p2.second);
4.136 }
4.137
4.138 int bubble_up(int hole, Pair p) {
4.139 int par = parent(hole);
4.140 - while( hole>0 && less(p,data[par]) ) {
4.141 - move(data[par],hole);
4.142 + while( hole>0 && less(p,_data[par]) ) {
4.143 + move(_data[par],hole);
4.144 hole = par;
4.145 par = parent(hole);
4.146 }
4.147 @@ -145,18 +146,18 @@
4.148 int bubble_down(int hole, Pair p, int length) {
4.149 int child = second_child(hole);
4.150 while(child < length) {
4.151 - if( less(data[child-1], data[child]) ) {
4.152 + if( less(_data[child-1], _data[child]) ) {
4.153 --child;
4.154 }
4.155 - if( !less(data[child], p) )
4.156 + if( !less(_data[child], p) )
4.157 goto ok;
4.158 - move(data[child], hole);
4.159 + move(_data[child], hole);
4.160 hole = child;
4.161 child = second_child(hole);
4.162 }
4.163 child--;
4.164 - if( child<length && less(data[child], p) ) {
4.165 - move(data[child], hole);
4.166 + if( child<length && less(_data[child], p) ) {
4.167 + move(_data[child], hole);
4.168 hole=child;
4.169 }
4.170 ok:
4.171 @@ -165,8 +166,8 @@
4.172 }
4.173
4.174 void move(const Pair &p, int i) {
4.175 - data[i] = p;
4.176 - iim.set(p.first, i);
4.177 + _data[i] = p;
4.178 + _iim.set(p.first, i);
4.179 }
4.180
4.181 public:
4.182 @@ -175,8 +176,8 @@
4.183 /// Adds \c p.first to the heap with priority \c p.second.
4.184 /// \param p The pair to insert.
4.185 void push(const Pair &p) {
4.186 - int n = data.size();
4.187 - data.resize(n+1);
4.188 + int n = _data.size();
4.189 + _data.resize(n+1);
4.190 bubble_up(n, p);
4.191 }
4.192
4.193 @@ -193,7 +194,7 @@
4.194 /// Compare.
4.195 /// \pre The heap must be nonempty.
4.196 Item top() const {
4.197 - return data[0].first;
4.198 + return _data[0].first;
4.199 }
4.200
4.201 /// \brief Returns the minimum priority relative to \c Compare.
4.202 @@ -201,7 +202,7 @@
4.203 /// It returns the minimum priority relative to \c Compare.
4.204 /// \pre The heap must be nonempty.
4.205 Prio prio() const {
4.206 - return data[0].second;
4.207 + return _data[0].second;
4.208 }
4.209
4.210 /// \brief Deletes the item with minimum priority relative to \c Compare.
4.211 @@ -210,12 +211,12 @@
4.212 /// Compare from the heap.
4.213 /// \pre The heap must be non-empty.
4.214 void pop() {
4.215 - int n = data.size()-1;
4.216 - iim.set(data[0].first, POST_HEAP);
4.217 + int n = _data.size()-1;
4.218 + _iim.set(_data[0].first, POST_HEAP);
4.219 if (n > 0) {
4.220 - bubble_down(0, data[n], n);
4.221 + bubble_down(0, _data[n], n);
4.222 }
4.223 - data.pop_back();
4.224 + _data.pop_back();
4.225 }
4.226
4.227 /// \brief Deletes \c i from the heap.
4.228 @@ -224,26 +225,26 @@
4.229 /// \param i The item to erase.
4.230 /// \pre The item should be in the heap.
4.231 void erase(const Item &i) {
4.232 - int h = iim[i];
4.233 - int n = data.size()-1;
4.234 - iim.set(data[h].first, POST_HEAP);
4.235 + int h = _iim[i];
4.236 + int n = _data.size()-1;
4.237 + _iim.set(_data[h].first, POST_HEAP);
4.238 if( h < n ) {
4.239 - if ( bubble_up(h, data[n]) == h) {
4.240 - bubble_down(h, data[n], n);
4.241 + if ( bubble_up(h, _data[n]) == h) {
4.242 + bubble_down(h, _data[n], n);
4.243 }
4.244 }
4.245 - data.pop_back();
4.246 + _data.pop_back();
4.247 }
4.248
4.249
4.250 /// \brief Returns the priority of \c i.
4.251 ///
4.252 /// This function returns the priority of item \c i.
4.253 + /// \param i The item.
4.254 /// \pre \c i must be in the heap.
4.255 - /// \param i The item.
4.256 Prio operator[](const Item &i) const {
4.257 - int idx = iim[i];
4.258 - return data[idx].second;
4.259 + int idx = _iim[i];
4.260 + return _data[idx].second;
4.261 }
4.262
4.263 /// \brief \c i gets to the heap with priority \c p independently
4.264 @@ -254,40 +255,40 @@
4.265 /// \param i The item.
4.266 /// \param p The priority.
4.267 void set(const Item &i, const Prio &p) {
4.268 - int idx = iim[i];
4.269 + int idx = _iim[i];
4.270 if( idx < 0 ) {
4.271 push(i,p);
4.272 }
4.273 - else if( comp(p, data[idx].second) ) {
4.274 + else if( _comp(p, _data[idx].second) ) {
4.275 bubble_up(idx, Pair(i,p));
4.276 }
4.277 else {
4.278 - bubble_down(idx, Pair(i,p), data.size());
4.279 + bubble_down(idx, Pair(i,p), _data.size());
4.280 }
4.281 }
4.282
4.283 /// \brief Decreases the priority of \c i to \c p.
4.284 ///
4.285 /// This method decreases the priority of item \c i to \c p.
4.286 + /// \param i The item.
4.287 + /// \param p The priority.
4.288 /// \pre \c i must be stored in the heap with priority at least \c
4.289 /// p relative to \c Compare.
4.290 - /// \param i The item.
4.291 - /// \param p The priority.
4.292 void decrease(const Item &i, const Prio &p) {
4.293 - int idx = iim[i];
4.294 + int idx = _iim[i];
4.295 bubble_up(idx, Pair(i,p));
4.296 }
4.297
4.298 /// \brief Increases the priority of \c i to \c p.
4.299 ///
4.300 /// This method sets the priority of item \c i to \c p.
4.301 + /// \param i The item.
4.302 + /// \param p The priority.
4.303 /// \pre \c i must be stored in the heap with priority at most \c
4.304 /// p relative to \c Compare.
4.305 - /// \param i The item.
4.306 - /// \param p The priority.
4.307 void increase(const Item &i, const Prio &p) {
4.308 - int idx = iim[i];
4.309 - bubble_down(idx, Pair(i,p), data.size());
4.310 + int idx = _iim[i];
4.311 + bubble_down(idx, Pair(i,p), _data.size());
4.312 }
4.313
4.314 /// \brief Returns if \c item is in, has already been in, or has
4.315 @@ -299,7 +300,7 @@
4.316 /// get back to the heap again.
4.317 /// \param i The item.
4.318 State state(const Item &i) const {
4.319 - int s = iim[i];
4.320 + int s = _iim[i];
4.321 if( s>=0 )
4.322 s=0;
4.323 return State(s);
4.324 @@ -319,7 +320,7 @@
4.325 if (state(i) == IN_HEAP) {
4.326 erase(i);
4.327 }
4.328 - iim[i] = st;
4.329 + _iim[i] = st;
4.330 break;
4.331 case IN_HEAP:
4.332 break;
4.333 @@ -333,10 +334,10 @@
4.334 /// \c i item will out of the heap and \c j will be in the heap
4.335 /// with the same prioriority as prevoiusly the \c i item.
4.336 void replace(const Item& i, const Item& j) {
4.337 - int idx = iim[i];
4.338 - iim.set(i, iim[j]);
4.339 - iim.set(j, idx);
4.340 - data[idx].first = j;
4.341 + int idx = _iim[i];
4.342 + _iim.set(i, _iim[j]);
4.343 + _iim.set(j, idx);
4.344 + _data[idx].first = j;
4.345 }
4.346
4.347 }; // class BinHeap
5.1 --- a/lemon/bits/edge_set_extender.h Thu Mar 05 10:13:20 2009 +0000
5.2 +++ b/lemon/bits/edge_set_extender.h Sun Mar 29 23:08:20 2009 +0200
5.3 @@ -24,14 +24,14 @@
5.4 #include <lemon/bits/default_map.h>
5.5 #include <lemon/bits/map_extender.h>
5.6
5.7 -///\ingroup digraphbits
5.8 -///\file
5.9 -///\brief Extenders for the arc set types
5.10 +//\ingroup digraphbits
5.11 +//\file
5.12 +//\brief Extenders for the arc set types
5.13 namespace lemon {
5.14
5.15 - /// \ingroup digraphbits
5.16 - ///
5.17 - /// \brief Extender for the ArcSets
5.18 + // \ingroup digraphbits
5.19 + //
5.20 + // \brief Extender for the ArcSets
5.21 template <typename Base>
5.22 class ArcSetExtender : public Base {
5.23 public:
5.24 @@ -72,7 +72,7 @@
5.25
5.26 // Alteration notifier extensions
5.27
5.28 - /// The arc observer registry.
5.29 + // The arc observer registry.
5.30 typedef AlterationNotifier<ArcSetExtender, Arc> ArcNotifier;
5.31
5.32 protected:
5.33 @@ -83,9 +83,7 @@
5.34
5.35 using Parent::notifier;
5.36
5.37 - /// \brief Gives back the arc alteration notifier.
5.38 - ///
5.39 - /// Gives back the arc alteration notifier.
5.40 + // Gives back the arc alteration notifier.
5.41 ArcNotifier& notifier(Arc) const {
5.42 return arc_notifier;
5.43 }
5.44 @@ -185,30 +183,30 @@
5.45
5.46 };
5.47
5.48 - /// \brief Base node of the iterator
5.49 - ///
5.50 - /// Returns the base node (ie. the source in this case) of the iterator
5.51 + // \brief Base node of the iterator
5.52 + //
5.53 + // Returns the base node (ie. the source in this case) of the iterator
5.54 Node baseNode(const OutArcIt &e) const {
5.55 return Parent::source(static_cast<const Arc&>(e));
5.56 }
5.57 - /// \brief Running node of the iterator
5.58 - ///
5.59 - /// Returns the running node (ie. the target in this case) of the
5.60 - /// iterator
5.61 + // \brief Running node of the iterator
5.62 + //
5.63 + // Returns the running node (ie. the target in this case) of the
5.64 + // iterator
5.65 Node runningNode(const OutArcIt &e) const {
5.66 return Parent::target(static_cast<const Arc&>(e));
5.67 }
5.68
5.69 - /// \brief Base node of the iterator
5.70 - ///
5.71 - /// Returns the base node (ie. the target in this case) of the iterator
5.72 + // \brief Base node of the iterator
5.73 + //
5.74 + // Returns the base node (ie. the target in this case) of the iterator
5.75 Node baseNode(const InArcIt &e) const {
5.76 return Parent::target(static_cast<const Arc&>(e));
5.77 }
5.78 - /// \brief Running node of the iterator
5.79 - ///
5.80 - /// Returns the running node (ie. the source in this case) of the
5.81 - /// iterator
5.82 + // \brief Running node of the iterator
5.83 + //
5.84 + // Returns the running node (ie. the source in this case) of the
5.85 + // iterator
5.86 Node runningNode(const InArcIt &e) const {
5.87 return Parent::source(static_cast<const Arc&>(e));
5.88 }
5.89 @@ -271,9 +269,9 @@
5.90 };
5.91
5.92
5.93 - /// \ingroup digraphbits
5.94 - ///
5.95 - /// \brief Extender for the EdgeSets
5.96 + // \ingroup digraphbits
5.97 + //
5.98 + // \brief Extender for the EdgeSets
5.99 template <typename Base>
5.100 class EdgeSetExtender : public Base {
5.101
5.102 @@ -492,43 +490,43 @@
5.103 }
5.104 };
5.105
5.106 - /// \brief Base node of the iterator
5.107 - ///
5.108 - /// Returns the base node (ie. the source in this case) of the iterator
5.109 + // \brief Base node of the iterator
5.110 + //
5.111 + // Returns the base node (ie. the source in this case) of the iterator
5.112 Node baseNode(const OutArcIt &e) const {
5.113 return Parent::source(static_cast<const Arc&>(e));
5.114 }
5.115 - /// \brief Running node of the iterator
5.116 - ///
5.117 - /// Returns the running node (ie. the target in this case) of the
5.118 - /// iterator
5.119 + // \brief Running node of the iterator
5.120 + //
5.121 + // Returns the running node (ie. the target in this case) of the
5.122 + // iterator
5.123 Node runningNode(const OutArcIt &e) const {
5.124 return Parent::target(static_cast<const Arc&>(e));
5.125 }
5.126
5.127 - /// \brief Base node of the iterator
5.128 - ///
5.129 - /// Returns the base node (ie. the target in this case) of the iterator
5.130 + // \brief Base node of the iterator
5.131 + //
5.132 + // Returns the base node (ie. the target in this case) of the iterator
5.133 Node baseNode(const InArcIt &e) const {
5.134 return Parent::target(static_cast<const Arc&>(e));
5.135 }
5.136 - /// \brief Running node of the iterator
5.137 - ///
5.138 - /// Returns the running node (ie. the source in this case) of the
5.139 - /// iterator
5.140 + // \brief Running node of the iterator
5.141 + //
5.142 + // Returns the running node (ie. the source in this case) of the
5.143 + // iterator
5.144 Node runningNode(const InArcIt &e) const {
5.145 return Parent::source(static_cast<const Arc&>(e));
5.146 }
5.147
5.148 - /// Base node of the iterator
5.149 - ///
5.150 - /// Returns the base node of the iterator
5.151 + // Base node of the iterator
5.152 + //
5.153 + // Returns the base node of the iterator
5.154 Node baseNode(const IncEdgeIt &e) const {
5.155 return e.direction ? u(e) : v(e);
5.156 }
5.157 - /// Running node of the iterator
5.158 - ///
5.159 - /// Returns the running node of the iterator
5.160 + // Running node of the iterator
5.161 + //
5.162 + // Returns the running node of the iterator
5.163 Node runningNode(const IncEdgeIt &e) const {
5.164 return e.direction ? v(e) : u(e);
5.165 }
6.1 --- a/lemon/circulation.h Thu Mar 05 10:13:20 2009 +0000
6.2 +++ b/lemon/circulation.h Sun Mar 29 23:08:20 2009 +0200
6.3 @@ -215,9 +215,9 @@
6.4
6.5 ///@{
6.6
6.7 - template <typename _FlowMap>
6.8 + template <typename T>
6.9 struct SetFlowMapTraits : public Traits {
6.10 - typedef _FlowMap FlowMap;
6.11 + typedef T FlowMap;
6.12 static FlowMap *createFlowMap(const Digraph&) {
6.13 LEMON_ASSERT(false, "FlowMap is not initialized");
6.14 return 0; // ignore warnings
6.15 @@ -229,17 +229,17 @@
6.16 ///
6.17 /// \ref named-templ-param "Named parameter" for setting FlowMap
6.18 /// type.
6.19 - template <typename _FlowMap>
6.20 + template <typename T>
6.21 struct SetFlowMap
6.22 : public Circulation<Digraph, LCapMap, UCapMap, DeltaMap,
6.23 - SetFlowMapTraits<_FlowMap> > {
6.24 + SetFlowMapTraits<T> > {
6.25 typedef Circulation<Digraph, LCapMap, UCapMap, DeltaMap,
6.26 - SetFlowMapTraits<_FlowMap> > Create;
6.27 + SetFlowMapTraits<T> > Create;
6.28 };
6.29
6.30 - template <typename _Elevator>
6.31 + template <typename T>
6.32 struct SetElevatorTraits : public Traits {
6.33 - typedef _Elevator Elevator;
6.34 + typedef T Elevator;
6.35 static Elevator *createElevator(const Digraph&, int) {
6.36 LEMON_ASSERT(false, "Elevator is not initialized");
6.37 return 0; // ignore warnings
6.38 @@ -255,17 +255,17 @@
6.39 /// \ref elevator(Elevator&) "elevator()" function before calling
6.40 /// \ref run() or \ref init().
6.41 /// \sa SetStandardElevator
6.42 - template <typename _Elevator>
6.43 + template <typename T>
6.44 struct SetElevator
6.45 : public Circulation<Digraph, LCapMap, UCapMap, DeltaMap,
6.46 - SetElevatorTraits<_Elevator> > {
6.47 + SetElevatorTraits<T> > {
6.48 typedef Circulation<Digraph, LCapMap, UCapMap, DeltaMap,
6.49 - SetElevatorTraits<_Elevator> > Create;
6.50 + SetElevatorTraits<T> > Create;
6.51 };
6.52
6.53 - template <typename _Elevator>
6.54 + template <typename T>
6.55 struct SetStandardElevatorTraits : public Traits {
6.56 - typedef _Elevator Elevator;
6.57 + typedef T Elevator;
6.58 static Elevator *createElevator(const Digraph& digraph, int max_level) {
6.59 return new Elevator(digraph, max_level);
6.60 }
6.61 @@ -283,12 +283,12 @@
6.62 /// algorithm with the \ref elevator(Elevator&) "elevator()" function
6.63 /// before calling \ref run() or \ref init().
6.64 /// \sa SetElevator
6.65 - template <typename _Elevator>
6.66 + template <typename T>
6.67 struct SetStandardElevator
6.68 : public Circulation<Digraph, LCapMap, UCapMap, DeltaMap,
6.69 - SetStandardElevatorTraits<_Elevator> > {
6.70 + SetStandardElevatorTraits<T> > {
6.71 typedef Circulation<Digraph, LCapMap, UCapMap, DeltaMap,
6.72 - SetStandardElevatorTraits<_Elevator> > Create;
6.73 + SetStandardElevatorTraits<T> > Create;
6.74 };
6.75
6.76 /// @}
6.77 @@ -682,7 +682,7 @@
6.78 /// empty set, so \c bar[v] will be \c false for all nodes \c v.
6.79 ///
6.80 /// \note This function calls \ref barrier() for each node,
6.81 - /// so it runs in \f$O(n)\f$ time.
6.82 + /// so it runs in O(n) time.
6.83 ///
6.84 /// \pre Either \ref run() or \ref init() must be called before
6.85 /// using this function.
7.1 --- a/lemon/concepts/graph.h Thu Mar 05 10:13:20 2009 +0000
7.2 +++ b/lemon/concepts/graph.h Sun Mar 29 23:08:20 2009 +0200
7.3 @@ -601,23 +601,35 @@
7.4
7.5 /// \brief Opposite node on an arc
7.6 ///
7.7 - /// \return the opposite of the given Node on the given Edge
7.8 + /// \return The opposite of the given node on the given edge.
7.9 Node oppositeNode(Node, Edge) const { return INVALID; }
7.10
7.11 /// \brief First node of the edge.
7.12 ///
7.13 - /// \return the first node of the given Edge.
7.14 + /// \return The first node of the given edge.
7.15 ///
7.16 /// Naturally edges don't have direction and thus
7.17 - /// don't have source and target node. But we use these two methods
7.18 - /// to query the two nodes of the arc. The direction of the arc
7.19 - /// which arises this way is called the inherent direction of the
7.20 + /// don't have source and target node. However we use \c u() and \c v()
7.21 + /// methods to query the two nodes of the arc. The direction of the
7.22 + /// arc which arises this way is called the inherent direction of the
7.23 /// edge, and is used to define the "default" direction
7.24 /// of the directed versions of the arcs.
7.25 - /// \sa direction
7.26 + /// \sa v()
7.27 + /// \sa direction()
7.28 Node u(Edge) const { return INVALID; }
7.29
7.30 /// \brief Second node of the edge.
7.31 + ///
7.32 + /// \return The second node of the given edge.
7.33 + ///
7.34 + /// Naturally edges don't have direction and thus
7.35 + /// don't have source and target node. However we use \c u() and \c v()
7.36 + /// methods to query the two nodes of the arc. The direction of the
7.37 + /// arc which arises this way is called the inherent direction of the
7.38 + /// edge, and is used to define the "default" direction
7.39 + /// of the directed versions of the arcs.
7.40 + /// \sa u()
7.41 + /// \sa direction()
7.42 Node v(Edge) const { return INVALID; }
7.43
7.44 /// \brief Source node of the directed arc.
8.1 --- a/lemon/concepts/graph_components.h Thu Mar 05 10:13:20 2009 +0000
8.2 +++ b/lemon/concepts/graph_components.h Sun Mar 29 23:08:20 2009 +0200
8.3 @@ -20,7 +20,6 @@
8.4 ///\file
8.5 ///\brief The concept of graph components.
8.6
8.7 -
8.8 #ifndef LEMON_CONCEPTS_GRAPH_COMPONENTS_H
8.9 #define LEMON_CONCEPTS_GRAPH_COMPONENTS_H
8.10
8.11 @@ -44,7 +43,7 @@
8.12 /// with 'a'.
8.13
8.14 #ifndef DOXYGEN
8.15 - template <char _selector = '0'>
8.16 + template <char sel = '0'>
8.17 #endif
8.18 class GraphItem {
8.19 public:
8.20 @@ -296,11 +295,11 @@
8.21 /// core id functions for the digraph structure.
8.22 /// The most of the base digraphs should conform to this concept.
8.23 /// The id's are unique and immutable.
8.24 - template <typename _Base = BaseDigraphComponent>
8.25 - class IDableDigraphComponent : public _Base {
8.26 + template <typename BAS = BaseDigraphComponent>
8.27 + class IDableDigraphComponent : public BAS {
8.28 public:
8.29
8.30 - typedef _Base Base;
8.31 + typedef BAS Base;
8.32 typedef typename Base::Node Node;
8.33 typedef typename Base::Arc Arc;
8.34
8.35 @@ -374,14 +373,14 @@
8.36 /// core id functions for the undirected graph structure. The
8.37 /// most of the base undirected graphs should conform to this
8.38 /// concept. The id's are unique and immutable.
8.39 - template <typename _Base = BaseGraphComponent>
8.40 - class IDableGraphComponent : public IDableDigraphComponent<_Base> {
8.41 + template <typename BAS = BaseGraphComponent>
8.42 + class IDableGraphComponent : public IDableDigraphComponent<BAS> {
8.43 public:
8.44
8.45 - typedef _Base Base;
8.46 + typedef BAS Base;
8.47 typedef typename Base::Edge Edge;
8.48
8.49 - using IDableDigraphComponent<_Base>::id;
8.50 + using IDableDigraphComponent<Base>::id;
8.51
8.52 /// \brief Gives back an unique integer id for the Edge.
8.53 ///
8.54 @@ -425,8 +424,8 @@
8.55 ///
8.56 /// Skeleton class for graph NodeIt and ArcIt.
8.57 ///
8.58 - template <typename _Graph, typename _Item>
8.59 - class GraphItemIt : public _Item {
8.60 + template <typename GR, typename Item>
8.61 + class GraphItemIt : public Item {
8.62 public:
8.63 /// \brief Default constructor.
8.64 ///
8.65 @@ -442,7 +441,7 @@
8.66 ///
8.67 /// Sets the iterator to the first item of \c the graph.
8.68 ///
8.69 - explicit GraphItemIt(const _Graph&) {}
8.70 + explicit GraphItemIt(const GR&) {}
8.71 /// \brief Invalid constructor \& conversion.
8.72 ///
8.73 /// This constructor initializes the item to be invalid.
8.74 @@ -479,24 +478,24 @@
8.75 ++it2 = it1;
8.76 ++(++it1);
8.77
8.78 - _Item bi = it1;
8.79 + Item bi = it1;
8.80 bi = it2;
8.81 }
8.82 - _Graph& g;
8.83 + GR& g;
8.84 };
8.85 };
8.86
8.87 /// \brief Skeleton class for graph InArcIt and OutArcIt
8.88 ///
8.89 /// \note Because InArcIt and OutArcIt may not inherit from the same
8.90 - /// base class, the _selector is a additional template parameter. For
8.91 - /// InArcIt you should instantiate it with character 'i' and for
8.92 + /// base class, the \c sel is a additional template parameter (selector).
8.93 + /// For InArcIt you should instantiate it with character 'i' and for
8.94 /// OutArcIt with 'o'.
8.95 - template <typename _Graph,
8.96 - typename _Item = typename _Graph::Arc,
8.97 - typename _Base = typename _Graph::Node,
8.98 - char _selector = '0'>
8.99 - class GraphIncIt : public _Item {
8.100 + template <typename GR,
8.101 + typename Item = typename GR::Arc,
8.102 + typename Base = typename GR::Node,
8.103 + char sel = '0'>
8.104 + class GraphIncIt : public Item {
8.105 public:
8.106 /// \brief Default constructor.
8.107 ///
8.108 @@ -507,14 +506,14 @@
8.109 ///
8.110 /// Copy constructor.
8.111 ///
8.112 - GraphIncIt(GraphIncIt const& gi) : _Item(gi) {}
8.113 + GraphIncIt(GraphIncIt const& gi) : Item(gi) {}
8.114 /// \brief Sets the iterator to the first arc incoming into or outgoing
8.115 /// from the node.
8.116 ///
8.117 /// Sets the iterator to the first arc incoming into or outgoing
8.118 /// from the node.
8.119 ///
8.120 - explicit GraphIncIt(const _Graph&, const _Base&) {}
8.121 + explicit GraphIncIt(const GR&, const Base&) {}
8.122 /// \brief Invalid constructor \& conversion.
8.123 ///
8.124 /// This constructor initializes the item to be invalid.
8.125 @@ -546,21 +545,21 @@
8.126 template <typename _GraphIncIt>
8.127 struct Constraints {
8.128 void constraints() {
8.129 - checkConcept<GraphItem<_selector>, _GraphIncIt>();
8.130 + checkConcept<GraphItem<sel>, _GraphIncIt>();
8.131 _GraphIncIt it1(graph, node);
8.132 _GraphIncIt it2;
8.133
8.134 it2 = ++it1;
8.135 ++it2 = it1;
8.136 ++(++it1);
8.137 - _Item e = it1;
8.138 + Item e = it1;
8.139 e = it2;
8.140
8.141 }
8.142
8.143 - _Item arc;
8.144 - _Base node;
8.145 - _Graph graph;
8.146 + Item arc;
8.147 + Base node;
8.148 + GR graph;
8.149 _GraphIncIt it;
8.150 };
8.151 };
8.152 @@ -571,12 +570,12 @@
8.153 /// This class provides beside the core digraph features
8.154 /// iterator based iterable interface for the digraph structure.
8.155 /// This concept is part of the Digraph concept.
8.156 - template <typename _Base = BaseDigraphComponent>
8.157 - class IterableDigraphComponent : public _Base {
8.158 + template <typename BAS = BaseDigraphComponent>
8.159 + class IterableDigraphComponent : public BAS {
8.160
8.161 public:
8.162
8.163 - typedef _Base Base;
8.164 + typedef BAS Base;
8.165 typedef typename Base::Node Node;
8.166 typedef typename Base::Arc Arc;
8.167
8.168 @@ -756,11 +755,11 @@
8.169 /// This class provides beside the core graph features iterator
8.170 /// based iterable interface for the undirected graph structure.
8.171 /// This concept is part of the Graph concept.
8.172 - template <typename _Base = BaseGraphComponent>
8.173 - class IterableGraphComponent : public IterableDigraphComponent<_Base> {
8.174 + template <typename BAS = BaseGraphComponent>
8.175 + class IterableGraphComponent : public IterableDigraphComponent<BAS> {
8.176 public:
8.177
8.178 - typedef _Base Base;
8.179 + typedef BAS Base;
8.180 typedef typename Base::Node Node;
8.181 typedef typename Base::Arc Arc;
8.182 typedef typename Base::Edge Edge;
8.183 @@ -773,8 +772,8 @@
8.184 /// This interface provides functions for iteration on graph items
8.185 /// @{
8.186
8.187 - using IterableDigraphComponent<_Base>::first;
8.188 - using IterableDigraphComponent<_Base>::next;
8.189 + using IterableDigraphComponent<Base>::first;
8.190 + using IterableDigraphComponent<Base>::next;
8.191
8.192 /// \brief Gives back the first edge in the iterating
8.193 /// order.
8.194 @@ -808,8 +807,8 @@
8.195 /// use it.
8.196 void nextInc(Edge&, bool&) const {}
8.197
8.198 - using IterableDigraphComponent<_Base>::baseNode;
8.199 - using IterableDigraphComponent<_Base>::runningNode;
8.200 + using IterableDigraphComponent<Base>::baseNode;
8.201 + using IterableDigraphComponent<Base>::runningNode;
8.202
8.203 /// @}
8.204
8.205 @@ -875,7 +874,6 @@
8.206 }
8.207
8.208 const _Graph& graph;
8.209 -
8.210 };
8.211 };
8.212
8.213 @@ -887,11 +885,11 @@
8.214 /// obsevers can be registered into the notifier and whenever an
8.215 /// alteration occured in the digraph all the observers will
8.216 /// notified about it.
8.217 - template <typename _Base = BaseDigraphComponent>
8.218 - class AlterableDigraphComponent : public _Base {
8.219 + template <typename BAS = BaseDigraphComponent>
8.220 + class AlterableDigraphComponent : public BAS {
8.221 public:
8.222
8.223 - typedef _Base Base;
8.224 + typedef BAS Base;
8.225 typedef typename Base::Node Node;
8.226 typedef typename Base::Arc Arc;
8.227
8.228 @@ -945,11 +943,11 @@
8.229 /// obsevers can be registered into the notifier and whenever an
8.230 /// alteration occured in the graph all the observers will
8.231 /// notified about it.
8.232 - template <typename _Base = BaseGraphComponent>
8.233 - class AlterableGraphComponent : public AlterableDigraphComponent<_Base> {
8.234 + template <typename BAS = BaseGraphComponent>
8.235 + class AlterableGraphComponent : public AlterableDigraphComponent<BAS> {
8.236 public:
8.237
8.238 - typedef _Base Base;
8.239 + typedef BAS Base;
8.240 typedef typename Base::Edge Edge;
8.241
8.242
8.243 @@ -974,9 +972,7 @@
8.244 }
8.245
8.246 const _Graph& graph;
8.247 -
8.248 };
8.249 -
8.250 };
8.251
8.252 /// \brief Class describing the concept of graph maps
8.253 @@ -984,18 +980,18 @@
8.254 /// This class describes the common interface of the graph maps
8.255 /// (NodeMap, ArcMap), that is maps that can be used to
8.256 /// associate data to graph descriptors (nodes or arcs).
8.257 - template <typename _Graph, typename _Item, typename _Value>
8.258 - class GraphMap : public ReadWriteMap<_Item, _Value> {
8.259 + template <typename GR, typename K, typename V>
8.260 + class GraphMap : public ReadWriteMap<K, V> {
8.261 public:
8.262
8.263 - typedef ReadWriteMap<_Item, _Value> Parent;
8.264 + typedef ReadWriteMap<K, V> Parent;
8.265
8.266 /// The graph type of the map.
8.267 - typedef _Graph Graph;
8.268 + typedef GR Graph;
8.269 /// The key type of the map.
8.270 - typedef _Item Key;
8.271 + typedef K Key;
8.272 /// The value type of the map.
8.273 - typedef _Value Value;
8.274 + typedef V Value;
8.275
8.276 /// \brief Construct a new map.
8.277 ///
8.278 @@ -1055,11 +1051,11 @@
8.279 /// This class provides beside the core digraph features
8.280 /// map interface for the digraph structure.
8.281 /// This concept is part of the Digraph concept.
8.282 - template <typename _Base = BaseDigraphComponent>
8.283 - class MappableDigraphComponent : public _Base {
8.284 + template <typename BAS = BaseDigraphComponent>
8.285 + class MappableDigraphComponent : public BAS {
8.286 public:
8.287
8.288 - typedef _Base Base;
8.289 + typedef BAS Base;
8.290 typedef typename Base::Node Node;
8.291 typedef typename Base::Arc Arc;
8.292
8.293 @@ -1069,10 +1065,10 @@
8.294 ///
8.295 /// ReadWrite map of the nodes.
8.296 ///
8.297 - template <typename _Value>
8.298 - class NodeMap : public GraphMap<Digraph, Node, _Value> {
8.299 + template <typename V>
8.300 + class NodeMap : public GraphMap<Digraph, Node, V> {
8.301 public:
8.302 - typedef GraphMap<MappableDigraphComponent, Node, _Value> Parent;
8.303 + typedef GraphMap<MappableDigraphComponent, Node, V> Parent;
8.304
8.305 /// \brief Construct a new map.
8.306 ///
8.307 @@ -1083,7 +1079,7 @@
8.308 /// \brief Construct a new map with default value.
8.309 ///
8.310 /// Construct a new map for the digraph and initalise the values.
8.311 - NodeMap(const MappableDigraphComponent& digraph, const _Value& value)
8.312 + NodeMap(const MappableDigraphComponent& digraph, const V& value)
8.313 : Parent(digraph, value) {}
8.314
8.315 private:
8.316 @@ -1097,7 +1093,7 @@
8.317 /// Assign operator.
8.318 template <typename CMap>
8.319 NodeMap& operator=(const CMap&) {
8.320 - checkConcept<ReadMap<Node, _Value>, CMap>();
8.321 + checkConcept<ReadMap<Node, V>, CMap>();
8.322 return *this;
8.323 }
8.324
8.325 @@ -1107,10 +1103,10 @@
8.326 ///
8.327 /// ReadWrite map of the arcs.
8.328 ///
8.329 - template <typename _Value>
8.330 - class ArcMap : public GraphMap<Digraph, Arc, _Value> {
8.331 + template <typename V>
8.332 + class ArcMap : public GraphMap<Digraph, Arc, V> {
8.333 public:
8.334 - typedef GraphMap<MappableDigraphComponent, Arc, _Value> Parent;
8.335 + typedef GraphMap<MappableDigraphComponent, Arc, V> Parent;
8.336
8.337 /// \brief Construct a new map.
8.338 ///
8.339 @@ -1121,7 +1117,7 @@
8.340 /// \brief Construct a new map with default value.
8.341 ///
8.342 /// Construct a new map for the digraph and initalise the values.
8.343 - ArcMap(const MappableDigraphComponent& digraph, const _Value& value)
8.344 + ArcMap(const MappableDigraphComponent& digraph, const V& value)
8.345 : Parent(digraph, value) {}
8.346
8.347 private:
8.348 @@ -1135,7 +1131,7 @@
8.349 /// Assign operator.
8.350 template <typename CMap>
8.351 ArcMap& operator=(const CMap&) {
8.352 - checkConcept<ReadMap<Arc, _Value>, CMap>();
8.353 + checkConcept<ReadMap<Arc, V>, CMap>();
8.354 return *this;
8.355 }
8.356
8.357 @@ -1191,11 +1187,11 @@
8.358 /// This class provides beside the core graph features
8.359 /// map interface for the graph structure.
8.360 /// This concept is part of the Graph concept.
8.361 - template <typename _Base = BaseGraphComponent>
8.362 - class MappableGraphComponent : public MappableDigraphComponent<_Base> {
8.363 + template <typename BAS = BaseGraphComponent>
8.364 + class MappableGraphComponent : public MappableDigraphComponent<BAS> {
8.365 public:
8.366
8.367 - typedef _Base Base;
8.368 + typedef BAS Base;
8.369 typedef typename Base::Edge Edge;
8.370
8.371 typedef MappableGraphComponent Graph;
8.372 @@ -1204,10 +1200,10 @@
8.373 ///
8.374 /// ReadWrite map of the edges.
8.375 ///
8.376 - template <typename _Value>
8.377 - class EdgeMap : public GraphMap<Graph, Edge, _Value> {
8.378 + template <typename V>
8.379 + class EdgeMap : public GraphMap<Graph, Edge, V> {
8.380 public:
8.381 - typedef GraphMap<MappableGraphComponent, Edge, _Value> Parent;
8.382 + typedef GraphMap<MappableGraphComponent, Edge, V> Parent;
8.383
8.384 /// \brief Construct a new map.
8.385 ///
8.386 @@ -1218,7 +1214,7 @@
8.387 /// \brief Construct a new map with default value.
8.388 ///
8.389 /// Construct a new map for the graph and initalise the values.
8.390 - EdgeMap(const MappableGraphComponent& graph, const _Value& value)
8.391 + EdgeMap(const MappableGraphComponent& graph, const V& value)
8.392 : Parent(graph, value) {}
8.393
8.394 private:
8.395 @@ -1232,7 +1228,7 @@
8.396 /// Assign operator.
8.397 template <typename CMap>
8.398 EdgeMap& operator=(const CMap&) {
8.399 - checkConcept<ReadMap<Edge, _Value>, CMap>();
8.400 + checkConcept<ReadMap<Edge, V>, CMap>();
8.401 return *this;
8.402 }
8.403
8.404 @@ -1276,13 +1272,13 @@
8.405 /// extendable interface for the digraph structure. The main
8.406 /// difference between the base and this interface is that the
8.407 /// digraph alterations should handled already on this level.
8.408 - template <typename _Base = BaseDigraphComponent>
8.409 - class ExtendableDigraphComponent : public _Base {
8.410 + template <typename BAS = BaseDigraphComponent>
8.411 + class ExtendableDigraphComponent : public BAS {
8.412 public:
8.413 - typedef _Base Base;
8.414 + typedef BAS Base;
8.415
8.416 - typedef typename _Base::Node Node;
8.417 - typedef typename _Base::Arc Arc;
8.418 + typedef typename Base::Node Node;
8.419 + typedef typename Base::Arc Arc;
8.420
8.421 /// \brief Adds a new node to the digraph.
8.422 ///
8.423 @@ -1321,13 +1317,13 @@
8.424 /// The main difference between the base and this interface is
8.425 /// that the graph alterations should handled already on this
8.426 /// level.
8.427 - template <typename _Base = BaseGraphComponent>
8.428 - class ExtendableGraphComponent : public _Base {
8.429 + template <typename BAS = BaseGraphComponent>
8.430 + class ExtendableGraphComponent : public BAS {
8.431 public:
8.432
8.433 - typedef _Base Base;
8.434 - typedef typename _Base::Node Node;
8.435 - typedef typename _Base::Edge Edge;
8.436 + typedef BAS Base;
8.437 + typedef typename Base::Node Node;
8.438 + typedef typename Base::Edge Edge;
8.439
8.440 /// \brief Adds a new node to the graph.
8.441 ///
8.442 @@ -1365,11 +1361,11 @@
8.443 /// functions for the digraph structure. The main difference between
8.444 /// the base and this interface is that the digraph alterations
8.445 /// should handled already on this level.
8.446 - template <typename _Base = BaseDigraphComponent>
8.447 - class ErasableDigraphComponent : public _Base {
8.448 + template <typename BAS = BaseDigraphComponent>
8.449 + class ErasableDigraphComponent : public BAS {
8.450 public:
8.451
8.452 - typedef _Base Base;
8.453 + typedef BAS Base;
8.454 typedef typename Base::Node Node;
8.455 typedef typename Base::Arc Arc;
8.456
8.457 @@ -1405,11 +1401,11 @@
8.458 /// core erase functions for the undirceted graph structure. The
8.459 /// main difference between the base and this interface is that
8.460 /// the graph alterations should handled already on this level.
8.461 - template <typename _Base = BaseGraphComponent>
8.462 - class ErasableGraphComponent : public _Base {
8.463 + template <typename BAS = BaseGraphComponent>
8.464 + class ErasableGraphComponent : public BAS {
8.465 public:
8.466
8.467 - typedef _Base Base;
8.468 + typedef BAS Base;
8.469 typedef typename Base::Node Node;
8.470 typedef typename Base::Edge Edge;
8.471
8.472 @@ -1445,11 +1441,11 @@
8.473 /// functions for the digraph structure. The main difference between
8.474 /// the base and this interface is that the digraph alterations
8.475 /// should handled already on this level.
8.476 - template <typename _Base = BaseDigraphComponent>
8.477 - class ClearableDigraphComponent : public _Base {
8.478 + template <typename BAS = BaseDigraphComponent>
8.479 + class ClearableDigraphComponent : public BAS {
8.480 public:
8.481
8.482 - typedef _Base Base;
8.483 + typedef BAS Base;
8.484
8.485 /// \brief Erase all nodes and arcs from the digraph.
8.486 ///
8.487 @@ -1474,11 +1470,11 @@
8.488 /// core clear functions for the undirected graph structure. The
8.489 /// main difference between the base and this interface is that
8.490 /// the graph alterations should handled already on this level.
8.491 - template <typename _Base = BaseGraphComponent>
8.492 - class ClearableGraphComponent : public ClearableDigraphComponent<_Base> {
8.493 + template <typename BAS = BaseGraphComponent>
8.494 + class ClearableGraphComponent : public ClearableDigraphComponent<BAS> {
8.495 public:
8.496
8.497 - typedef _Base Base;
8.498 + typedef BAS Base;
8.499
8.500 template <typename _Graph>
8.501 struct Constraints {
9.1 --- a/lemon/concepts/heap.h Thu Mar 05 10:13:20 2009 +0000
9.2 +++ b/lemon/concepts/heap.h Sun Mar 29 23:08:20 2009 +0200
9.3 @@ -35,17 +35,32 @@
9.4
9.5 /// \brief The heap concept.
9.6 ///
9.7 - /// Concept class describing the main interface of heaps.
9.8 - template <typename Priority, typename ItemIntMap>
9.9 + /// Concept class describing the main interface of heaps. A \e heap
9.10 + /// is a data structure for storing items with specified values called
9.11 + /// \e priorities in such a way that finding the item with minimum
9.12 + /// priority is efficient. In a heap one can change the priority of an
9.13 + /// item, add or erase an item, etc.
9.14 + ///
9.15 + /// \tparam PR Type of the priority of the items.
9.16 + /// \tparam IM A read and writable item map with int values, used
9.17 + /// internally to handle the cross references.
9.18 + /// \tparam Comp A functor class for the ordering of the priorities.
9.19 + /// The default is \c std::less<PR>.
9.20 +#ifdef DOXYGEN
9.21 + template <typename PR, typename IM, typename Comp = std::less<PR> >
9.22 +#else
9.23 + template <typename PR, typename IM>
9.24 +#endif
9.25 class Heap {
9.26 public:
9.27
9.28 + /// Type of the item-int map.
9.29 + typedef IM ItemIntMap;
9.30 + /// Type of the priorities.
9.31 + typedef PR Prio;
9.32 /// Type of the items stored in the heap.
9.33 typedef typename ItemIntMap::Key Item;
9.34
9.35 - /// Type of the priorities.
9.36 - typedef Priority Prio;
9.37 -
9.38 /// \brief Type to represent the states of the items.
9.39 ///
9.40 /// Each item has a state associated to it. It can be "in heap",
9.41 @@ -53,12 +68,12 @@
9.42 /// from the point of view of the heap, but may be useful for
9.43 /// the user.
9.44 ///
9.45 - /// The \c ItemIntMap must be initialized in such a way, that it
9.46 - /// assigns \c PRE_HEAP (<tt>-1</tt>) to every item.
9.47 + /// The item-int map must be initialized in such way that it assigns
9.48 + /// \c PRE_HEAP (<tt>-1</tt>) to any element to be put in the heap.
9.49 enum State {
9.50 - IN_HEAP = 0,
9.51 - PRE_HEAP = -1,
9.52 - POST_HEAP = -2
9.53 + IN_HEAP = 0, ///< The "in heap" state constant.
9.54 + PRE_HEAP = -1, ///< The "pre heap" state constant.
9.55 + POST_HEAP = -2 ///< The "post heap" state constant.
9.56 };
9.57
9.58 /// \brief The constructor.
9.59 @@ -119,8 +134,8 @@
9.60 /// \brief The priority of an item.
9.61 ///
9.62 /// Returns the priority of the given item.
9.63 + /// \param i The item.
9.64 /// \pre \c i must be in the heap.
9.65 - /// \param i The item.
9.66 Prio operator[](const Item &i) const {}
9.67
9.68 /// \brief Sets the priority of an item or inserts it, if it is
9.69 @@ -137,17 +152,17 @@
9.70 /// \brief Decreases the priority of an item to the given value.
9.71 ///
9.72 /// Decreases the priority of an item to the given value.
9.73 - /// \pre \c i must be stored in the heap with priority at least \c p.
9.74 /// \param i The item.
9.75 /// \param p The priority.
9.76 + /// \pre \c i must be stored in the heap with priority at least \c p.
9.77 void decrease(const Item &i, const Prio &p) {}
9.78
9.79 /// \brief Increases the priority of an item to the given value.
9.80 ///
9.81 /// Increases the priority of an item to the given value.
9.82 - /// \pre \c i must be stored in the heap with priority at most \c p.
9.83 /// \param i The item.
9.84 /// \param p The priority.
9.85 + /// \pre \c i must be stored in the heap with priority at most \c p.
9.86 void increase(const Item &i, const Prio &p) {}
9.87
9.88 /// \brief Returns if an item is in, has already been in, or has
10.1 --- a/lemon/concepts/path.h Thu Mar 05 10:13:20 2009 +0000
10.2 +++ b/lemon/concepts/path.h Sun Mar 29 23:08:20 2009 +0200
10.3 @@ -38,19 +38,19 @@
10.4 ///
10.5 /// A skeleton structure for representing directed paths in a
10.6 /// digraph.
10.7 - /// \tparam _Digraph The digraph type in which the path is.
10.8 + /// \tparam GR The digraph type in which the path is.
10.9 ///
10.10 /// In a sense, the path can be treated as a list of arcs. The
10.11 /// lemon path type stores just this list. As a consequence it
10.12 /// cannot enumerate the nodes in the path and the zero length
10.13 /// paths cannot store the source.
10.14 ///
10.15 - template <typename _Digraph>
10.16 + template <typename GR>
10.17 class Path {
10.18 public:
10.19
10.20 /// Type of the underlying digraph.
10.21 - typedef _Digraph Digraph;
10.22 + typedef GR Digraph;
10.23 /// Arc type of the underlying digraph.
10.24 typedef typename Digraph::Arc Arc;
10.25
10.26 @@ -205,18 +205,17 @@
10.27 /// LEMON such algorithms gives back a path dumper what can
10.28 /// assigned to a real path and the dumpers can be implemented as
10.29 /// an adaptor class to the predecessor map.
10.30 -
10.31 - /// \tparam _Digraph The digraph type in which the path is.
10.32 + ///
10.33 + /// \tparam GR The digraph type in which the path is.
10.34 ///
10.35 /// The paths can be constructed from any path type by a
10.36 /// template constructor or a template assignment operator.
10.37 - ///
10.38 - template <typename _Digraph>
10.39 + template <typename GR>
10.40 class PathDumper {
10.41 public:
10.42
10.43 /// Type of the underlying digraph.
10.44 - typedef _Digraph Digraph;
10.45 + typedef GR Digraph;
10.46 /// Arc type of the underlying digraph.
10.47 typedef typename Digraph::Arc Arc;
10.48
11.1 --- a/lemon/connectivity.h Thu Mar 05 10:13:20 2009 +0000
11.2 +++ b/lemon/connectivity.h Sun Mar 29 23:08:20 2009 +0200
11.3 @@ -46,7 +46,7 @@
11.4 ///
11.5 /// Check whether the given undirected graph is connected.
11.6 /// \param graph The undirected graph.
11.7 - /// \return %True when there is path between any two nodes in the graph.
11.8 + /// \return \c true when there is path between any two nodes in the graph.
11.9 /// \note By definition, the empty graph is connected.
11.10 template <typename Graph>
11.11 bool connected(const Graph& graph) {
11.12 @@ -234,7 +234,7 @@
11.13 /// Check whether the given directed graph is strongly connected. The
11.14 /// graph is strongly connected when any two nodes of the graph are
11.15 /// connected with directed paths in both direction.
11.16 - /// \return %False when the graph is not strongly connected.
11.17 + /// \return \c false when the graph is not strongly connected.
11.18 /// \see connected
11.19 ///
11.20 /// \note By definition, the empty graph is strongly connected.
11.21 @@ -709,7 +709,7 @@
11.22 /// on same circle.
11.23 ///
11.24 /// \param graph The graph.
11.25 - /// \return %True when the graph bi-node-connected.
11.26 + /// \return \c true when the graph bi-node-connected.
11.27 template <typename Graph>
11.28 bool biNodeConnected(const Graph& graph) {
11.29 return countBiNodeConnectedComponents(graph) <= 1;
11.30 @@ -1230,7 +1230,7 @@
11.31 /// from 0 to the number of the nodes in the graph minus one. Each values
11.32 /// of the map will be set exactly once, the values will be set descending
11.33 /// order.
11.34 - /// \return %False when the graph is not DAG.
11.35 + /// \return \c false when the graph is not DAG.
11.36 ///
11.37 /// \see topologicalSort
11.38 /// \see dag
11.39 @@ -1279,7 +1279,7 @@
11.40 ///
11.41 /// Check that the given directed graph is a DAG. The DAG is
11.42 /// an Directed Acyclic Digraph.
11.43 - /// \return %False when the graph is not DAG.
11.44 + /// \return \c false when the graph is not DAG.
11.45 /// \see acyclic
11.46 template <typename Digraph>
11.47 bool dag(const Digraph& digraph) {
11.48 @@ -1321,7 +1321,7 @@
11.49 ///
11.50 /// Check that the given undirected graph acyclic.
11.51 /// \param graph The undirected graph.
11.52 - /// \return %True when there is no circle in the graph.
11.53 + /// \return \c true when there is no circle in the graph.
11.54 /// \see dag
11.55 template <typename Graph>
11.56 bool acyclic(const Graph& graph) {
11.57 @@ -1355,7 +1355,7 @@
11.58 ///
11.59 /// Check that the given undirected graph is tree.
11.60 /// \param graph The undirected graph.
11.61 - /// \return %True when the graph is acyclic and connected.
11.62 + /// \return \c true when the graph is acyclic and connected.
11.63 template <typename Graph>
11.64 bool tree(const Graph& graph) {
11.65 checkConcept<concepts::Graph, Graph>();
11.66 @@ -1448,7 +1448,7 @@
11.67 /// The function checks if the given undirected \c graph graph is bipartite
11.68 /// or not. The \ref Bfs algorithm is used to calculate the result.
11.69 /// \param graph The undirected graph.
11.70 - /// \return %True if \c graph is bipartite, %false otherwise.
11.71 + /// \return \c true if \c graph is bipartite, \c false otherwise.
11.72 /// \sa bipartitePartitions
11.73 template<typename Graph>
11.74 inline bool bipartite(const Graph &graph){
11.75 @@ -1489,7 +1489,7 @@
11.76 /// \param graph The undirected graph.
11.77 /// \retval partMap A writable bool map of nodes. It will be set as the
11.78 /// two partitions of the graph.
11.79 - /// \return %True if \c graph is bipartite, %false otherwise.
11.80 + /// \return \c true if \c graph is bipartite, \c false otherwise.
11.81 template<typename Graph, typename NodeMap>
11.82 inline bool bipartitePartitions(const Graph &graph, NodeMap &partMap){
11.83 using namespace _connectivity_bits;
12.1 --- a/lemon/core.h Thu Mar 05 10:13:20 2009 +0000
12.2 +++ b/lemon/core.h Sun Mar 29 23:08:20 2009 +0200
12.3 @@ -1034,11 +1034,11 @@
12.4 ///
12.5 ///\sa findArc()
12.6 ///\sa ArcLookUp, AllArcLookUp, DynArcLookUp
12.7 - template <typename _Graph>
12.8 - class ConArcIt : public _Graph::Arc {
12.9 + template <typename GR>
12.10 + class ConArcIt : public GR::Arc {
12.11 public:
12.12
12.13 - typedef _Graph Graph;
12.14 + typedef GR Graph;
12.15 typedef typename Graph::Arc Parent;
12.16
12.17 typedef typename Graph::Arc Arc;
12.18 @@ -1157,11 +1157,11 @@
12.19 ///\endcode
12.20 ///
12.21 ///\sa findEdge()
12.22 - template <typename _Graph>
12.23 - class ConEdgeIt : public _Graph::Edge {
12.24 + template <typename GR>
12.25 + class ConEdgeIt : public GR::Edge {
12.26 public:
12.27
12.28 - typedef _Graph Graph;
12.29 + typedef GR Graph;
12.30 typedef typename Graph::Edge Parent;
12.31
12.32 typedef typename Graph::Edge Edge;
12.33 @@ -1211,29 +1211,29 @@
12.34 ///optimal time bound in a constant factor for any distribution of
12.35 ///queries.
12.36 ///
12.37 - ///\tparam G The type of the underlying digraph.
12.38 + ///\tparam GR The type of the underlying digraph.
12.39 ///
12.40 ///\sa ArcLookUp
12.41 ///\sa AllArcLookUp
12.42 - template<class G>
12.43 + template <typename GR>
12.44 class DynArcLookUp
12.45 - : protected ItemSetTraits<G, typename G::Arc>::ItemNotifier::ObserverBase
12.46 + : protected ItemSetTraits<GR, typename GR::Arc>::ItemNotifier::ObserverBase
12.47 {
12.48 public:
12.49 - typedef typename ItemSetTraits<G, typename G::Arc>
12.50 + typedef typename ItemSetTraits<GR, typename GR::Arc>
12.51 ::ItemNotifier::ObserverBase Parent;
12.52
12.53 - TEMPLATE_DIGRAPH_TYPEDEFS(G);
12.54 - typedef G Digraph;
12.55 + TEMPLATE_DIGRAPH_TYPEDEFS(GR);
12.56 + typedef GR Digraph;
12.57
12.58 protected:
12.59
12.60 - class AutoNodeMap : public ItemSetTraits<G, Node>::template Map<Arc>::Type {
12.61 + class AutoNodeMap : public ItemSetTraits<GR, Node>::template Map<Arc>::Type {
12.62 public:
12.63
12.64 - typedef typename ItemSetTraits<G, Node>::template Map<Arc>::Type Parent;
12.65 + typedef typename ItemSetTraits<GR, Node>::template Map<Arc>::Type Parent;
12.66
12.67 - AutoNodeMap(const G& digraph) : Parent(digraph, INVALID) {}
12.68 + AutoNodeMap(const GR& digraph) : Parent(digraph, INVALID) {}
12.69
12.70 virtual void add(const Node& node) {
12.71 Parent::add(node);
12.72 @@ -1623,16 +1623,16 @@
12.73 ///digraph changes. This is a time consuming (superlinearly proportional
12.74 ///(<em>O</em>(<em>m</em> log<em>m</em>)) to the number of arcs).
12.75 ///
12.76 - ///\tparam G The type of the underlying digraph.
12.77 + ///\tparam GR The type of the underlying digraph.
12.78 ///
12.79 ///\sa DynArcLookUp
12.80 ///\sa AllArcLookUp
12.81 - template<class G>
12.82 + template<class GR>
12.83 class ArcLookUp
12.84 {
12.85 public:
12.86 - TEMPLATE_DIGRAPH_TYPEDEFS(G);
12.87 - typedef G Digraph;
12.88 + TEMPLATE_DIGRAPH_TYPEDEFS(GR);
12.89 + typedef GR Digraph;
12.90
12.91 protected:
12.92 const Digraph &_g;
12.93 @@ -1733,20 +1733,20 @@
12.94 ///digraph changes. This is a time consuming (superlinearly proportional
12.95 ///(<em>O</em>(<em>m</em> log<em>m</em>)) to the number of arcs).
12.96 ///
12.97 - ///\tparam G The type of the underlying digraph.
12.98 + ///\tparam GR The type of the underlying digraph.
12.99 ///
12.100 ///\sa DynArcLookUp
12.101 ///\sa ArcLookUp
12.102 - template<class G>
12.103 - class AllArcLookUp : public ArcLookUp<G>
12.104 + template<class GR>
12.105 + class AllArcLookUp : public ArcLookUp<GR>
12.106 {
12.107 - using ArcLookUp<G>::_g;
12.108 - using ArcLookUp<G>::_right;
12.109 - using ArcLookUp<G>::_left;
12.110 - using ArcLookUp<G>::_head;
12.111 + using ArcLookUp<GR>::_g;
12.112 + using ArcLookUp<GR>::_right;
12.113 + using ArcLookUp<GR>::_left;
12.114 + using ArcLookUp<GR>::_head;
12.115
12.116 - TEMPLATE_DIGRAPH_TYPEDEFS(G);
12.117 - typedef G Digraph;
12.118 + TEMPLATE_DIGRAPH_TYPEDEFS(GR);
12.119 + typedef GR Digraph;
12.120
12.121 typename Digraph::template ArcMap<Arc> _next;
12.122
12.123 @@ -1773,7 +1773,7 @@
12.124 ///
12.125 ///It builds up the search database, which remains valid until the digraph
12.126 ///changes.
12.127 - AllArcLookUp(const Digraph &g) : ArcLookUp<G>(g), _next(g) {refreshNext();}
12.128 + AllArcLookUp(const Digraph &g) : ArcLookUp<GR>(g), _next(g) {refreshNext();}
12.129
12.130 ///Refresh the data structure at a node.
12.131
12.132 @@ -1783,7 +1783,7 @@
12.133 ///the number of the outgoing arcs of \c n.
12.134 void refresh(Node n)
12.135 {
12.136 - ArcLookUp<G>::refresh(n);
12.137 + ArcLookUp<GR>::refresh(n);
12.138 refreshNext(_head[n]);
12.139 }
12.140
12.141 @@ -1830,7 +1830,7 @@
12.142 #ifdef DOXYGEN
12.143 Arc operator()(Node s, Node t, Arc prev=INVALID) const {}
12.144 #else
12.145 - using ArcLookUp<G>::operator() ;
12.146 + using ArcLookUp<GR>::operator() ;
12.147 Arc operator()(Node s, Node t, Arc prev) const
12.148 {
12.149 return prev==INVALID?(*this)(s,t):_next[prev];
13.1 --- a/lemon/dijkstra.h Thu Mar 05 10:13:20 2009 +0000
13.2 +++ b/lemon/dijkstra.h Sun Mar 29 23:08:20 2009 +0200
13.3 @@ -38,8 +38,10 @@
13.4 ///
13.5 /// This operation traits class defines all computational operations and
13.6 /// constants which are used in the Dijkstra algorithm.
13.7 - template <typename Value>
13.8 + template <typename V>
13.9 struct DijkstraDefaultOperationTraits {
13.10 + /// \e
13.11 + typedef V Value;
13.12 /// \brief Gives back the zero value of the type.
13.13 static Value zero() {
13.14 return static_cast<Value>(0);
13.15 @@ -58,8 +60,8 @@
13.16
13.17 ///Default traits class of Dijkstra class.
13.18 ///\tparam GR The type of the digraph.
13.19 - ///\tparam LM The type of the length map.
13.20 - template<class GR, class LM>
13.21 + ///\tparam LEN The type of the length map.
13.22 + template<typename GR, typename LEN>
13.23 struct DijkstraDefaultTraits
13.24 {
13.25 ///The type of the digraph the algorithm runs on.
13.26 @@ -69,9 +71,9 @@
13.27
13.28 ///The type of the map that stores the arc lengths.
13.29 ///It must meet the \ref concepts::ReadMap "ReadMap" concept.
13.30 - typedef LM LengthMap;
13.31 + typedef LEN LengthMap;
13.32 ///The type of the length of the arcs.
13.33 - typedef typename LM::Value Value;
13.34 + typedef typename LEN::Value Value;
13.35
13.36 /// Operation traits for %Dijkstra algorithm.
13.37
13.38 @@ -100,7 +102,7 @@
13.39 ///
13.40 ///\sa BinHeap
13.41 ///\sa Dijkstra
13.42 - typedef BinHeap<typename LM::Value, HeapCrossRef, std::less<Value> > Heap;
13.43 + typedef BinHeap<typename LEN::Value, HeapCrossRef, std::less<Value> > Heap;
13.44 ///Instantiates a \c Heap.
13.45
13.46 ///This function instantiates a \ref Heap.
13.47 @@ -150,7 +152,7 @@
13.48
13.49 ///The type of the map that stores the distances of the nodes.
13.50 ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
13.51 - typedef typename Digraph::template NodeMap<typename LM::Value> DistMap;
13.52 + typedef typename Digraph::template NodeMap<typename LEN::Value> DistMap;
13.53 ///Instantiates a \c DistMap.
13.54
13.55 ///This function instantiates a \ref DistMap.
13.56 @@ -180,18 +182,18 @@
13.57 ///
13.58 ///\tparam GR The type of the digraph the algorithm runs on.
13.59 ///The default type is \ref ListDigraph.
13.60 - ///\tparam LM A \ref concepts::ReadMap "readable" arc map that specifies
13.61 + ///\tparam LEN A \ref concepts::ReadMap "readable" arc map that specifies
13.62 ///the lengths of the arcs.
13.63 ///It is read once for each arc, so the map may involve in
13.64 ///relatively time consuming process to compute the arc lengths if
13.65 ///it is necessary. The default map type is \ref
13.66 ///concepts::Digraph::ArcMap "GR::ArcMap<int>".
13.67 #ifdef DOXYGEN
13.68 - template <typename GR, typename LM, typename TR>
13.69 + template <typename GR, typename LEN, typename TR>
13.70 #else
13.71 template <typename GR=ListDigraph,
13.72 - typename LM=typename GR::template ArcMap<int>,
13.73 - typename TR=DijkstraDefaultTraits<GR,LM> >
13.74 + typename LEN=typename GR::template ArcMap<int>,
13.75 + typename TR=DijkstraDefaultTraits<GR,LEN> >
13.76 #endif
13.77 class Dijkstra {
13.78 public:
13.79 @@ -913,8 +915,8 @@
13.80
13.81 ///Default traits class of dijkstra() function.
13.82 ///\tparam GR The type of the digraph.
13.83 - ///\tparam LM The type of the length map.
13.84 - template<class GR, class LM>
13.85 + ///\tparam LEN The type of the length map.
13.86 + template<class GR, class LEN>
13.87 struct DijkstraWizardDefaultTraits
13.88 {
13.89 ///The type of the digraph the algorithm runs on.
13.90 @@ -923,9 +925,9 @@
13.91
13.92 ///The type of the map that stores the arc lengths.
13.93 ///It must meet the \ref concepts::ReadMap "ReadMap" concept.
13.94 - typedef LM LengthMap;
13.95 + typedef LEN LengthMap;
13.96 ///The type of the length of the arcs.
13.97 - typedef typename LM::Value Value;
13.98 + typedef typename LEN::Value Value;
13.99
13.100 /// Operation traits for Dijkstra algorithm.
13.101
13.102 @@ -1007,7 +1009,7 @@
13.103
13.104 ///The type of the map that stores the distances of the nodes.
13.105 ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
13.106 - typedef typename Digraph::template NodeMap<typename LM::Value> DistMap;
13.107 + typedef typename Digraph::template NodeMap<typename LEN::Value> DistMap;
13.108 ///Instantiates a DistMap.
13.109
13.110 ///This function instantiates a DistMap.
13.111 @@ -1033,10 +1035,10 @@
13.112 /// as well as the \ref Dijkstra class.
13.113 /// The \ref DijkstraWizardBase is a class to be the default traits of the
13.114 /// \ref DijkstraWizard class.
13.115 - template<class GR,class LM>
13.116 - class DijkstraWizardBase : public DijkstraWizardDefaultTraits<GR,LM>
13.117 + template<typename GR, typename LEN>
13.118 + class DijkstraWizardBase : public DijkstraWizardDefaultTraits<GR,LEN>
13.119 {
13.120 - typedef DijkstraWizardDefaultTraits<GR,LM> Base;
13.121 + typedef DijkstraWizardDefaultTraits<GR,LEN> Base;
13.122 protected:
13.123 //The type of the nodes in the digraph.
13.124 typedef typename Base::Digraph::Node Node;
13.125 @@ -1070,9 +1072,9 @@
13.126 /// others are initiated to \c 0.
13.127 /// \param g The digraph the algorithm runs on.
13.128 /// \param l The length map.
13.129 - DijkstraWizardBase(const GR &g,const LM &l) :
13.130 + DijkstraWizardBase(const GR &g,const LEN &l) :
13.131 _g(reinterpret_cast<void*>(const_cast<GR*>(&g))),
13.132 - _length(reinterpret_cast<void*>(const_cast<LM*>(&l))),
13.133 + _length(reinterpret_cast<void*>(const_cast<LEN*>(&l))),
13.134 _processed(0), _pred(0), _dist(0), _path(0), _di(0) {}
13.135
13.136 };
13.137 @@ -1281,11 +1283,11 @@
13.138 ///to the end of the parameter list.
13.139 ///\sa DijkstraWizard
13.140 ///\sa Dijkstra
13.141 - template<class GR, class LM>
13.142 - DijkstraWizard<DijkstraWizardBase<GR,LM> >
13.143 - dijkstra(const GR &digraph, const LM &length)
13.144 + template<typename GR, typename LEN>
13.145 + DijkstraWizard<DijkstraWizardBase<GR,LEN> >
13.146 + dijkstra(const GR &digraph, const LEN &length)
13.147 {
13.148 - return DijkstraWizard<DijkstraWizardBase<GR,LM> >(digraph,length);
13.149 + return DijkstraWizard<DijkstraWizardBase<GR,LEN> >(digraph,length);
13.150 }
13.151
13.152 } //END OF NAMESPACE LEMON
14.1 --- a/lemon/edge_set.h Thu Mar 05 10:13:20 2009 +0000
14.2 +++ b/lemon/edge_set.h Sun Mar 29 23:08:20 2009 +0200
14.3 @@ -255,7 +255,7 @@
14.4 /// \ref concepts::Digraph "Digraph" or \ref concepts::Graph "Graph"
14.5 /// concept.
14.6 ///
14.7 - /// This class is fully conform to the \ref concepts::Digraph
14.8 + /// This class fully conforms to the \ref concepts::Digraph
14.9 /// "Digraph" concept.
14.10 template <typename GR>
14.11 class ListArcSet : public ArcSetExtender<ListArcSetBase<GR> > {
14.12 @@ -336,7 +336,7 @@
14.13 ///
14.14 /// Add a new arc to the digraph with source node \c s
14.15 /// and target node \c t.
14.16 - /// \return the new arc.
14.17 + /// \return The new arc.
14.18 Arc addArc(const Node& s, const Node& t) {
14.19 return Parent::addArc(s, t);
14.20 }
14.21 @@ -684,7 +684,7 @@
14.22 /// \ref concepts::Digraph "Digraph" or \ref concepts::Graph "Graph"
14.23 /// concept.
14.24 ///
14.25 - /// This class is fully conform to the \ref concepts::Graph "Graph"
14.26 + /// This class fully conforms to the \ref concepts::Graph "Graph"
14.27 /// concept.
14.28 template <typename GR>
14.29 class ListEdgeSet : public EdgeSetExtender<ListEdgeSetBase<GR> > {
14.30 @@ -761,7 +761,7 @@
14.31 ///
14.32 /// Add a new edge to the graph with node \c u
14.33 /// and node \c v endpoints.
14.34 - /// \return the new edge.
14.35 + /// \return The new edge.
14.36 Edge addEdge(const Node& u, const Node& v) {
14.37 return Parent::addEdge(u, v);
14.38 }
14.39 @@ -952,7 +952,7 @@
14.40 /// the arc set is invalidated, and it cannot be used anymore. The
14.41 /// validity can be checked with the \c valid() member function.
14.42 ///
14.43 - /// This class is fully conform to the \ref concepts::Digraph
14.44 + /// This class fully conforms to the \ref concepts::Digraph
14.45 /// "Digraph" concept.
14.46 template <typename GR>
14.47 class SmartArcSet : public ArcSetExtender<SmartArcSetBase<GR> > {
14.48 @@ -1041,7 +1041,7 @@
14.49 ///
14.50 /// Add a new arc to the digraph with source node \c s
14.51 /// and target node \c t.
14.52 - /// \return the new arc.
14.53 + /// \return The new arc.
14.54 Arc addArc(const Node& s, const Node& t) {
14.55 return Parent::addArc(s, t);
14.56 }
14.57 @@ -1300,7 +1300,7 @@
14.58 /// is invalidated, and it cannot be used anymore. The validity can
14.59 /// be checked with the \c valid() member function.
14.60 ///
14.61 - /// This class is fully conform to the \ref concepts::Graph
14.62 + /// This class fully conforms to the \ref concepts::Graph
14.63 /// "Graph" concept.
14.64 template <typename GR>
14.65 class SmartEdgeSet : public EdgeSetExtender<SmartEdgeSetBase<GR> > {
14.66 @@ -1389,7 +1389,7 @@
14.67 ///
14.68 /// Add a new edge to the graph with node \c u
14.69 /// and node \c v endpoints.
14.70 - /// \return the new edge.
14.71 + /// \return The new edge.
14.72 Edge addEdge(const Node& u, const Node& v) {
14.73 return Parent::addEdge(u, v);
14.74 }
15.1 --- a/lemon/elevator.h Thu Mar 05 10:13:20 2009 +0000
15.2 +++ b/lemon/elevator.h Sun Mar 29 23:08:20 2009 +0200
15.3 @@ -46,10 +46,10 @@
15.4 ///
15.5 ///\sa LinkedElevator
15.6 ///
15.7 - ///\param Graph Type of the underlying graph.
15.8 - ///\param Item Type of the items the data is assigned to (Graph::Node,
15.9 - ///Graph::Arc, Graph::Edge).
15.10 - template<class Graph, class Item>
15.11 + ///\param GR Type of the underlying graph.
15.12 + ///\param Item Type of the items the data is assigned to (\c GR::Node,
15.13 + ///\c GR::Arc or \c GR::Edge).
15.14 + template<class GR, class Item>
15.15 class Elevator
15.16 {
15.17 public:
15.18 @@ -60,10 +60,10 @@
15.19 private:
15.20
15.21 typedef Item *Vit;
15.22 - typedef typename ItemSetTraits<Graph,Item>::template Map<Vit>::Type VitMap;
15.23 - typedef typename ItemSetTraits<Graph,Item>::template Map<int>::Type IntMap;
15.24 + typedef typename ItemSetTraits<GR,Item>::template Map<Vit>::Type VitMap;
15.25 + typedef typename ItemSetTraits<GR,Item>::template Map<int>::Type IntMap;
15.26
15.27 - const Graph &_g;
15.28 + const GR &_g;
15.29 int _max_level;
15.30 int _item_num;
15.31 VitMap _where;
15.32 @@ -105,7 +105,7 @@
15.33 ///\param graph The underlying graph.
15.34 ///\param max_level The maximum allowed level.
15.35 ///Set the range of the possible labels to <tt>[0..max_level]</tt>.
15.36 - Elevator(const Graph &graph,int max_level) :
15.37 + Elevator(const GR &graph,int max_level) :
15.38 _g(graph),
15.39 _max_level(max_level),
15.40 _item_num(_max_level),
15.41 @@ -122,9 +122,9 @@
15.42 ///\param graph The underlying graph.
15.43 ///Set the range of the possible labels to <tt>[0..max_level]</tt>,
15.44 ///where \c max_level is equal to the number of labeled items in the graph.
15.45 - Elevator(const Graph &graph) :
15.46 + Elevator(const GR &graph) :
15.47 _g(graph),
15.48 - _max_level(countItems<Graph, Item>(graph)),
15.49 + _max_level(countItems<GR, Item>(graph)),
15.50 _item_num(_max_level),
15.51 _where(graph),
15.52 _level(graph,0),
15.53 @@ -430,7 +430,7 @@
15.54 _first[0]=&_items[0];
15.55 _last_active[0]=&_items[0]-1;
15.56 Vit n=&_items[0];
15.57 - for(typename ItemSetTraits<Graph,Item>::ItemIt i(_g);i!=INVALID;++i)
15.58 + for(typename ItemSetTraits<GR,Item>::ItemIt i(_g);i!=INVALID;++i)
15.59 {
15.60 *n=i;
15.61 _where.set(i,n);
15.62 @@ -489,10 +489,10 @@
15.63 ///
15.64 ///\sa Elevator
15.65 ///
15.66 - ///\param Graph Type of the underlying graph.
15.67 - ///\param Item Type of the items the data is assigned to (Graph::Node,
15.68 - ///Graph::Arc, Graph::Edge).
15.69 - template <class Graph, class Item>
15.70 + ///\param GR Type of the underlying graph.
15.71 + ///\param Item Type of the items the data is assigned to (\c GR::Node,
15.72 + ///\c GR::Arc or \c GR::Edge).
15.73 + template <class GR, class Item>
15.74 class LinkedElevator {
15.75 public:
15.76
15.77 @@ -501,14 +501,14 @@
15.78
15.79 private:
15.80
15.81 - typedef typename ItemSetTraits<Graph,Item>::
15.82 + typedef typename ItemSetTraits<GR,Item>::
15.83 template Map<Item>::Type ItemMap;
15.84 - typedef typename ItemSetTraits<Graph,Item>::
15.85 + typedef typename ItemSetTraits<GR,Item>::
15.86 template Map<int>::Type IntMap;
15.87 - typedef typename ItemSetTraits<Graph,Item>::
15.88 + typedef typename ItemSetTraits<GR,Item>::
15.89 template Map<bool>::Type BoolMap;
15.90
15.91 - const Graph &_graph;
15.92 + const GR &_graph;
15.93 int _max_level;
15.94 int _item_num;
15.95 std::vector<Item> _first, _last;
15.96 @@ -525,7 +525,7 @@
15.97 ///\param graph The underlying graph.
15.98 ///\param max_level The maximum allowed level.
15.99 ///Set the range of the possible labels to <tt>[0..max_level]</tt>.
15.100 - LinkedElevator(const Graph& graph, int max_level)
15.101 + LinkedElevator(const GR& graph, int max_level)
15.102 : _graph(graph), _max_level(max_level), _item_num(_max_level),
15.103 _first(_max_level + 1), _last(_max_level + 1),
15.104 _prev(graph), _next(graph),
15.105 @@ -538,8 +538,8 @@
15.106 ///\param graph The underlying graph.
15.107 ///Set the range of the possible labels to <tt>[0..max_level]</tt>,
15.108 ///where \c max_level is equal to the number of labeled items in the graph.
15.109 - LinkedElevator(const Graph& graph)
15.110 - : _graph(graph), _max_level(countItems<Graph, Item>(graph)),
15.111 + LinkedElevator(const GR& graph)
15.112 + : _graph(graph), _max_level(countItems<GR, Item>(graph)),
15.113 _item_num(_max_level),
15.114 _first(_max_level + 1), _last(_max_level + 1),
15.115 _prev(graph, INVALID), _next(graph, INVALID),
15.116 @@ -935,7 +935,7 @@
15.117 _first[i] = _last[i] = INVALID;
15.118 }
15.119 _init_level = 0;
15.120 - for(typename ItemSetTraits<Graph,Item>::ItemIt i(_graph);
15.121 + for(typename ItemSetTraits<GR,Item>::ItemIt i(_graph);
15.122 i != INVALID; ++i) {
15.123 _level.set(i, _max_level);
15.124 _active.set(i, false);
16.1 --- a/lemon/euler.h Thu Mar 05 10:13:20 2009 +0000
16.2 +++ b/lemon/euler.h Sun Mar 29 23:08:20 2009 +0200
16.3 @@ -54,29 +54,29 @@
16.4 ///\endcode
16.5 ///If \c g is not Euler then the resulted tour will not be full or closed.
16.6 ///\sa EulerIt
16.7 - template<class Digraph>
16.8 + template<typename GR>
16.9 class DiEulerIt
16.10 {
16.11 - typedef typename Digraph::Node Node;
16.12 - typedef typename Digraph::NodeIt NodeIt;
16.13 - typedef typename Digraph::Arc Arc;
16.14 - typedef typename Digraph::ArcIt ArcIt;
16.15 - typedef typename Digraph::OutArcIt OutArcIt;
16.16 - typedef typename Digraph::InArcIt InArcIt;
16.17 + typedef typename GR::Node Node;
16.18 + typedef typename GR::NodeIt NodeIt;
16.19 + typedef typename GR::Arc Arc;
16.20 + typedef typename GR::ArcIt ArcIt;
16.21 + typedef typename GR::OutArcIt OutArcIt;
16.22 + typedef typename GR::InArcIt InArcIt;
16.23
16.24 - const Digraph &g;
16.25 - typename Digraph::template NodeMap<OutArcIt> nedge;
16.26 + const GR &g;
16.27 + typename GR::template NodeMap<OutArcIt> nedge;
16.28 std::list<Arc> euler;
16.29
16.30 public:
16.31
16.32 ///Constructor
16.33
16.34 - ///\param _g A digraph.
16.35 + ///\param gr A digraph.
16.36 ///\param start The starting point of the tour. If it is not given
16.37 /// the tour will start from the first node.
16.38 - DiEulerIt(const Digraph &_g,typename Digraph::Node start=INVALID)
16.39 - : g(_g), nedge(g)
16.40 + DiEulerIt(const GR &gr, typename GR::Node start = INVALID)
16.41 + : g(gr), nedge(g)
16.42 {
16.43 if(start==INVALID) start=NodeIt(g);
16.44 for(NodeIt n(g);n!=INVALID;++n) nedge[n]=OutArcIt(g,n);
16.45 @@ -145,31 +145,31 @@
16.46 ///
16.47 ///If \c g is not Euler then the resulted tour will not be full or closed.
16.48 ///\sa EulerIt
16.49 - template<class Digraph>
16.50 + template<typename GR>
16.51 class EulerIt
16.52 {
16.53 - typedef typename Digraph::Node Node;
16.54 - typedef typename Digraph::NodeIt NodeIt;
16.55 - typedef typename Digraph::Arc Arc;
16.56 - typedef typename Digraph::Edge Edge;
16.57 - typedef typename Digraph::ArcIt ArcIt;
16.58 - typedef typename Digraph::OutArcIt OutArcIt;
16.59 - typedef typename Digraph::InArcIt InArcIt;
16.60 + typedef typename GR::Node Node;
16.61 + typedef typename GR::NodeIt NodeIt;
16.62 + typedef typename GR::Arc Arc;
16.63 + typedef typename GR::Edge Edge;
16.64 + typedef typename GR::ArcIt ArcIt;
16.65 + typedef typename GR::OutArcIt OutArcIt;
16.66 + typedef typename GR::InArcIt InArcIt;
16.67
16.68 - const Digraph &g;
16.69 - typename Digraph::template NodeMap<OutArcIt> nedge;
16.70 - typename Digraph::template EdgeMap<bool> visited;
16.71 + const GR &g;
16.72 + typename GR::template NodeMap<OutArcIt> nedge;
16.73 + typename GR::template EdgeMap<bool> visited;
16.74 std::list<Arc> euler;
16.75
16.76 public:
16.77
16.78 ///Constructor
16.79
16.80 - ///\param _g An graph.
16.81 + ///\param gr An graph.
16.82 ///\param start The starting point of the tour. If it is not given
16.83 /// the tour will start from the first node.
16.84 - EulerIt(const Digraph &_g,typename Digraph::Node start=INVALID)
16.85 - : g(_g), nedge(g), visited(g,false)
16.86 + EulerIt(const GR &gr, typename GR::Node start = INVALID)
16.87 + : g(gr), nedge(g), visited(g, false)
16.88 {
16.89 if(start==INVALID) start=NodeIt(g);
16.90 for(NodeIt n(g);n!=INVALID;++n) nedge[n]=OutArcIt(g,n);
16.91 @@ -238,25 +238,25 @@
16.92 ///and only if it is connected and the number of incident arcs is even
16.93 ///for each node. <em>Therefore, there are digraphs which are not Eulerian,
16.94 ///but still have an Euler tour</em>.
16.95 - template<class Digraph>
16.96 + template<typename GR>
16.97 #ifdef DOXYGEN
16.98 bool
16.99 #else
16.100 - typename enable_if<UndirectedTagIndicator<Digraph>,bool>::type
16.101 - eulerian(const Digraph &g)
16.102 + typename enable_if<UndirectedTagIndicator<GR>,bool>::type
16.103 + eulerian(const GR &g)
16.104 {
16.105 - for(typename Digraph::NodeIt n(g);n!=INVALID;++n)
16.106 + for(typename GR::NodeIt n(g);n!=INVALID;++n)
16.107 if(countIncEdges(g,n)%2) return false;
16.108 return connected(g);
16.109 }
16.110 - template<class Digraph>
16.111 - typename disable_if<UndirectedTagIndicator<Digraph>,bool>::type
16.112 + template<class GR>
16.113 + typename disable_if<UndirectedTagIndicator<GR>,bool>::type
16.114 #endif
16.115 - eulerian(const Digraph &g)
16.116 + eulerian(const GR &g)
16.117 {
16.118 - for(typename Digraph::NodeIt n(g);n!=INVALID;++n)
16.119 + for(typename GR::NodeIt n(g);n!=INVALID;++n)
16.120 if(countInArcs(g,n)!=countOutArcs(g,n)) return false;
16.121 - return connected(Undirector<const Digraph>(g));
16.122 + return connected(Undirector<const GR>(g));
16.123 }
16.124
16.125 }
17.1 --- a/lemon/graph_to_eps.h Thu Mar 05 10:13:20 2009 +0000
17.2 +++ b/lemon/graph_to_eps.h Sun Mar 29 23:08:20 2009 +0200
17.3 @@ -64,11 +64,11 @@
17.4
17.5 ///Default traits class of \ref GraphToEps.
17.6 ///
17.7 -///\c G is the type of the underlying graph.
17.8 -template<class G>
17.9 +///\param GR is the type of the underlying graph.
17.10 +template<class GR>
17.11 struct DefaultGraphToEpsTraits
17.12 {
17.13 - typedef G Graph;
17.14 + typedef GR Graph;
17.15 typedef typename Graph::Node Node;
17.16 typedef typename Graph::NodeIt NodeIt;
17.17 typedef typename Graph::Arc Arc;
17.18 @@ -139,15 +139,14 @@
17.19 ///Constructor
17.20
17.21 ///Constructor
17.22 - ///\param _g Reference to the graph to be printed.
17.23 - ///\param _os Reference to the output stream.
17.24 - ///\param _os Reference to the output stream.
17.25 + ///\param gr Reference to the graph to be printed.
17.26 + ///\param ost Reference to the output stream.
17.27 ///By default it is <tt>std::cout</tt>.
17.28 - ///\param _pros If it is \c true, then the \c ostream referenced by \c _os
17.29 + ///\param pros If it is \c true, then the \c ostream referenced by \c os
17.30 ///will be explicitly deallocated by the destructor.
17.31 - DefaultGraphToEpsTraits(const G &_g,std::ostream& _os=std::cout,
17.32 - bool _pros=false) :
17.33 - g(_g), os(_os),
17.34 + DefaultGraphToEpsTraits(const GR &gr, std::ostream& ost = std::cout,
17.35 + bool pros = false) :
17.36 + g(gr), os(ost),
17.37 _coords(dim2::Point<double>(1,1)), _nodeSizes(1), _nodeShapes(0),
17.38 _nodeColors(WHITE), _arcColors(BLACK),
17.39 _arcWidths(1.0), _arcWidthScale(0.003),
17.40 @@ -158,8 +157,8 @@
17.41 _enableParallel(false), _parArcDist(1),
17.42 _showNodeText(false), _nodeTexts(false), _nodeTextSize(1),
17.43 _showNodePsText(false), _nodePsTexts(false), _nodePsTextsPreamble(0),
17.44 - _undirected(lemon::UndirectedTagIndicator<G>::value),
17.45 - _pleaseRemoveOsStream(_pros), _scaleToA4(false),
17.46 + _undirected(lemon::UndirectedTagIndicator<GR>::value),
17.47 + _pleaseRemoveOsStream(pros), _scaleToA4(false),
17.48 _nodeTextColorType(SAME_COL), _nodeTextColors(BLACK),
17.49 _autoNodeScale(false),
17.50 _autoArcWidthScale(false),
17.51 @@ -1134,55 +1133,55 @@
17.52 ///\warning Don't forget to put the \ref GraphToEps::run() "run()"
17.53 ///to the end of the parameter list.
17.54 ///\sa GraphToEps
17.55 -///\sa graphToEps(G &g, const char *file_name)
17.56 -template<class G>
17.57 -GraphToEps<DefaultGraphToEpsTraits<G> >
17.58 -graphToEps(G &g, std::ostream& os=std::cout)
17.59 +///\sa graphToEps(GR &g, const char *file_name)
17.60 +template<class GR>
17.61 +GraphToEps<DefaultGraphToEpsTraits<GR> >
17.62 +graphToEps(GR &g, std::ostream& os=std::cout)
17.63 {
17.64 return
17.65 - GraphToEps<DefaultGraphToEpsTraits<G> >(DefaultGraphToEpsTraits<G>(g,os));
17.66 + GraphToEps<DefaultGraphToEpsTraits<GR> >(DefaultGraphToEpsTraits<GR>(g,os));
17.67 }
17.68
17.69 ///Generates an EPS file from a graph
17.70
17.71 ///\ingroup eps_io
17.72 ///This function does the same as
17.73 -///\ref graphToEps(G &g,std::ostream& os)
17.74 +///\ref graphToEps(GR &g,std::ostream& os)
17.75 ///but it writes its output into the file \c file_name
17.76 ///instead of a stream.
17.77 -///\sa graphToEps(G &g, std::ostream& os)
17.78 -template<class G>
17.79 -GraphToEps<DefaultGraphToEpsTraits<G> >
17.80 -graphToEps(G &g,const char *file_name)
17.81 +///\sa graphToEps(GR &g, std::ostream& os)
17.82 +template<class GR>
17.83 +GraphToEps<DefaultGraphToEpsTraits<GR> >
17.84 +graphToEps(GR &g,const char *file_name)
17.85 {
17.86 std::ostream* os = new std::ofstream(file_name);
17.87 if (!(*os)) {
17.88 delete os;
17.89 throw IoError("Cannot write file", file_name);
17.90 }
17.91 - return GraphToEps<DefaultGraphToEpsTraits<G> >
17.92 - (DefaultGraphToEpsTraits<G>(g,*os,true));
17.93 + return GraphToEps<DefaultGraphToEpsTraits<GR> >
17.94 + (DefaultGraphToEpsTraits<GR>(g,*os,true));
17.95 }
17.96
17.97 ///Generates an EPS file from a graph
17.98
17.99 ///\ingroup eps_io
17.100 ///This function does the same as
17.101 -///\ref graphToEps(G &g,std::ostream& os)
17.102 +///\ref graphToEps(GR &g,std::ostream& os)
17.103 ///but it writes its output into the file \c file_name
17.104 ///instead of a stream.
17.105 -///\sa graphToEps(G &g, std::ostream& os)
17.106 -template<class G>
17.107 -GraphToEps<DefaultGraphToEpsTraits<G> >
17.108 -graphToEps(G &g,const std::string& file_name)
17.109 +///\sa graphToEps(GR &g, std::ostream& os)
17.110 +template<class GR>
17.111 +GraphToEps<DefaultGraphToEpsTraits<GR> >
17.112 +graphToEps(GR &g,const std::string& file_name)
17.113 {
17.114 std::ostream* os = new std::ofstream(file_name.c_str());
17.115 if (!(*os)) {
17.116 delete os;
17.117 throw IoError("Cannot write file", file_name);
17.118 }
17.119 - return GraphToEps<DefaultGraphToEpsTraits<G> >
17.120 - (DefaultGraphToEpsTraits<G>(g,*os,true));
17.121 + return GraphToEps<DefaultGraphToEpsTraits<GR> >
17.122 + (DefaultGraphToEpsTraits<GR>(g,*os,true));
17.123 }
17.124
17.125 } //END OF NAMESPACE LEMON
18.1 --- a/lemon/grid_graph.h Thu Mar 05 10:13:20 2009 +0000
18.2 +++ b/lemon/grid_graph.h Sun Mar 29 23:08:20 2009 +0200
18.3 @@ -496,7 +496,7 @@
18.4 /// }
18.5 ///\endcode
18.6 ///
18.7 - /// This graph type is fully conform to the \ref concepts::Graph
18.8 + /// This graph type fully conforms to the \ref concepts::Graph
18.9 /// "Graph" concept, and it also has an important extra feature
18.10 /// that its maps are real \ref concepts::ReferenceMap
18.11 /// "reference map"s.
19.1 --- a/lemon/hao_orlin.h Thu Mar 05 10:13:20 2009 +0000
19.2 +++ b/lemon/hao_orlin.h Sun Mar 29 23:08:20 2009 +0200
19.3 @@ -57,27 +57,27 @@
19.4 /// undirected graph you can run just the first phase of the
19.5 /// algorithm or you can use the algorithm of Nagamochi and Ibaraki
19.6 /// which solves the undirected problem in
19.7 - /// \f$ O(nm + n^2 \log(n)) \f$ time: it is implemented in the
19.8 + /// \f$ O(nm + n^2 \log n) \f$ time: it is implemented in the
19.9 /// NagamochiIbaraki algorithm class.
19.10 ///
19.11 - /// \param _Digraph is the graph type of the algorithm.
19.12 - /// \param _CapacityMap is an edge map of capacities which should
19.13 - /// be any numreric type. The default type is _Digraph::ArcMap<int>.
19.14 - /// \param _Tolerance is the handler of the inexact computation. The
19.15 - /// default type for this is Tolerance<CapacityMap::Value>.
19.16 + /// \param GR The digraph class the algorithm runs on.
19.17 + /// \param CAP An arc map of capacities which can be any numreric type.
19.18 + /// The default type is \ref concepts::Digraph::ArcMap "GR::ArcMap<int>".
19.19 + /// \param TOL Tolerance class for handling inexact computations. The
19.20 + /// default tolerance type is \ref Tolerance "Tolerance<CAP::Value>".
19.21 #ifdef DOXYGEN
19.22 - template <typename _Digraph, typename _CapacityMap, typename _Tolerance>
19.23 + template <typename GR, typename CAP, typename TOL>
19.24 #else
19.25 - template <typename _Digraph,
19.26 - typename _CapacityMap = typename _Digraph::template ArcMap<int>,
19.27 - typename _Tolerance = Tolerance<typename _CapacityMap::Value> >
19.28 + template <typename GR,
19.29 + typename CAP = typename GR::template ArcMap<int>,
19.30 + typename TOL = Tolerance<typename CAP::Value> >
19.31 #endif
19.32 class HaoOrlin {
19.33 private:
19.34
19.35 - typedef _Digraph Digraph;
19.36 - typedef _CapacityMap CapacityMap;
19.37 - typedef _Tolerance Tolerance;
19.38 + typedef GR Digraph;
19.39 + typedef CAP CapacityMap;
19.40 + typedef TOL Tolerance;
19.41
19.42 typedef typename CapacityMap::Value Value;
19.43
19.44 @@ -817,7 +817,7 @@
19.45
19.46 /// \name Execution control
19.47 /// The simplest way to execute the algorithm is to use
19.48 - /// one of the member functions called \c run(...).
19.49 + /// one of the member functions called \ref run().
19.50 /// \n
19.51 /// If you need more control on the execution,
19.52 /// first you must call \ref init(), then the \ref calculateIn() or
20.1 --- a/lemon/hypercube_graph.h Thu Mar 05 10:13:20 2009 +0000
20.2 +++ b/lemon/hypercube_graph.h Sun Mar 29 23:08:20 2009 +0200
20.3 @@ -291,7 +291,7 @@
20.4 /// reasons. Thus the maximum dimension of this implementation is 26
20.5 /// (assuming that the size of \c int is 32 bit).
20.6 ///
20.7 - /// This graph type is fully conform to the \ref concepts::Graph
20.8 + /// This graph type fully conforms to the \ref concepts::Graph
20.9 /// "Graph" concept, and it also has an important extra feature
20.10 /// that its maps are real \ref concepts::ReferenceMap
20.11 /// "reference map"s.
21.1 --- a/lemon/lgf_reader.h Thu Mar 05 10:13:20 2009 +0000
21.2 +++ b/lemon/lgf_reader.h Sun Mar 29 23:08:20 2009 +0200
21.3 @@ -448,16 +448,16 @@
21.4 /// It is impossible to read this in
21.5 /// a single pass, because the arcs are not constructed when the node
21.6 /// maps are read.
21.7 - template <typename _Digraph>
21.8 + template <typename GR>
21.9 class DigraphReader {
21.10 public:
21.11
21.12 - typedef _Digraph Digraph;
21.13 + typedef GR Digraph;
21.14 +
21.15 + private:
21.16 +
21.17 TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
21.18
21.19 - private:
21.20 -
21.21 -
21.22 std::istream* _is;
21.23 bool local_is;
21.24 std::string _filename;
21.25 @@ -1246,15 +1246,16 @@
21.26 /// prefixed with \c '+' and \c '-', then these can be read into an
21.27 /// arc map. Similarly, an attribute can be read into an arc, if
21.28 /// it's value is an edge label prefixed with \c '+' or \c '-'.
21.29 - template <typename _Graph>
21.30 + template <typename GR>
21.31 class GraphReader {
21.32 public:
21.33
21.34 - typedef _Graph Graph;
21.35 + typedef GR Graph;
21.36 +
21.37 + private:
21.38 +
21.39 TEMPLATE_GRAPH_TYPEDEFS(Graph);
21.40
21.41 - private:
21.42 -
21.43 std::istream* _is;
21.44 bool local_is;
21.45 std::string _filename;
21.46 @@ -1356,12 +1357,12 @@
21.47 }
21.48
21.49 private:
21.50 - template <typename GR>
21.51 - friend GraphReader<GR> graphReader(GR& graph, std::istream& is);
21.52 - template <typename GR>
21.53 - friend GraphReader<GR> graphReader(GR& graph, const std::string& fn);
21.54 - template <typename GR>
21.55 - friend GraphReader<GR> graphReader(GR& graph, const char *fn);
21.56 + template <typename Graph>
21.57 + friend GraphReader<Graph> graphReader(Graph& graph, std::istream& is);
21.58 + template <typename Graph>
21.59 + friend GraphReader<Graph> graphReader(Graph& graph, const std::string& fn);
21.60 + template <typename Graph>
21.61 + friend GraphReader<Graph> graphReader(Graph& graph, const char *fn);
21.62
21.63 GraphReader(GraphReader& other)
21.64 : _is(other._is), local_is(other.local_is), _graph(other._graph),
22.1 --- a/lemon/lgf_writer.h Thu Mar 05 10:13:20 2009 +0000
22.2 +++ b/lemon/lgf_writer.h Sun Mar 29 23:08:20 2009 +0200
22.3 @@ -406,11 +406,11 @@
22.4 /// section to the stream. The output stream can be retrieved with
22.5 /// the \c ostream() function, hence the second pass can append its
22.6 /// output to the output of the first pass.
22.7 - template <typename _Digraph>
22.8 + template <typename GR>
22.9 class DigraphWriter {
22.10 public:
22.11
22.12 - typedef _Digraph Digraph;
22.13 + typedef GR Digraph;
22.14 TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
22.15
22.16 private:
22.17 @@ -974,11 +974,11 @@
22.18 /// '+' and \c '-'. The arcs are written into the \c \@attributes
22.19 /// section as a \c '+' or a \c '-' prefix (depends on the direction
22.20 /// of the arc) and the label of corresponding edge.
22.21 - template <typename _Graph>
22.22 + template <typename GR>
22.23 class GraphWriter {
22.24 public:
22.25
22.26 - typedef _Graph Graph;
22.27 + typedef GR Graph;
22.28 TEMPLATE_GRAPH_TYPEDEFS(Graph);
22.29
22.30 private:
22.31 @@ -1073,15 +1073,15 @@
22.32
22.33 private:
22.34
22.35 - template <typename GR>
22.36 - friend GraphWriter<GR> graphWriter(const GR& graph,
22.37 - std::ostream& os);
22.38 - template <typename GR>
22.39 - friend GraphWriter<GR> graphWriter(const GR& graph,
22.40 - const std::string& fn);
22.41 - template <typename GR>
22.42 - friend GraphWriter<GR> graphWriter(const GR& graph,
22.43 - const char *fn);
22.44 + template <typename Graph>
22.45 + friend GraphWriter<Graph> graphWriter(const Graph& graph,
22.46 + std::ostream& os);
22.47 + template <typename Graph>
22.48 + friend GraphWriter<Graph> graphWriter(const Graph& graph,
22.49 + const std::string& fn);
22.50 + template <typename Graph>
22.51 + friend GraphWriter<Graph> graphWriter(const Graph& graph,
22.52 + const char *fn);
22.53
22.54 GraphWriter(GraphWriter& other)
22.55 : _os(other._os), local_os(other.local_os), _graph(other._graph),
23.1 --- a/lemon/list_graph.h Thu Mar 05 10:13:20 2009 +0000
23.2 +++ b/lemon/list_graph.h Sun Mar 29 23:08:20 2009 +0200
23.3 @@ -351,14 +351,14 @@
23.4 ///Add a new node to the digraph.
23.5
23.6 ///Add a new node to the digraph.
23.7 - ///\return the new node.
23.8 + ///\return The new node.
23.9 Node addNode() { return Parent::addNode(); }
23.10
23.11 ///Add a new arc to the digraph.
23.12
23.13 ///Add a new arc to the digraph with source node \c s
23.14 ///and target node \c t.
23.15 - ///\return the new arc.
23.16 + ///\return The new arc.
23.17 Arc addArc(const Node& s, const Node& t) {
23.18 return Parent::addArc(s, t);
23.19 }
23.20 @@ -1208,14 +1208,14 @@
23.21 /// \brief Add a new node to the graph.
23.22 ///
23.23 /// Add a new node to the graph.
23.24 - /// \return the new node.
23.25 + /// \return The new node.
23.26 Node addNode() { return Parent::addNode(); }
23.27
23.28 /// \brief Add a new edge to the graph.
23.29 ///
23.30 /// Add a new edge to the graph with source node \c s
23.31 /// and target node \c t.
23.32 - /// \return the new edge.
23.33 + /// \return The new edge.
23.34 Edge addEdge(const Node& s, const Node& t) {
23.35 return Parent::addEdge(s, t);
23.36 }
24.1 --- a/lemon/maps.h Thu Mar 05 10:13:20 2009 +0000
24.2 +++ b/lemon/maps.h Sun Mar 29 23:08:20 2009 +0200
24.3 @@ -63,9 +63,10 @@
24.4 template<typename K, typename V>
24.5 class NullMap : public MapBase<K, V> {
24.6 public:
24.7 - typedef MapBase<K, V> Parent;
24.8 - typedef typename Parent::Key Key;
24.9 - typedef typename Parent::Value Value;
24.10 + ///\e
24.11 + typedef K Key;
24.12 + ///\e
24.13 + typedef V Value;
24.14
24.15 /// Gives back a default constructed element.
24.16 Value operator[](const Key&) const { return Value(); }
24.17 @@ -102,9 +103,10 @@
24.18 private:
24.19 V _value;
24.20 public:
24.21 - typedef MapBase<K, V> Parent;
24.22 - typedef typename Parent::Key Key;
24.23 - typedef typename Parent::Value Value;
24.24 + ///\e
24.25 + typedef K Key;
24.26 + ///\e
24.27 + typedef V Value;
24.28
24.29 /// Default constructor
24.30
24.31 @@ -168,9 +170,10 @@
24.32 template<typename K, typename V, V v>
24.33 class ConstMap<K, Const<V, v> > : public MapBase<K, V> {
24.34 public:
24.35 - typedef MapBase<K, V> Parent;
24.36 - typedef typename Parent::Key Key;
24.37 - typedef typename Parent::Value Value;
24.38 + ///\e
24.39 + typedef K Key;
24.40 + ///\e
24.41 + typedef V Value;
24.42
24.43 /// Constructor.
24.44 ConstMap() {}
24.45 @@ -202,9 +205,10 @@
24.46 template <typename T>
24.47 class IdentityMap : public MapBase<T, T> {
24.48 public:
24.49 - typedef MapBase<T, T> Parent;
24.50 - typedef typename Parent::Key Key;
24.51 - typedef typename Parent::Value Value;
24.52 + ///\e
24.53 + typedef T Key;
24.54 + ///\e
24.55 + typedef T Value;
24.56
24.57 /// Gives back the given value without any modification.
24.58 Value operator[](const Key &k) const {
24.59 @@ -245,11 +249,10 @@
24.60
24.61 public:
24.62
24.63 - typedef MapBase<int, V> Parent;
24.64 /// Key type
24.65 - typedef typename Parent::Key Key;
24.66 + typedef int Key;
24.67 /// Value type
24.68 - typedef typename Parent::Value Value;
24.69 + typedef V Value;
24.70 /// Reference type
24.71 typedef typename Vector::reference Reference;
24.72 /// Const reference type
24.73 @@ -353,17 +356,16 @@
24.74 ///
24.75 /// The simplest way of using this map is through the sparseMap()
24.76 /// function.
24.77 - template <typename K, typename V, typename Compare = std::less<K> >
24.78 + template <typename K, typename V, typename Comp = std::less<K> >
24.79 class SparseMap : public MapBase<K, V> {
24.80 template <typename K1, typename V1, typename C1>
24.81 friend class SparseMap;
24.82 public:
24.83
24.84 - typedef MapBase<K, V> Parent;
24.85 /// Key type
24.86 - typedef typename Parent::Key Key;
24.87 + typedef K Key;
24.88 /// Value type
24.89 - typedef typename Parent::Value Value;
24.90 + typedef V Value;
24.91 /// Reference type
24.92 typedef Value& Reference;
24.93 /// Const reference type
24.94 @@ -373,7 +375,7 @@
24.95
24.96 private:
24.97
24.98 - typedef std::map<K, V, Compare> Map;
24.99 + typedef std::map<K, V, Comp> Map;
24.100 Map _map;
24.101 Value _value;
24.102
24.103 @@ -489,14 +491,15 @@
24.104 const M1 &_m1;
24.105 const M2 &_m2;
24.106 public:
24.107 - typedef MapBase<typename M2::Key, typename M1::Value> Parent;
24.108 - typedef typename Parent::Key Key;
24.109 - typedef typename Parent::Value Value;
24.110 + ///\e
24.111 + typedef typename M2::Key Key;
24.112 + ///\e
24.113 + typedef typename M1::Value Value;
24.114
24.115 /// Constructor
24.116 ComposeMap(const M1 &m1, const M2 &m2) : _m1(m1), _m2(m2) {}
24.117
24.118 - /// \e
24.119 + ///\e
24.120 typename MapTraits<M1>::ConstReturnValue
24.121 operator[](const Key &k) const { return _m1[_m2[k]]; }
24.122 };
24.123 @@ -545,14 +548,15 @@
24.124 const M2 &_m2;
24.125 F _f;
24.126 public:
24.127 - typedef MapBase<typename M1::Key, V> Parent;
24.128 - typedef typename Parent::Key Key;
24.129 - typedef typename Parent::Value Value;
24.130 + ///\e
24.131 + typedef typename M1::Key Key;
24.132 + ///\e
24.133 + typedef V Value;
24.134
24.135 /// Constructor
24.136 CombineMap(const M1 &m1, const M2 &m2, const F &f = F())
24.137 : _m1(m1), _m2(m2), _f(f) {}
24.138 - /// \e
24.139 + ///\e
24.140 Value operator[](const Key &k) const { return _f(_m1[k],_m2[k]); }
24.141 };
24.142
24.143 @@ -615,13 +619,14 @@
24.144 class FunctorToMap : public MapBase<K, V> {
24.145 F _f;
24.146 public:
24.147 - typedef MapBase<K, V> Parent;
24.148 - typedef typename Parent::Key Key;
24.149 - typedef typename Parent::Value Value;
24.150 + ///\e
24.151 + typedef K Key;
24.152 + ///\e
24.153 + typedef V Value;
24.154
24.155 /// Constructor
24.156 FunctorToMap(const F &f = F()) : _f(f) {}
24.157 - /// \e
24.158 + ///\e
24.159 Value operator[](const Key &k) const { return _f(k); }
24.160 };
24.161
24.162 @@ -669,18 +674,19 @@
24.163 class MapToFunctor : public MapBase<typename M::Key, typename M::Value> {
24.164 const M &_m;
24.165 public:
24.166 - typedef MapBase<typename M::Key, typename M::Value> Parent;
24.167 - typedef typename Parent::Key Key;
24.168 - typedef typename Parent::Value Value;
24.169 -
24.170 - typedef typename Parent::Key argument_type;
24.171 - typedef typename Parent::Value result_type;
24.172 + ///\e
24.173 + typedef typename M::Key Key;
24.174 + ///\e
24.175 + typedef typename M::Value Value;
24.176 +
24.177 + typedef typename M::Key argument_type;
24.178 + typedef typename M::Value result_type;
24.179
24.180 /// Constructor
24.181 MapToFunctor(const M &m) : _m(m) {}
24.182 - /// \e
24.183 + ///\e
24.184 Value operator()(const Key &k) const { return _m[k]; }
24.185 - /// \e
24.186 + ///\e
24.187 Value operator[](const Key &k) const { return _m[k]; }
24.188 };
24.189
24.190 @@ -709,9 +715,10 @@
24.191 class ConvertMap : public MapBase<typename M::Key, V> {
24.192 const M &_m;
24.193 public:
24.194 - typedef MapBase<typename M::Key, V> Parent;
24.195 - typedef typename Parent::Key Key;
24.196 - typedef typename Parent::Value Value;
24.197 + ///\e
24.198 + typedef typename M::Key Key;
24.199 + ///\e
24.200 + typedef V Value;
24.201
24.202 /// Constructor
24.203
24.204 @@ -719,7 +726,7 @@
24.205 /// \param m The underlying map.
24.206 ConvertMap(const M &m) : _m(m) {}
24.207
24.208 - /// \e
24.209 + ///\e
24.210 Value operator[](const Key &k) const { return _m[k]; }
24.211 };
24.212
24.213 @@ -751,9 +758,10 @@
24.214 M1 &_m1;
24.215 M2 &_m2;
24.216 public:
24.217 - typedef MapBase<typename M1::Key, typename M1::Value> Parent;
24.218 - typedef typename Parent::Key Key;
24.219 - typedef typename Parent::Value Value;
24.220 + ///\e
24.221 + typedef typename M1::Key Key;
24.222 + ///\e
24.223 + typedef typename M1::Value Value;
24.224
24.225 /// Constructor
24.226 ForkMap(M1 &m1, M2 &m2) : _m1(m1), _m2(m2) {}
24.227 @@ -797,13 +805,14 @@
24.228 const M1 &_m1;
24.229 const M2 &_m2;
24.230 public:
24.231 - typedef MapBase<typename M1::Key, typename M1::Value> Parent;
24.232 - typedef typename Parent::Key Key;
24.233 - typedef typename Parent::Value Value;
24.234 + ///\e
24.235 + typedef typename M1::Key Key;
24.236 + ///\e
24.237 + typedef typename M1::Value Value;
24.238
24.239 /// Constructor
24.240 AddMap(const M1 &m1, const M2 &m2) : _m1(m1), _m2(m2) {}
24.241 - /// \e
24.242 + ///\e
24.243 Value operator[](const Key &k) const { return _m1[k]+_m2[k]; }
24.244 };
24.245
24.246 @@ -845,13 +854,14 @@
24.247 const M1 &_m1;
24.248 const M2 &_m2;
24.249 public:
24.250 - typedef MapBase<typename M1::Key, typename M1::Value> Parent;
24.251 - typedef typename Parent::Key Key;
24.252 - typedef typename Parent::Value Value;
24.253 + ///\e
24.254 + typedef typename M1::Key Key;
24.255 + ///\e
24.256 + typedef typename M1::Value Value;
24.257
24.258 /// Constructor
24.259 SubMap(const M1 &m1, const M2 &m2) : _m1(m1), _m2(m2) {}
24.260 - /// \e
24.261 + ///\e
24.262 Value operator[](const Key &k) const { return _m1[k]-_m2[k]; }
24.263 };
24.264
24.265 @@ -894,13 +904,14 @@
24.266 const M1 &_m1;
24.267 const M2 &_m2;
24.268 public:
24.269 - typedef MapBase<typename M1::Key, typename M1::Value> Parent;
24.270 - typedef typename Parent::Key Key;
24.271 - typedef typename Parent::Value Value;
24.272 + ///\e
24.273 + typedef typename M1::Key Key;
24.274 + ///\e
24.275 + typedef typename M1::Value Value;
24.276
24.277 /// Constructor
24.278 MulMap(const M1 &m1,const M2 &m2) : _m1(m1), _m2(m2) {}
24.279 - /// \e
24.280 + ///\e
24.281 Value operator[](const Key &k) const { return _m1[k]*_m2[k]; }
24.282 };
24.283
24.284 @@ -942,13 +953,14 @@
24.285 const M1 &_m1;
24.286 const M2 &_m2;
24.287 public:
24.288 - typedef MapBase<typename M1::Key, typename M1::Value> Parent;
24.289 - typedef typename Parent::Key Key;
24.290 - typedef typename Parent::Value Value;
24.291 + ///\e
24.292 + typedef typename M1::Key Key;
24.293 + ///\e
24.294 + typedef typename M1::Value Value;
24.295
24.296 /// Constructor
24.297 DivMap(const M1 &m1,const M2 &m2) : _m1(m1), _m2(m2) {}
24.298 - /// \e
24.299 + ///\e
24.300 Value operator[](const Key &k) const { return _m1[k]/_m2[k]; }
24.301 };
24.302
24.303 @@ -992,9 +1004,10 @@
24.304 const M &_m;
24.305 C _v;
24.306 public:
24.307 - typedef MapBase<typename M::Key, typename M::Value> Parent;
24.308 - typedef typename Parent::Key Key;
24.309 - typedef typename Parent::Value Value;
24.310 + ///\e
24.311 + typedef typename M::Key Key;
24.312 + ///\e
24.313 + typedef typename M::Value Value;
24.314
24.315 /// Constructor
24.316
24.317 @@ -1002,7 +1015,7 @@
24.318 /// \param m The undelying map.
24.319 /// \param v The constant value.
24.320 ShiftMap(const M &m, const C &v) : _m(m), _v(v) {}
24.321 - /// \e
24.322 + ///\e
24.323 Value operator[](const Key &k) const { return _m[k]+_v; }
24.324 };
24.325
24.326 @@ -1022,9 +1035,10 @@
24.327 M &_m;
24.328 C _v;
24.329 public:
24.330 - typedef MapBase<typename M::Key, typename M::Value> Parent;
24.331 - typedef typename Parent::Key Key;
24.332 - typedef typename Parent::Value Value;
24.333 + ///\e
24.334 + typedef typename M::Key Key;
24.335 + ///\e
24.336 + typedef typename M::Value Value;
24.337
24.338 /// Constructor
24.339
24.340 @@ -1032,9 +1046,9 @@
24.341 /// \param m The undelying map.
24.342 /// \param v The constant value.
24.343 ShiftWriteMap(M &m, const C &v) : _m(m), _v(v) {}
24.344 - /// \e
24.345 + ///\e
24.346 Value operator[](const Key &k) const { return _m[k]+_v; }
24.347 - /// \e
24.348 + ///\e
24.349 void set(const Key &k, const Value &v) { _m.set(k, v-_v); }
24.350 };
24.351
24.352 @@ -1093,9 +1107,10 @@
24.353 const M &_m;
24.354 C _v;
24.355 public:
24.356 - typedef MapBase<typename M::Key, typename M::Value> Parent;
24.357 - typedef typename Parent::Key Key;
24.358 - typedef typename Parent::Value Value;
24.359 + ///\e
24.360 + typedef typename M::Key Key;
24.361 + ///\e
24.362 + typedef typename M::Value Value;
24.363
24.364 /// Constructor
24.365
24.366 @@ -1103,7 +1118,7 @@
24.367 /// \param m The undelying map.
24.368 /// \param v The constant value.
24.369 ScaleMap(const M &m, const C &v) : _m(m), _v(v) {}
24.370 - /// \e
24.371 + ///\e
24.372 Value operator[](const Key &k) const { return _v*_m[k]; }
24.373 };
24.374
24.375 @@ -1124,9 +1139,10 @@
24.376 M &_m;
24.377 C _v;
24.378 public:
24.379 - typedef MapBase<typename M::Key, typename M::Value> Parent;
24.380 - typedef typename Parent::Key Key;
24.381 - typedef typename Parent::Value Value;
24.382 + ///\e
24.383 + typedef typename M::Key Key;
24.384 + ///\e
24.385 + typedef typename M::Value Value;
24.386
24.387 /// Constructor
24.388
24.389 @@ -1134,9 +1150,9 @@
24.390 /// \param m The undelying map.
24.391 /// \param v The constant value.
24.392 ScaleWriteMap(M &m, const C &v) : _m(m), _v(v) {}
24.393 - /// \e
24.394 + ///\e
24.395 Value operator[](const Key &k) const { return _v*_m[k]; }
24.396 - /// \e
24.397 + ///\e
24.398 void set(const Key &k, const Value &v) { _m.set(k, v/_v); }
24.399 };
24.400
24.401 @@ -1193,13 +1209,14 @@
24.402 class NegMap : public MapBase<typename M::Key, typename M::Value> {
24.403 const M& _m;
24.404 public:
24.405 - typedef MapBase<typename M::Key, typename M::Value> Parent;
24.406 - typedef typename Parent::Key Key;
24.407 - typedef typename Parent::Value Value;
24.408 + ///\e
24.409 + typedef typename M::Key Key;
24.410 + ///\e
24.411 + typedef typename M::Value Value;
24.412
24.413 /// Constructor
24.414 NegMap(const M &m) : _m(m) {}
24.415 - /// \e
24.416 + ///\e
24.417 Value operator[](const Key &k) const { return -_m[k]; }
24.418 };
24.419
24.420 @@ -1228,15 +1245,16 @@
24.421 class NegWriteMap : public MapBase<typename M::Key, typename M::Value> {
24.422 M &_m;
24.423 public:
24.424 - typedef MapBase<typename M::Key, typename M::Value> Parent;
24.425 - typedef typename Parent::Key Key;
24.426 - typedef typename Parent::Value Value;
24.427 + ///\e
24.428 + typedef typename M::Key Key;
24.429 + ///\e
24.430 + typedef typename M::Value Value;
24.431
24.432 /// Constructor
24.433 NegWriteMap(M &m) : _m(m) {}
24.434 - /// \e
24.435 + ///\e
24.436 Value operator[](const Key &k) const { return -_m[k]; }
24.437 - /// \e
24.438 + ///\e
24.439 void set(const Key &k, const Value &v) { _m.set(k, -v); }
24.440 };
24.441
24.442 @@ -1282,13 +1300,14 @@
24.443 class AbsMap : public MapBase<typename M::Key, typename M::Value> {
24.444 const M &_m;
24.445 public:
24.446 - typedef MapBase<typename M::Key, typename M::Value> Parent;
24.447 - typedef typename Parent::Key Key;
24.448 - typedef typename Parent::Value Value;
24.449 + ///\e
24.450 + typedef typename M::Key Key;
24.451 + ///\e
24.452 + typedef typename M::Value Value;
24.453
24.454 /// Constructor
24.455 AbsMap(const M &m) : _m(m) {}
24.456 - /// \e
24.457 + ///\e
24.458 Value operator[](const Key &k) const {
24.459 Value tmp = _m[k];
24.460 return tmp >= 0 ? tmp : -tmp;
24.461 @@ -1337,9 +1356,10 @@
24.462 template <typename K>
24.463 class TrueMap : public MapBase<K, bool> {
24.464 public:
24.465 - typedef MapBase<K, bool> Parent;
24.466 - typedef typename Parent::Key Key;
24.467 - typedef typename Parent::Value Value;
24.468 + ///\e
24.469 + typedef K Key;
24.470 + ///\e
24.471 + typedef bool Value;
24.472
24.473 /// Gives back \c true.
24.474 Value operator[](const Key&) const { return true; }
24.475 @@ -1374,9 +1394,10 @@
24.476 template <typename K>
24.477 class FalseMap : public MapBase<K, bool> {
24.478 public:
24.479 - typedef MapBase<K, bool> Parent;
24.480 - typedef typename Parent::Key Key;
24.481 - typedef typename Parent::Value Value;
24.482 + ///\e
24.483 + typedef K Key;
24.484 + ///\e
24.485 + typedef bool Value;
24.486
24.487 /// Gives back \c false.
24.488 Value operator[](const Key&) const { return false; }
24.489 @@ -1419,13 +1440,14 @@
24.490 const M1 &_m1;
24.491 const M2 &_m2;
24.492 public:
24.493 - typedef MapBase<typename M1::Key, bool> Parent;
24.494 - typedef typename Parent::Key Key;
24.495 - typedef typename Parent::Value Value;
24.496 + ///\e
24.497 + typedef typename M1::Key Key;
24.498 + ///\e
24.499 + typedef bool Value;
24.500
24.501 /// Constructor
24.502 AndMap(const M1 &m1, const M2 &m2) : _m1(m1), _m2(m2) {}
24.503 - /// \e
24.504 + ///\e
24.505 Value operator[](const Key &k) const { return _m1[k]&&_m2[k]; }
24.506 };
24.507
24.508 @@ -1467,13 +1489,14 @@
24.509 const M1 &_m1;
24.510 const M2 &_m2;
24.511 public:
24.512 - typedef MapBase<typename M1::Key, bool> Parent;
24.513 - typedef typename Parent::Key Key;
24.514 - typedef typename Parent::Value Value;
24.515 + ///\e
24.516 + typedef typename M1::Key Key;
24.517 + ///\e
24.518 + typedef bool Value;
24.519
24.520 /// Constructor
24.521 OrMap(const M1 &m1, const M2 &m2) : _m1(m1), _m2(m2) {}
24.522 - /// \e
24.523 + ///\e
24.524 Value operator[](const Key &k) const { return _m1[k]||_m2[k]; }
24.525 };
24.526
24.527 @@ -1506,13 +1529,14 @@
24.528 class NotMap : public MapBase<typename M::Key, bool> {
24.529 const M &_m;
24.530 public:
24.531 - typedef MapBase<typename M::Key, bool> Parent;
24.532 - typedef typename Parent::Key Key;
24.533 - typedef typename Parent::Value Value;
24.534 + ///\e
24.535 + typedef typename M::Key Key;
24.536 + ///\e
24.537 + typedef bool Value;
24.538
24.539 /// Constructor
24.540 NotMap(const M &m) : _m(m) {}
24.541 - /// \e
24.542 + ///\e
24.543 Value operator[](const Key &k) const { return !_m[k]; }
24.544 };
24.545
24.546 @@ -1532,15 +1556,16 @@
24.547 class NotWriteMap : public MapBase<typename M::Key, bool> {
24.548 M &_m;
24.549 public:
24.550 - typedef MapBase<typename M::Key, bool> Parent;
24.551 - typedef typename Parent::Key Key;
24.552 - typedef typename Parent::Value Value;
24.553 + ///\e
24.554 + typedef typename M::Key Key;
24.555 + ///\e
24.556 + typedef bool Value;
24.557
24.558 /// Constructor
24.559 NotWriteMap(M &m) : _m(m) {}
24.560 - /// \e
24.561 + ///\e
24.562 Value operator[](const Key &k) const { return !_m[k]; }
24.563 - /// \e
24.564 + ///\e
24.565 void set(const Key &k, bool v) { _m.set(k, !v); }
24.566 };
24.567
24.568 @@ -1595,13 +1620,14 @@
24.569 const M1 &_m1;
24.570 const M2 &_m2;
24.571 public:
24.572 - typedef MapBase<typename M1::Key, bool> Parent;
24.573 - typedef typename Parent::Key Key;
24.574 - typedef typename Parent::Value Value;
24.575 + ///\e
24.576 + typedef typename M1::Key Key;
24.577 + ///\e
24.578 + typedef bool Value;
24.579
24.580 /// Constructor
24.581 EqualMap(const M1 &m1, const M2 &m2) : _m1(m1), _m2(m2) {}
24.582 - /// \e
24.583 + ///\e
24.584 Value operator[](const Key &k) const { return _m1[k]==_m2[k]; }
24.585 };
24.586
24.587 @@ -1643,13 +1669,14 @@
24.588 const M1 &_m1;
24.589 const M2 &_m2;
24.590 public:
24.591 - typedef MapBase<typename M1::Key, bool> Parent;
24.592 - typedef typename Parent::Key Key;
24.593 - typedef typename Parent::Value Value;
24.594 + ///\e
24.595 + typedef typename M1::Key Key;
24.596 + ///\e
24.597 + typedef bool Value;
24.598
24.599 /// Constructor
24.600 LessMap(const M1 &m1, const M2 &m2) : _m1(m1), _m2(m2) {}
24.601 - /// \e
24.602 + ///\e
24.603 Value operator[](const Key &k) const { return _m1[k]<_m2[k]; }
24.604 };
24.605
24.606 @@ -1705,24 +1732,27 @@
24.607 /// The simplest way of using this map is through the loggerBoolMap()
24.608 /// function.
24.609 ///
24.610 - /// \tparam It The type of the iterator.
24.611 - /// \tparam Ke The key type of the map. The default value set
24.612 + /// \tparam IT The type of the iterator.
24.613 + /// \tparam KEY The key type of the map. The default value set
24.614 /// according to the iterator type should work in most cases.
24.615 ///
24.616 /// \note The container of the iterator must contain enough space
24.617 /// for the elements or the iterator should be an inserter iterator.
24.618 #ifdef DOXYGEN
24.619 - template <typename It, typename Ke>
24.620 + template <typename IT, typename KEY>
24.621 #else
24.622 - template <typename It,
24.623 - typename Ke=typename _maps_bits::IteratorTraits<It>::Value>
24.624 + template <typename IT,
24.625 + typename KEY = typename _maps_bits::IteratorTraits<IT>::Value>
24.626 #endif
24.627 - class LoggerBoolMap {
24.628 + class LoggerBoolMap : public MapBase<KEY, bool> {
24.629 public:
24.630 - typedef It Iterator;
24.631 -
24.632 - typedef Ke Key;
24.633 +
24.634 + ///\e
24.635 + typedef KEY Key;
24.636 + ///\e
24.637 typedef bool Value;
24.638 + ///\e
24.639 + typedef IT Iterator;
24.640
24.641 /// Constructor
24.642 LoggerBoolMap(Iterator it)
24.643 @@ -1785,23 +1815,35 @@
24.644 /// \addtogroup graph_maps
24.645 /// @{
24.646
24.647 - /// Provides an immutable and unique id for each item in the graph.
24.648 -
24.649 - /// The IdMap class provides a unique and immutable id for each item of the
24.650 - /// same type (e.g. node) in the graph. This id is <ul><li>\b unique:
24.651 - /// different items (nodes) get different ids <li>\b immutable: the id of an
24.652 - /// item (node) does not change (even if you delete other nodes). </ul>
24.653 - /// Through this map you get access (i.e. can read) the inner id values of
24.654 - /// the items stored in the graph. This map can be inverted with its member
24.655 + /// \brief Provides an immutable and unique id for each item in a graph.
24.656 + ///
24.657 + /// IdMap provides a unique and immutable id for each item of the
24.658 + /// same type (\c Node, \c Arc or \c Edge) in a graph. This id is
24.659 + /// - \b unique: different items get different ids,
24.660 + /// - \b immutable: the id of an item does not change (even if you
24.661 + /// delete other nodes).
24.662 + ///
24.663 + /// Using this map you get access (i.e. can read) the inner id values of
24.664 + /// the items stored in the graph, which is returned by the \c id()
24.665 + /// function of the graph. This map can be inverted with its member
24.666 /// class \c InverseMap or with the \c operator() member.
24.667 ///
24.668 - template <typename _Graph, typename _Item>
24.669 - class IdMap {
24.670 + /// \tparam GR The graph type.
24.671 + /// \tparam K The key type of the map (\c GR::Node, \c GR::Arc or
24.672 + /// \c GR::Edge).
24.673 + ///
24.674 + /// \see DescriptorMap
24.675 + template <typename GR, typename K>
24.676 + class IdMap : public MapBase<K, int> {
24.677 public:
24.678 - typedef _Graph Graph;
24.679 + /// The graph type of IdMap.
24.680 + typedef GR Graph;
24.681 + /// The key type of IdMap (\c Node, \c Arc or \c Edge).
24.682 + typedef K Item;
24.683 + /// The key type of IdMap (\c Node, \c Arc or \c Edge).
24.684 + typedef K Key;
24.685 + /// The value type of IdMap.
24.686 typedef int Value;
24.687 - typedef _Item Item;
24.688 - typedef _Item Key;
24.689
24.690 /// \brief Constructor.
24.691 ///
24.692 @@ -1813,9 +1855,9 @@
24.693 /// Gives back the immutable and unique \e id of the item.
24.694 int operator[](const Item& item) const { return _graph->id(item);}
24.695
24.696 - /// \brief Gives back the item by its id.
24.697 + /// \brief Gives back the \e item by its id.
24.698 ///
24.699 - /// Gives back the item by its id.
24.700 + /// Gives back the \e item by its id.
24.701 Item operator()(int id) { return _graph->fromId(id, Item()); }
24.702
24.703 private:
24.704 @@ -1823,9 +1865,9 @@
24.705
24.706 public:
24.707
24.708 - /// \brief The class represents the inverse of its owner (IdMap).
24.709 + /// \brief This class represents the inverse of its owner (IdMap).
24.710 ///
24.711 - /// The class represents the inverse of its owner (IdMap).
24.712 + /// This class represents the inverse of its owner (IdMap).
24.713 /// \see inverse()
24.714 class InverseMap {
24.715 public:
24.716 @@ -1843,7 +1885,6 @@
24.717 /// \brief Gives back the given item from its id.
24.718 ///
24.719 /// Gives back the given item from its id.
24.720 - ///
24.721 Item operator[](int id) const { return _graph->fromId(id, Item());}
24.722
24.723 private:
24.724 @@ -1854,56 +1895,57 @@
24.725 ///
24.726 /// Gives back the inverse of the IdMap.
24.727 InverseMap inverse() const { return InverseMap(*_graph);}
24.728 -
24.729 };
24.730
24.731
24.732 - /// \brief General invertable graph-map type.
24.733 -
24.734 - /// This type provides simple invertable graph-maps.
24.735 - /// The InvertableMap wraps an arbitrary ReadWriteMap
24.736 + /// \brief General invertable graph map type.
24.737 +
24.738 + /// This class provides simple invertable graph maps.
24.739 + /// It wraps an arbitrary \ref concepts::ReadWriteMap "ReadWriteMap"
24.740 /// and if a key is set to a new value then store it
24.741 /// in the inverse map.
24.742 ///
24.743 /// The values of the map can be accessed
24.744 /// with stl compatible forward iterator.
24.745 ///
24.746 - /// \tparam _Graph The graph type.
24.747 - /// \tparam _Item The item type of the graph.
24.748 - /// \tparam _Value The value type of the map.
24.749 + /// \tparam GR The graph type.
24.750 + /// \tparam K The key type of the map (\c GR::Node, \c GR::Arc or
24.751 + /// \c GR::Edge).
24.752 + /// \tparam V The value type of the map.
24.753 ///
24.754 /// \see IterableValueMap
24.755 - template <typename _Graph, typename _Item, typename _Value>
24.756 + template <typename GR, typename K, typename V>
24.757 class InvertableMap
24.758 - : protected ItemSetTraits<_Graph, _Item>::template Map<_Value>::Type {
24.759 + : protected ItemSetTraits<GR, K>::template Map<V>::Type {
24.760 private:
24.761
24.762 - typedef typename ItemSetTraits<_Graph, _Item>::
24.763 - template Map<_Value>::Type Map;
24.764 - typedef _Graph Graph;
24.765 -
24.766 - typedef std::map<_Value, _Item> Container;
24.767 + typedef typename ItemSetTraits<GR, K>::
24.768 + template Map<V>::Type Map;
24.769 +
24.770 + typedef std::map<V, K> Container;
24.771 Container _inv_map;
24.772
24.773 public:
24.774
24.775 - /// The key type of InvertableMap (Node, Arc, Edge).
24.776 - typedef typename Map::Key Key;
24.777 - /// The value type of the InvertableMap.
24.778 - typedef typename Map::Value Value;
24.779 + /// The graph type of InvertableMap.
24.780 + typedef GR Graph;
24.781 + /// The key type of InvertableMap (\c Node, \c Arc or \c Edge).
24.782 + typedef K Item;
24.783 + /// The key type of InvertableMap (\c Node, \c Arc or \c Edge).
24.784 + typedef K Key;
24.785 + /// The value type of InvertableMap.
24.786 + typedef V Value;
24.787
24.788 /// \brief Constructor.
24.789 ///
24.790 - /// Construct a new InvertableMap for the graph.
24.791 - ///
24.792 + /// Construct a new InvertableMap for the given graph.
24.793 explicit InvertableMap(const Graph& graph) : Map(graph) {}
24.794
24.795 /// \brief Forward iterator for values.
24.796 ///
24.797 /// This iterator is an stl compatible forward
24.798 /// iterator on the values of the map. The values can
24.799 - /// be accessed in the [beginValue, endValue) range.
24.800 - ///
24.801 + /// be accessed in the <tt>[beginValue, endValue)</tt> range.
24.802 class ValueIterator
24.803 : public std::iterator<std::forward_iterator_tag, Value> {
24.804 friend class InvertableMap;
24.805 @@ -1935,7 +1977,7 @@
24.806 ///
24.807 /// Returns an stl compatible iterator to the
24.808 /// first value of the map. The values of the
24.809 - /// map can be accessed in the [beginValue, endValue)
24.810 + /// map can be accessed in the <tt>[beginValue, endValue)</tt>
24.811 /// range.
24.812 ValueIterator beginValue() const {
24.813 return ValueIterator(_inv_map.begin());
24.814 @@ -1945,15 +1987,15 @@
24.815 ///
24.816 /// Returns an stl compatible iterator after the
24.817 /// last value of the map. The values of the
24.818 - /// map can be accessed in the [beginValue, endValue)
24.819 + /// map can be accessed in the <tt>[beginValue, endValue)</tt>
24.820 /// range.
24.821 ValueIterator endValue() const {
24.822 return ValueIterator(_inv_map.end());
24.823 }
24.824
24.825 - /// \brief The setter function of the map.
24.826 + /// \brief Sets the value associated with the given key.
24.827 ///
24.828 - /// Sets the mapped value.
24.829 + /// Sets the value associated with the given key.
24.830 void set(const Key& key, const Value& val) {
24.831 Value oldval = Map::operator[](key);
24.832 typename Container::iterator it = _inv_map.find(oldval);
24.833 @@ -1964,9 +2006,9 @@
24.834 Map::set(key, val);
24.835 }
24.836
24.837 - /// \brief The getter function of the map.
24.838 + /// \brief Returns the value associated with the given key.
24.839 ///
24.840 - /// It gives back the value associated with the key.
24.841 + /// Returns the value associated with the given key.
24.842 typename MapTraits<Map>::ConstReturnValue
24.843 operator[](const Key& key) const {
24.844 return Map::operator[](key);
24.845 @@ -1982,9 +2024,9 @@
24.846
24.847 protected:
24.848
24.849 - /// \brief Erase the key from the map.
24.850 + /// \brief Erase the key from the map and the inverse map.
24.851 ///
24.852 - /// Erase the key to the map. It is called by the
24.853 + /// Erase the key from the map and the inverse map. It is called by the
24.854 /// \c AlterationNotifier.
24.855 virtual void erase(const Key& key) {
24.856 Value val = Map::operator[](key);
24.857 @@ -1995,9 +2037,9 @@
24.858 Map::erase(key);
24.859 }
24.860
24.861 - /// \brief Erase more keys from the map.
24.862 + /// \brief Erase more keys from the map and the inverse map.
24.863 ///
24.864 - /// Erase more keys from the map. It is called by the
24.865 + /// Erase more keys from the map and the inverse map. It is called by the
24.866 /// \c AlterationNotifier.
24.867 virtual void erase(const std::vector<Key>& keys) {
24.868 for (int i = 0; i < int(keys.size()); ++i) {
24.869 @@ -2010,9 +2052,9 @@
24.870 Map::erase(keys);
24.871 }
24.872
24.873 - /// \brief Clear the keys from the map and inverse map.
24.874 + /// \brief Clear the keys from the map and the inverse map.
24.875 ///
24.876 - /// Clear the keys from the map and inverse map. It is called by the
24.877 + /// Clear the keys from the map and the inverse map. It is called by the
24.878 /// \c AlterationNotifier.
24.879 virtual void clear() {
24.880 _inv_map.clear();
24.881 @@ -2024,10 +2066,10 @@
24.882 /// \brief The inverse map type.
24.883 ///
24.884 /// The inverse of this map. The subscript operator of the map
24.885 - /// gives back always the item what was last assigned to the value.
24.886 + /// gives back the item that was last assigned to the value.
24.887 class InverseMap {
24.888 public:
24.889 - /// \brief Constructor of the InverseMap.
24.890 + /// \brief Constructor
24.891 ///
24.892 /// Constructor of the InverseMap.
24.893 explicit InverseMap(const InvertableMap& inverted)
24.894 @@ -2040,8 +2082,8 @@
24.895
24.896 /// \brief Subscript operator.
24.897 ///
24.898 - /// Subscript operator. It gives back always the item
24.899 - /// what was last assigned to the value.
24.900 + /// Subscript operator. It gives back the item
24.901 + /// that was last assigned to the given value.
24.902 Value operator[](const Key& key) const {
24.903 return _inverted(key);
24.904 }
24.905 @@ -2050,9 +2092,9 @@
24.906 const InvertableMap& _inverted;
24.907 };
24.908
24.909 - /// \brief It gives back the just readable inverse map.
24.910 + /// \brief It gives back the read-only inverse map.
24.911 ///
24.912 - /// It gives back the just readable inverse map.
24.913 + /// It gives back the read-only inverse map.
24.914 InverseMap inverse() const {
24.915 return InverseMap(*this);
24.916 }
24.917 @@ -2060,40 +2102,48 @@
24.918 };
24.919
24.920 /// \brief Provides a mutable, continuous and unique descriptor for each
24.921 - /// item in the graph.
24.922 + /// item in a graph.
24.923 ///
24.924 - /// The DescriptorMap class provides a unique and continuous (but mutable)
24.925 - /// descriptor (id) for each item of the same type (e.g. node) in the
24.926 - /// graph. This id is <ul><li>\b unique: different items (nodes) get
24.927 - /// different ids <li>\b continuous: the range of the ids is the set of
24.928 - /// integers between 0 and \c n-1, where \c n is the number of the items of
24.929 - /// this type (e.g. nodes) (so the id of a node can change if you delete an
24.930 - /// other node, i.e. this id is mutable). </ul> This map can be inverted
24.931 - /// with its member class \c InverseMap, or with the \c operator() member.
24.932 + /// DescriptorMap provides a unique and continuous (but mutable)
24.933 + /// descriptor (id) for each item of the same type (\c Node, \c Arc or
24.934 + /// \c Edge) in a graph. This id is
24.935 + /// - \b unique: different items get different ids,
24.936 + /// - \b continuous: the range of the ids is the set of integers
24.937 + /// between 0 and \c n-1, where \c n is the number of the items of
24.938 + /// this type (\c Node, \c Arc or \c Edge). So the id of an item can
24.939 + /// change if you delete an other item of the same type, i.e. this
24.940 + /// id is mutable.
24.941 ///
24.942 - /// \tparam _Graph The graph class the \c DescriptorMap belongs to.
24.943 - /// \tparam _Item The Item is the Key of the Map. It may be Node, Arc or
24.944 - /// Edge.
24.945 - template <typename _Graph, typename _Item>
24.946 + /// Thus this id is not (necessarily) the same as what can get using
24.947 + /// the \c id() function of the graph or \ref IdMap.
24.948 + /// This map can be inverted with its member class \c InverseMap,
24.949 + /// or with the \c operator() member.
24.950 + ///
24.951 + /// \tparam GR The graph type.
24.952 + /// \tparam K The key type of the map (\c GR::Node, \c GR::Arc or
24.953 + /// \c GR::Edge).
24.954 + ///
24.955 + /// \see IdMap
24.956 + template <typename GR, typename K>
24.957 class DescriptorMap
24.958 - : protected ItemSetTraits<_Graph, _Item>::template Map<int>::Type {
24.959 -
24.960 - typedef _Item Item;
24.961 - typedef typename ItemSetTraits<_Graph, _Item>::template Map<int>::Type Map;
24.962 + : protected ItemSetTraits<GR, K>::template Map<int>::Type {
24.963 +
24.964 + typedef typename ItemSetTraits<GR, K>::template Map<int>::Type Map;
24.965
24.966 public:
24.967 - /// The graph class of DescriptorMap.
24.968 - typedef _Graph Graph;
24.969 -
24.970 - /// The key type of DescriptorMap (Node, Arc, Edge).
24.971 - typedef typename Map::Key Key;
24.972 + /// The graph type of DescriptorMap.
24.973 + typedef GR Graph;
24.974 + /// The key type of DescriptorMap (\c Node, \c Arc or \c Edge).
24.975 + typedef K Item;
24.976 + /// The key type of DescriptorMap (\c Node, \c Arc or \c Edge).
24.977 + typedef K Key;
24.978 /// The value type of DescriptorMap.
24.979 - typedef typename Map::Value Value;
24.980 + typedef int Value;
24.981
24.982 /// \brief Constructor.
24.983 ///
24.984 /// Constructor for descriptor map.
24.985 - explicit DescriptorMap(const Graph& _graph) : Map(_graph) {
24.986 + explicit DescriptorMap(const Graph& gr) : Map(gr) {
24.987 Item it;
24.988 const typename Map::Notifier* nf = Map::notifier();
24.989 for (nf->first(it); it != INVALID; nf->next(it)) {
24.990 @@ -2104,7 +2154,7 @@
24.991
24.992 protected:
24.993
24.994 - /// \brief Add a new key to the map.
24.995 + /// \brief Adds a new key to the map.
24.996 ///
24.997 /// Add a new key to the map. It is called by the
24.998 /// \c AlterationNotifier.
24.999 @@ -2214,12 +2264,13 @@
24.1000 Container _inv_map;
24.1001
24.1002 public:
24.1003 +
24.1004 /// \brief The inverse map type of DescriptorMap.
24.1005 ///
24.1006 /// The inverse map type of DescriptorMap.
24.1007 class InverseMap {
24.1008 public:
24.1009 - /// \brief Constructor of the InverseMap.
24.1010 + /// \brief Constructor
24.1011 ///
24.1012 /// Constructor of the InverseMap.
24.1013 explicit InverseMap(const DescriptorMap& inverted)
24.1014 @@ -2234,7 +2285,7 @@
24.1015 /// \brief Subscript operator.
24.1016 ///
24.1017 /// Subscript operator. It gives back the item
24.1018 - /// that the descriptor belongs to currently.
24.1019 + /// that the descriptor currently belongs to.
24.1020 Value operator[](const Key& key) const {
24.1021 return _inverted(key);
24.1022 }
24.1023 @@ -2258,230 +2309,198 @@
24.1024 }
24.1025 };
24.1026
24.1027 - /// \brief Returns the source of the given arc.
24.1028 + /// \brief Map of the source nodes of arcs in a digraph.
24.1029 ///
24.1030 - /// The SourceMap gives back the source Node of the given arc.
24.1031 + /// SourceMap provides access for the source node of each arc in a digraph,
24.1032 + /// which is returned by the \c source() function of the digraph.
24.1033 + /// \tparam GR The digraph type.
24.1034 /// \see TargetMap
24.1035 - template <typename Digraph>
24.1036 + template <typename GR>
24.1037 class SourceMap {
24.1038 public:
24.1039
24.1040 - typedef typename Digraph::Node Value;
24.1041 - typedef typename Digraph::Arc Key;
24.1042 + ///\e
24.1043 + typedef typename GR::Arc Key;
24.1044 + ///\e
24.1045 + typedef typename GR::Node Value;
24.1046
24.1047 /// \brief Constructor
24.1048 ///
24.1049 - /// Constructor
24.1050 + /// Constructor.
24.1051 /// \param digraph The digraph that the map belongs to.
24.1052 - explicit SourceMap(const Digraph& digraph) : _digraph(digraph) {}
24.1053 -
24.1054 - /// \brief The subscript operator.
24.1055 + explicit SourceMap(const GR& digraph) : _graph(digraph) {}
24.1056 +
24.1057 + /// \brief Returns the source node of the given arc.
24.1058 ///
24.1059 - /// The subscript operator.
24.1060 - /// \param arc The arc
24.1061 - /// \return The source of the arc
24.1062 + /// Returns the source node of the given arc.
24.1063 Value operator[](const Key& arc) const {
24.1064 - return _digraph.source(arc);
24.1065 + return _graph.source(arc);
24.1066 }
24.1067
24.1068 private:
24.1069 - const Digraph& _digraph;
24.1070 + const GR& _graph;
24.1071 };
24.1072
24.1073 /// \brief Returns a \c SourceMap class.
24.1074 ///
24.1075 /// This function just returns an \c SourceMap class.
24.1076 /// \relates SourceMap
24.1077 - template <typename Digraph>
24.1078 - inline SourceMap<Digraph> sourceMap(const Digraph& digraph) {
24.1079 - return SourceMap<Digraph>(digraph);
24.1080 + template <typename GR>
24.1081 + inline SourceMap<GR> sourceMap(const GR& graph) {
24.1082 + return SourceMap<GR>(graph);
24.1083 }
24.1084
24.1085 - /// \brief Returns the target of the given arc.
24.1086 + /// \brief Map of the target nodes of arcs in a digraph.
24.1087 ///
24.1088 - /// The TargetMap gives back the target Node of the given arc.
24.1089 + /// TargetMap provides access for the target node of each arc in a digraph,
24.1090 + /// which is returned by the \c target() function of the digraph.
24.1091 + /// \tparam GR The digraph type.
24.1092 /// \see SourceMap
24.1093 - template <typename Digraph>
24.1094 + template <typename GR>
24.1095 class TargetMap {
24.1096 public:
24.1097
24.1098 - typedef typename Digraph::Node Value;
24.1099 - typedef typename Digraph::Arc Key;
24.1100 + ///\e
24.1101 + typedef typename GR::Arc Key;
24.1102 + ///\e
24.1103 + typedef typename GR::Node Value;
24.1104
24.1105 /// \brief Constructor
24.1106 ///
24.1107 - /// Constructor
24.1108 + /// Constructor.
24.1109 /// \param digraph The digraph that the map belongs to.
24.1110 - explicit TargetMap(const Digraph& digraph) : _digraph(digraph) {}
24.1111 -
24.1112 - /// \brief The subscript operator.
24.1113 + explicit TargetMap(const GR& digraph) : _graph(digraph) {}
24.1114 +
24.1115 + /// \brief Returns the target node of the given arc.
24.1116 ///
24.1117 - /// The subscript operator.
24.1118 - /// \param e The arc
24.1119 - /// \return The target of the arc
24.1120 + /// Returns the target node of the given arc.
24.1121 Value operator[](const Key& e) const {
24.1122 - return _digraph.target(e);
24.1123 + return _graph.target(e);
24.1124 }
24.1125
24.1126 private:
24.1127 - const Digraph& _digraph;
24.1128 + const GR& _graph;
24.1129 };
24.1130
24.1131 /// \brief Returns a \c TargetMap class.
24.1132 ///
24.1133 /// This function just returns a \c TargetMap class.
24.1134 /// \relates TargetMap
24.1135 - template <typename Digraph>
24.1136 - inline TargetMap<Digraph> targetMap(const Digraph& digraph) {
24.1137 - return TargetMap<Digraph>(digraph);
24.1138 + template <typename GR>
24.1139 + inline TargetMap<GR> targetMap(const GR& graph) {
24.1140 + return TargetMap<GR>(graph);
24.1141 }
24.1142
24.1143 - /// \brief Returns the "forward" directed arc view of an edge.
24.1144 + /// \brief Map of the "forward" directed arc view of edges in a graph.
24.1145 ///
24.1146 - /// Returns the "forward" directed arc view of an edge.
24.1147 + /// ForwardMap provides access for the "forward" directed arc view of
24.1148 + /// each edge in a graph, which is returned by the \c direct() function
24.1149 + /// of the graph with \c true parameter.
24.1150 + /// \tparam GR The graph type.
24.1151 /// \see BackwardMap
24.1152 - template <typename Graph>
24.1153 + template <typename GR>
24.1154 class ForwardMap {
24.1155 public:
24.1156
24.1157 - typedef typename Graph::Arc Value;
24.1158 - typedef typename Graph::Edge Key;
24.1159 + typedef typename GR::Arc Value;
24.1160 + typedef typename GR::Edge Key;
24.1161
24.1162 /// \brief Constructor
24.1163 ///
24.1164 - /// Constructor
24.1165 + /// Constructor.
24.1166 /// \param graph The graph that the map belongs to.
24.1167 - explicit ForwardMap(const Graph& graph) : _graph(graph) {}
24.1168 -
24.1169 - /// \brief The subscript operator.
24.1170 + explicit ForwardMap(const GR& graph) : _graph(graph) {}
24.1171 +
24.1172 + /// \brief Returns the "forward" directed arc view of the given edge.
24.1173 ///
24.1174 - /// The subscript operator.
24.1175 - /// \param key An edge
24.1176 - /// \return The "forward" directed arc view of edge
24.1177 + /// Returns the "forward" directed arc view of the given edge.
24.1178 Value operator[](const Key& key) const {
24.1179 return _graph.direct(key, true);
24.1180 }
24.1181
24.1182 private:
24.1183 - const Graph& _graph;
24.1184 + const GR& _graph;
24.1185 };
24.1186
24.1187 /// \brief Returns a \c ForwardMap class.
24.1188 ///
24.1189 /// This function just returns an \c ForwardMap class.
24.1190 /// \relates ForwardMap
24.1191 - template <typename Graph>
24.1192 - inline ForwardMap<Graph> forwardMap(const Graph& graph) {
24.1193 - return ForwardMap<Graph>(graph);
24.1194 + template <typename GR>
24.1195 + inline ForwardMap<GR> forwardMap(const GR& graph) {
24.1196 + return ForwardMap<GR>(graph);
24.1197 }
24.1198
24.1199 - /// \brief Returns the "backward" directed arc view of an edge.
24.1200 + /// \brief Map of the "backward" directed arc view of edges in a graph.
24.1201 ///
24.1202 - /// Returns the "backward" directed arc view of an edge.
24.1203 + /// BackwardMap provides access for the "backward" directed arc view of
24.1204 + /// each edge in a graph, which is returned by the \c direct() function
24.1205 + /// of the graph with \c false parameter.
24.1206 + /// \tparam GR The graph type.
24.1207 /// \see ForwardMap
24.1208 - template <typename Graph>
24.1209 + template <typename GR>
24.1210 class BackwardMap {
24.1211 public:
24.1212
24.1213 - typedef typename Graph::Arc Value;
24.1214 - typedef typename Graph::Edge Key;
24.1215 + typedef typename GR::Arc Value;
24.1216 + typedef typename GR::Edge Key;
24.1217
24.1218 /// \brief Constructor
24.1219 ///
24.1220 - /// Constructor
24.1221 + /// Constructor.
24.1222 /// \param graph The graph that the map belongs to.
24.1223 - explicit BackwardMap(const Graph& graph) : _graph(graph) {}
24.1224 -
24.1225 - /// \brief The subscript operator.
24.1226 + explicit BackwardMap(const GR& graph) : _graph(graph) {}
24.1227 +
24.1228 + /// \brief Returns the "backward" directed arc view of the given edge.
24.1229 ///
24.1230 - /// The subscript operator.
24.1231 - /// \param key An edge
24.1232 - /// \return The "backward" directed arc view of edge
24.1233 + /// Returns the "backward" directed arc view of the given edge.
24.1234 Value operator[](const Key& key) const {
24.1235 return _graph.direct(key, false);
24.1236 }
24.1237
24.1238 private:
24.1239 - const Graph& _graph;
24.1240 + const GR& _graph;
24.1241 };
24.1242
24.1243 /// \brief Returns a \c BackwardMap class
24.1244
24.1245 /// This function just returns a \c BackwardMap class.
24.1246 /// \relates BackwardMap
24.1247 - template <typename Graph>
24.1248 - inline BackwardMap<Graph> backwardMap(const Graph& graph) {
24.1249 - return BackwardMap<Graph>(graph);
24.1250 + template <typename GR>
24.1251 + inline BackwardMap<GR> backwardMap(const GR& graph) {
24.1252 + return BackwardMap<GR>(graph);
24.1253 }
24.1254
24.1255 - /// \brief Potential difference map
24.1256 - ///
24.1257 - /// If there is an potential map on the nodes then we
24.1258 - /// can get an arc map as we get the substraction of the
24.1259 - /// values of the target and source.
24.1260 - template <typename Digraph, typename NodeMap>
24.1261 - class PotentialDifferenceMap {
24.1262 - public:
24.1263 - typedef typename Digraph::Arc Key;
24.1264 - typedef typename NodeMap::Value Value;
24.1265 -
24.1266 - /// \brief Constructor
24.1267 - ///
24.1268 - /// Contructor of the map
24.1269 - explicit PotentialDifferenceMap(const Digraph& digraph,
24.1270 - const NodeMap& potential)
24.1271 - : _digraph(digraph), _potential(potential) {}
24.1272 -
24.1273 - /// \brief Const subscription operator
24.1274 - ///
24.1275 - /// Const subscription operator
24.1276 - Value operator[](const Key& arc) const {
24.1277 - return _potential[_digraph.target(arc)] -
24.1278 - _potential[_digraph.source(arc)];
24.1279 - }
24.1280 -
24.1281 - private:
24.1282 - const Digraph& _digraph;
24.1283 - const NodeMap& _potential;
24.1284 - };
24.1285 -
24.1286 - /// \brief Returns a PotentialDifferenceMap.
24.1287 - ///
24.1288 - /// This function just returns a PotentialDifferenceMap.
24.1289 - /// \relates PotentialDifferenceMap
24.1290 - template <typename Digraph, typename NodeMap>
24.1291 - PotentialDifferenceMap<Digraph, NodeMap>
24.1292 - potentialDifferenceMap(const Digraph& digraph, const NodeMap& potential) {
24.1293 - return PotentialDifferenceMap<Digraph, NodeMap>(digraph, potential);
24.1294 - }
24.1295 -
24.1296 - /// \brief Map of the node in-degrees.
24.1297 + /// \brief Map of the in-degrees of nodes in a digraph.
24.1298 ///
24.1299 /// This map returns the in-degree of a node. Once it is constructed,
24.1300 - /// the degrees are stored in a standard NodeMap, so each query is done
24.1301 + /// the degrees are stored in a standard \c NodeMap, so each query is done
24.1302 /// in constant time. On the other hand, the values are updated automatically
24.1303 /// whenever the digraph changes.
24.1304 ///
24.1305 - /// \warning Besides addNode() and addArc(), a digraph structure may provide
24.1306 - /// alternative ways to modify the digraph. The correct behavior of InDegMap
24.1307 - /// is not guarantied if these additional features are used. For example
24.1308 - /// the functions \ref ListDigraph::changeSource() "changeSource()",
24.1309 + /// \warning Besides \c addNode() and \c addArc(), a digraph structure
24.1310 + /// may provide alternative ways to modify the digraph.
24.1311 + /// The correct behavior of InDegMap is not guarantied if these additional
24.1312 + /// features are used. For example the functions
24.1313 + /// \ref ListDigraph::changeSource() "changeSource()",
24.1314 /// \ref ListDigraph::changeTarget() "changeTarget()" and
24.1315 /// \ref ListDigraph::reverseArc() "reverseArc()"
24.1316 /// of \ref ListDigraph will \e not update the degree values correctly.
24.1317 ///
24.1318 /// \sa OutDegMap
24.1319 -
24.1320 - template <typename _Digraph>
24.1321 + template <typename GR>
24.1322 class InDegMap
24.1323 - : protected ItemSetTraits<_Digraph, typename _Digraph::Arc>
24.1324 + : protected ItemSetTraits<GR, typename GR::Arc>
24.1325 ::ItemNotifier::ObserverBase {
24.1326
24.1327 public:
24.1328 -
24.1329 - typedef _Digraph Digraph;
24.1330 +
24.1331 + /// The digraph type
24.1332 + typedef GR Digraph;
24.1333 + /// The key type
24.1334 + typedef typename Digraph::Node Key;
24.1335 + /// The value type
24.1336 typedef int Value;
24.1337 - typedef typename Digraph::Node Key;
24.1338
24.1339 typedef typename ItemSetTraits<Digraph, typename Digraph::Arc>
24.1340 ::ItemNotifier::ObserverBase Parent;
24.1341 @@ -2523,9 +2542,9 @@
24.1342
24.1343 /// \brief Constructor.
24.1344 ///
24.1345 - /// Constructor for creating in-degree map.
24.1346 - explicit InDegMap(const Digraph& digraph)
24.1347 - : _digraph(digraph), _deg(digraph) {
24.1348 + /// Constructor for creating an in-degree map.
24.1349 + explicit InDegMap(const Digraph& graph)
24.1350 + : _digraph(graph), _deg(graph) {
24.1351 Parent::attach(_digraph.notifier(typename Digraph::Arc()));
24.1352
24.1353 for(typename Digraph::NodeIt it(_digraph); it != INVALID; ++it) {
24.1354 @@ -2533,6 +2552,8 @@
24.1355 }
24.1356 }
24.1357
24.1358 + /// \brief Gives back the in-degree of a Node.
24.1359 + ///
24.1360 /// Gives back the in-degree of a Node.
24.1361 int operator[](const Key& key) const {
24.1362 return _deg[key];
24.1363 @@ -2579,33 +2600,36 @@
24.1364 AutoNodeMap _deg;
24.1365 };
24.1366
24.1367 - /// \brief Map of the node out-degrees.
24.1368 + /// \brief Map of the out-degrees of nodes in a digraph.
24.1369 ///
24.1370 /// This map returns the out-degree of a node. Once it is constructed,
24.1371 - /// the degrees are stored in a standard NodeMap, so each query is done
24.1372 + /// the degrees are stored in a standard \c NodeMap, so each query is done
24.1373 /// in constant time. On the other hand, the values are updated automatically
24.1374 /// whenever the digraph changes.
24.1375 ///
24.1376 - /// \warning Besides addNode() and addArc(), a digraph structure may provide
24.1377 - /// alternative ways to modify the digraph. The correct behavior of OutDegMap
24.1378 - /// is not guarantied if these additional features are used. For example
24.1379 - /// the functions \ref ListDigraph::changeSource() "changeSource()",
24.1380 + /// \warning Besides \c addNode() and \c addArc(), a digraph structure
24.1381 + /// may provide alternative ways to modify the digraph.
24.1382 + /// The correct behavior of OutDegMap is not guarantied if these additional
24.1383 + /// features are used. For example the functions
24.1384 + /// \ref ListDigraph::changeSource() "changeSource()",
24.1385 /// \ref ListDigraph::changeTarget() "changeTarget()" and
24.1386 /// \ref ListDigraph::reverseArc() "reverseArc()"
24.1387 /// of \ref ListDigraph will \e not update the degree values correctly.
24.1388 ///
24.1389 /// \sa InDegMap
24.1390 -
24.1391 - template <typename _Digraph>
24.1392 + template <typename GR>
24.1393 class OutDegMap
24.1394 - : protected ItemSetTraits<_Digraph, typename _Digraph::Arc>
24.1395 + : protected ItemSetTraits<GR, typename GR::Arc>
24.1396 ::ItemNotifier::ObserverBase {
24.1397
24.1398 public:
24.1399
24.1400 - typedef _Digraph Digraph;
24.1401 + /// The digraph type
24.1402 + typedef GR Digraph;
24.1403 + /// The key type
24.1404 + typedef typename Digraph::Node Key;
24.1405 + /// The value type
24.1406 typedef int Value;
24.1407 - typedef typename Digraph::Node Key;
24.1408
24.1409 typedef typename ItemSetTraits<Digraph, typename Digraph::Arc>
24.1410 ::ItemNotifier::ObserverBase Parent;
24.1411 @@ -2645,9 +2669,9 @@
24.1412
24.1413 /// \brief Constructor.
24.1414 ///
24.1415 - /// Constructor for creating out-degree map.
24.1416 - explicit OutDegMap(const Digraph& digraph)
24.1417 - : _digraph(digraph), _deg(digraph) {
24.1418 + /// Constructor for creating an out-degree map.
24.1419 + explicit OutDegMap(const Digraph& graph)
24.1420 + : _digraph(graph), _deg(graph) {
24.1421 Parent::attach(_digraph.notifier(typename Digraph::Arc()));
24.1422
24.1423 for(typename Digraph::NodeIt it(_digraph); it != INVALID; ++it) {
24.1424 @@ -2655,6 +2679,8 @@
24.1425 }
24.1426 }
24.1427
24.1428 + /// \brief Gives back the out-degree of a Node.
24.1429 + ///
24.1430 /// Gives back the out-degree of a Node.
24.1431 int operator[](const Key& key) const {
24.1432 return _deg[key];
24.1433 @@ -2701,6 +2727,56 @@
24.1434 AutoNodeMap _deg;
24.1435 };
24.1436
24.1437 + /// \brief Potential difference map
24.1438 + ///
24.1439 + /// PotentialMap returns the difference between the potentials of the
24.1440 + /// source and target nodes of each arc in a digraph, i.e. it returns
24.1441 + /// \code
24.1442 + /// potential[gr.target(arc)] - potential[gr.source(arc)].
24.1443 + /// \endcode
24.1444 + /// \tparam GR The digraph type.
24.1445 + /// \tparam POT A node map storing the potentials.
24.1446 + template <typename GR, typename POT>
24.1447 + class PotentialDifferenceMap {
24.1448 + public:
24.1449 + /// Key type
24.1450 + typedef typename GR::Arc Key;
24.1451 + /// Value type
24.1452 + typedef typename POT::Value Value;
24.1453 +
24.1454 + /// \brief Constructor
24.1455 + ///
24.1456 + /// Contructor of the map.
24.1457 + explicit PotentialDifferenceMap(const GR& gr,
24.1458 + const POT& potential)
24.1459 + : _digraph(gr), _potential(potential) {}
24.1460 +
24.1461 + /// \brief Returns the potential difference for the given arc.
24.1462 + ///
24.1463 + /// Returns the potential difference for the given arc, i.e.
24.1464 + /// \code
24.1465 + /// potential[gr.target(arc)] - potential[gr.source(arc)].
24.1466 + /// \endcode
24.1467 + Value operator[](const Key& arc) const {
24.1468 + return _potential[_digraph.target(arc)] -
24.1469 + _potential[_digraph.source(arc)];
24.1470 + }
24.1471 +
24.1472 + private:
24.1473 + const GR& _digraph;
24.1474 + const POT& _potential;
24.1475 + };
24.1476 +
24.1477 + /// \brief Returns a PotentialDifferenceMap.
24.1478 + ///
24.1479 + /// This function just returns a PotentialDifferenceMap.
24.1480 + /// \relates PotentialDifferenceMap
24.1481 + template <typename GR, typename POT>
24.1482 + PotentialDifferenceMap<GR, POT>
24.1483 + potentialDifferenceMap(const GR& gr, const POT& potential) {
24.1484 + return PotentialDifferenceMap<GR, POT>(gr, potential);
24.1485 + }
24.1486 +
24.1487 /// @}
24.1488 }
24.1489
25.1 --- a/lemon/max_matching.h Thu Mar 05 10:13:20 2009 +0000
25.2 +++ b/lemon/max_matching.h Sun Mar 29 23:08:20 2009 +0200
25.3 @@ -55,12 +55,12 @@
25.4 /// tight. This decomposition can be attained by calling \c
25.5 /// decomposition() after running the algorithm.
25.6 ///
25.7 - /// \param _Graph The graph type the algorithm runs on.
25.8 - template <typename _Graph>
25.9 + /// \param GR The graph type the algorithm runs on.
25.10 + template <typename GR>
25.11 class MaxMatching {
25.12 public:
25.13
25.14 - typedef _Graph Graph;
25.15 + typedef GR Graph;
25.16 typedef typename Graph::template NodeMap<typename Graph::Arc>
25.17 MatchingMap;
25.18
25.19 @@ -463,7 +463,7 @@
25.20 /// Initialize the matching from a \c bool valued \c Edge map. This
25.21 /// map must have the property that there are no two incident edges
25.22 /// with true value, ie. it contains a matching.
25.23 - /// \return %True if the map contains a matching.
25.24 + /// \return \c true if the map contains a matching.
25.25 template <typename MatchingMap>
25.26 bool matchingInit(const MatchingMap& matching) {
25.27 createStructures();
25.28 @@ -613,7 +613,7 @@
25.29 /// This class provides an efficient implementation of Edmond's
25.30 /// maximum weighted matching algorithm. The implementation is based
25.31 /// on extensive use of priority queues and provides
25.32 - /// \f$O(nm\log(n))\f$ time complexity.
25.33 + /// \f$O(nm\log n)\f$ time complexity.
25.34 ///
25.35 /// The maximum weighted matching problem is to find undirected
25.36 /// edges in the graph with maximum overall weight and no two of
25.37 @@ -647,13 +647,16 @@
25.38 /// "BlossomIt" nested class, which is able to iterate on the nodes
25.39 /// of a blossom. If the value type is integral then the dual
25.40 /// solution is multiplied by \ref MaxWeightedMatching::dualScale "4".
25.41 - template <typename _Graph,
25.42 - typename _WeightMap = typename _Graph::template EdgeMap<int> >
25.43 + template <typename GR,
25.44 + typename WM = typename GR::template EdgeMap<int> >
25.45 class MaxWeightedMatching {
25.46 public:
25.47
25.48 - typedef _Graph Graph;
25.49 - typedef _WeightMap WeightMap;
25.50 + ///\e
25.51 + typedef GR Graph;
25.52 + ///\e
25.53 + typedef WM WeightMap;
25.54 + ///\e
25.55 typedef typename WeightMap::Value Value;
25.56
25.57 /// \brief Scaling factor for dual solution
25.58 @@ -1957,7 +1960,7 @@
25.59 /// This class provides an efficient implementation of Edmond's
25.60 /// maximum weighted perfect matching algorithm. The implementation
25.61 /// is based on extensive use of priority queues and provides
25.62 - /// \f$O(nm\log(n))\f$ time complexity.
25.63 + /// \f$O(nm\log n)\f$ time complexity.
25.64 ///
25.65 /// The maximum weighted matching problem is to find undirected
25.66 /// edges in the graph with maximum overall weight and no two of
25.67 @@ -1990,13 +1993,13 @@
25.68 /// "BlossomIt" nested class which is able to iterate on the nodes
25.69 /// of a blossom. If the value type is integral then the dual
25.70 /// solution is multiplied by \ref MaxWeightedMatching::dualScale "4".
25.71 - template <typename _Graph,
25.72 - typename _WeightMap = typename _Graph::template EdgeMap<int> >
25.73 + template <typename GR,
25.74 + typename WM = typename GR::template EdgeMap<int> >
25.75 class MaxWeightedPerfectMatching {
25.76 public:
25.77
25.78 - typedef _Graph Graph;
25.79 - typedef _WeightMap WeightMap;
25.80 + typedef GR Graph;
25.81 + typedef WM WeightMap;
25.82 typedef typename WeightMap::Value Value;
25.83
25.84 /// \brief Scaling factor for dual solution
26.1 --- a/lemon/min_cost_arborescence.h Thu Mar 05 10:13:20 2009 +0000
26.2 +++ b/lemon/min_cost_arborescence.h Sun Mar 29 23:08:20 2009 +0200
26.3 @@ -35,19 +35,19 @@
26.4 /// \brief Default traits class for MinCostArborescence class.
26.5 ///
26.6 /// Default traits class for MinCostArborescence class.
26.7 - /// \param _Digraph Digraph type.
26.8 - /// \param _CostMap Type of cost map.
26.9 - template <class _Digraph, class _CostMap>
26.10 + /// \param GR Digraph type.
26.11 + /// \param CM Type of cost map.
26.12 + template <class GR, class CM>
26.13 struct MinCostArborescenceDefaultTraits{
26.14
26.15 /// \brief The digraph type the algorithm runs on.
26.16 - typedef _Digraph Digraph;
26.17 + typedef GR Digraph;
26.18
26.19 /// \brief The type of the map that stores the arc costs.
26.20 ///
26.21 /// The type of the map that stores the arc costs.
26.22 /// It must meet the \ref concepts::ReadMap "ReadMap" concept.
26.23 - typedef _CostMap CostMap;
26.24 + typedef CM CostMap;
26.25
26.26 /// \brief The value type of the costs.
26.27 ///
26.28 @@ -63,25 +63,25 @@
26.29 /// arc. After it will set all arborescence arcs once.
26.30 typedef typename Digraph::template ArcMap<bool> ArborescenceMap;
26.31
26.32 - /// \brief Instantiates a ArborescenceMap.
26.33 + /// \brief Instantiates a \c ArborescenceMap.
26.34 ///
26.35 - /// This function instantiates a \ref ArborescenceMap.
26.36 + /// This function instantiates a \c ArborescenceMap.
26.37 /// \param digraph is the graph, to which we would like to
26.38 - /// calculate the ArborescenceMap.
26.39 + /// calculate the \c ArborescenceMap.
26.40 static ArborescenceMap *createArborescenceMap(const Digraph &digraph){
26.41 return new ArborescenceMap(digraph);
26.42 }
26.43
26.44 - /// \brief The type of the PredMap
26.45 + /// \brief The type of the \c PredMap
26.46 ///
26.47 - /// The type of the PredMap. It is a node map with an arc value type.
26.48 + /// The type of the \c PredMap. It is a node map with an arc value type.
26.49 typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap;
26.50
26.51 - /// \brief Instantiates a PredMap.
26.52 + /// \brief Instantiates a \c PredMap.
26.53 ///
26.54 - /// This function instantiates a \ref PredMap.
26.55 - /// \param _digraph is the digraph, to which we would like to define the
26.56 - /// PredMap.
26.57 + /// This function instantiates a \c PredMap.
26.58 + /// \param digraph The digraph to which we would like to define the
26.59 + /// \c PredMap.
26.60 static PredMap *createPredMap(const Digraph &digraph){
26.61 return new PredMap(digraph);
26.62 }
26.63 @@ -98,39 +98,37 @@
26.64 /// more sources should be given for the algorithm and it will calculate
26.65 /// the minimum cost subgraph which are union of arborescences with the
26.66 /// given sources and spans all the nodes which are reachable from the
26.67 - /// sources. The time complexity of the algorithm is \f$ O(n^2+e) \f$.
26.68 + /// sources. The time complexity of the algorithm is O(n<sup>2</sup>+e).
26.69 ///
26.70 /// The algorithm provides also an optimal dual solution, therefore
26.71 /// the optimality of the solution can be checked.
26.72 ///
26.73 - /// \param _Digraph The digraph type the algorithm runs on. The default value
26.74 + /// \param GR The digraph type the algorithm runs on. The default value
26.75 /// is \ref ListDigraph.
26.76 - /// \param _CostMap This read-only ArcMap determines the costs of the
26.77 + /// \param CM This read-only ArcMap determines the costs of the
26.78 /// arcs. It is read once for each arc, so the map may involve in
26.79 /// relatively time consuming process to compute the arc cost if
26.80 /// it is necessary. The default map type is \ref
26.81 /// concepts::Digraph::ArcMap "Digraph::ArcMap<int>".
26.82 - /// \param _Traits Traits class to set various data types used
26.83 + /// \param TR Traits class to set various data types used
26.84 /// by the algorithm. The default traits class is
26.85 /// \ref MinCostArborescenceDefaultTraits
26.86 - /// "MinCostArborescenceDefaultTraits<_Digraph, _CostMap>". See \ref
26.87 + /// "MinCostArborescenceDefaultTraits<GR, CM>". See \ref
26.88 /// MinCostArborescenceDefaultTraits for the documentation of a
26.89 /// MinCostArborescence traits class.
26.90 - ///
26.91 - /// \author Balazs Dezso
26.92 #ifndef DOXYGEN
26.93 - template <typename _Digraph = ListDigraph,
26.94 - typename _CostMap = typename _Digraph::template ArcMap<int>,
26.95 - typename _Traits =
26.96 - MinCostArborescenceDefaultTraits<_Digraph, _CostMap> >
26.97 + template <typename GR = ListDigraph,
26.98 + typename CM = typename GR::template ArcMap<int>,
26.99 + typename TR =
26.100 + MinCostArborescenceDefaultTraits<GR, CM> >
26.101 #else
26.102 - template <typename _Digraph, typename _CostMap, typedef _Traits>
26.103 + template <typename GR, typename CM, typedef TR>
26.104 #endif
26.105 class MinCostArborescence {
26.106 public:
26.107
26.108 /// The traits.
26.109 - typedef _Traits Traits;
26.110 + typedef TR Traits;
26.111 /// The type of the underlying digraph.
26.112 typedef typename Traits::Digraph Digraph;
26.113 /// The type of the map that stores the arc costs.
26.114 @@ -440,8 +438,8 @@
26.115
26.116 /// \brief Constructor.
26.117 ///
26.118 - /// \param _digraph The digraph the algorithm will run on.
26.119 - /// \param _cost The cost map used by the algorithm.
26.120 + /// \param digraph The digraph the algorithm will run on.
26.121 + /// \param cost The cost map used by the algorithm.
26.122 MinCostArborescence(const Digraph& digraph, const CostMap& cost)
26.123 : _digraph(&digraph), _cost(&cost), _pred(0), local_pred(false),
26.124 _arborescence(0), local_arborescence(false),
26.125 @@ -456,7 +454,7 @@
26.126 /// \brief Sets the arborescence map.
26.127 ///
26.128 /// Sets the arborescence map.
26.129 - /// \return \c (*this)
26.130 + /// \return <tt>(*this)</tt>
26.131 MinCostArborescence& arborescenceMap(ArborescenceMap& m) {
26.132 if (local_arborescence) {
26.133 delete _arborescence;
26.134 @@ -469,7 +467,7 @@
26.135 /// \brief Sets the arborescence map.
26.136 ///
26.137 /// Sets the arborescence map.
26.138 - /// \return \c (*this)
26.139 + /// \return <tt>(*this)</tt>
26.140 MinCostArborescence& predMap(PredMap& m) {
26.141 if (local_pred) {
26.142 delete _pred;
27.1 --- a/lemon/path.h Thu Mar 05 10:13:20 2009 +0000
27.2 +++ b/lemon/path.h Sun Mar 29 23:08:20 2009 +0200
27.3 @@ -40,7 +40,7 @@
27.4 /// \brief A structure for representing directed paths in a digraph.
27.5 ///
27.6 /// A structure for representing directed path in a digraph.
27.7 - /// \tparam _Digraph The digraph type in which the path is.
27.8 + /// \tparam GR The digraph type in which the path is.
27.9 ///
27.10 /// In a sense, the path can be treated as a list of arcs. The
27.11 /// lemon path type stores just this list. As a consequence, it
27.12 @@ -52,11 +52,11 @@
27.13 /// insertion and erase is done in O(1) (amortized) time. The
27.14 /// implementation uses two vectors for storing the front and back
27.15 /// insertions.
27.16 - template <typename _Digraph>
27.17 + template <typename GR>
27.18 class Path {
27.19 public:
27.20
27.21 - typedef _Digraph Digraph;
27.22 + typedef GR Digraph;
27.23 typedef typename Digraph::Arc Arc;
27.24
27.25 /// \brief Default constructor
27.26 @@ -137,7 +137,7 @@
27.27
27.28 /// \brief The nth arc.
27.29 ///
27.30 - /// \pre n is in the [0..length() - 1] range
27.31 + /// \pre \c n is in the <tt>[0..length() - 1]</tt> range.
27.32 const Arc& nth(int n) const {
27.33 return n < int(head.size()) ? *(head.rbegin() + n) :
27.34 *(tail.begin() + (n - head.size()));
27.35 @@ -145,7 +145,7 @@
27.36
27.37 /// \brief Initialize arc iterator to point to the nth arc
27.38 ///
27.39 - /// \pre n is in the [0..length() - 1] range
27.40 + /// \pre \c n is in the <tt>[0..length() - 1]</tt> range.
27.41 ArcIt nthIt(int n) const {
27.42 return ArcIt(*this, n);
27.43 }
27.44 @@ -228,7 +228,7 @@
27.45 /// \brief A structure for representing directed paths in a digraph.
27.46 ///
27.47 /// A structure for representing directed path in a digraph.
27.48 - /// \tparam _Digraph The digraph type in which the path is.
27.49 + /// \tparam GR The digraph type in which the path is.
27.50 ///
27.51 /// In a sense, the path can be treated as a list of arcs. The
27.52 /// lemon path type stores just this list. As a consequence it
27.53 @@ -240,11 +240,11 @@
27.54 /// erasure is amortized O(1) time. This implementation is faster
27.55 /// then the \c Path type because it use just one vector for the
27.56 /// arcs.
27.57 - template <typename _Digraph>
27.58 + template <typename GR>
27.59 class SimplePath {
27.60 public:
27.61
27.62 - typedef _Digraph Digraph;
27.63 + typedef GR Digraph;
27.64 typedef typename Digraph::Arc Arc;
27.65
27.66 /// \brief Default constructor
27.67 @@ -329,7 +329,7 @@
27.68
27.69 /// \brief The nth arc.
27.70 ///
27.71 - /// \pre n is in the [0..length() - 1] range
27.72 + /// \pre \c n is in the <tt>[0..length() - 1]</tt> range.
27.73 const Arc& nth(int n) const {
27.74 return data[n];
27.75 }
27.76 @@ -392,7 +392,7 @@
27.77 /// \brief A structure for representing directed paths in a digraph.
27.78 ///
27.79 /// A structure for representing directed path in a digraph.
27.80 - /// \tparam _Digraph The digraph type in which the path is.
27.81 + /// \tparam GR The digraph type in which the path is.
27.82 ///
27.83 /// In a sense, the path can be treated as a list of arcs. The
27.84 /// lemon path type stores just this list. As a consequence it
27.85 @@ -404,11 +404,11 @@
27.86 /// of the arc in the path. The length can be computed in O(n)
27.87 /// time. The front and back insertion and erasure is O(1) time
27.88 /// and it can be splited and spliced in O(1) time.
27.89 - template <typename _Digraph>
27.90 + template <typename GR>
27.91 class ListPath {
27.92 public:
27.93
27.94 - typedef _Digraph Digraph;
27.95 + typedef GR Digraph;
27.96 typedef typename Digraph::Arc Arc;
27.97
27.98 protected:
27.99 @@ -507,7 +507,7 @@
27.100 /// \brief The nth arc.
27.101 ///
27.102 /// This function looks for the nth arc in O(n) time.
27.103 - /// \pre n is in the [0..length() - 1] range
27.104 + /// \pre \c n is in the <tt>[0..length() - 1]</tt> range.
27.105 const Arc& nth(int n) const {
27.106 Node *node = first;
27.107 for (int i = 0; i < n; ++i) {
27.108 @@ -732,7 +732,7 @@
27.109 /// \brief A structure for representing directed paths in a digraph.
27.110 ///
27.111 /// A structure for representing directed path in a digraph.
27.112 - /// \tparam _Digraph The digraph type in which the path is.
27.113 + /// \tparam GR The digraph type in which the path is.
27.114 ///
27.115 /// In a sense, the path can be treated as a list of arcs. The
27.116 /// lemon path type stores just this list. As a consequence it
27.117 @@ -746,11 +746,11 @@
27.118 /// Being the the most memory efficient path type in LEMON,
27.119 /// it is intented to be
27.120 /// used when you want to store a large number of paths.
27.121 - template <typename _Digraph>
27.122 + template <typename GR>
27.123 class StaticPath {
27.124 public:
27.125
27.126 - typedef _Digraph Digraph;
27.127 + typedef GR Digraph;
27.128 typedef typename Digraph::Arc Arc;
27.129
27.130 /// \brief Default constructor
27.131 @@ -833,7 +833,7 @@
27.132
27.133 /// \brief The nth arc.
27.134 ///
27.135 - /// \pre n is in the [0..length() - 1] range
27.136 + /// \pre \c n is in the <tt>[0..length() - 1]</tt> range.
27.137 const Arc& nth(int n) const {
27.138 return arcs[n];
27.139 }
28.1 --- a/lemon/preflow.h Thu Mar 05 10:13:20 2009 +0000
28.2 +++ b/lemon/preflow.h Sun Mar 29 23:08:20 2009 +0200
28.3 @@ -32,8 +32,8 @@
28.4 ///
28.5 /// Default traits class of Preflow class.
28.6 /// \tparam GR Digraph type.
28.7 - /// \tparam CM Capacity map type.
28.8 - template <typename GR, typename CM>
28.9 + /// \tparam CAP Capacity map type.
28.10 + template <typename GR, typename CAP>
28.11 struct PreflowDefaultTraits {
28.12
28.13 /// \brief The type of the digraph the algorithm runs on.
28.14 @@ -43,7 +43,7 @@
28.15 ///
28.16 /// The type of the map that stores the arc capacities.
28.17 /// It must meet the \ref concepts::ReadMap "ReadMap" concept.
28.18 - typedef CM CapacityMap;
28.19 + typedef CAP CapacityMap;
28.20
28.21 /// \brief The type of the flow values.
28.22 typedef typename CapacityMap::Value Value;
28.23 @@ -94,8 +94,9 @@
28.24 /// \brief %Preflow algorithm class.
28.25 ///
28.26 /// This class provides an implementation of Goldberg-Tarjan's \e preflow
28.27 - /// \e push-relabel algorithm producing a flow of maximum value in a
28.28 - /// digraph. The preflow algorithms are the fastest known maximum
28.29 + /// \e push-relabel algorithm producing a \ref max_flow
28.30 + /// "flow of maximum value" in a digraph.
28.31 + /// The preflow algorithms are the fastest known maximum
28.32 /// flow algorithms. The current implementation use a mixture of the
28.33 /// \e "highest label" and the \e "bound decrease" heuristics.
28.34 /// The worst case time complexity of the algorithm is \f$O(n^2\sqrt{e})\f$.
28.35 @@ -105,14 +106,14 @@
28.36 /// second phase constructs a feasible maximum flow on each arc.
28.37 ///
28.38 /// \tparam GR The type of the digraph the algorithm runs on.
28.39 - /// \tparam CM The type of the capacity map. The default map
28.40 + /// \tparam CAP The type of the capacity map. The default map
28.41 /// type is \ref concepts::Digraph::ArcMap "GR::ArcMap<int>".
28.42 #ifdef DOXYGEN
28.43 - template <typename GR, typename CM, typename TR>
28.44 + template <typename GR, typename CAP, typename TR>
28.45 #else
28.46 template <typename GR,
28.47 - typename CM = typename GR::template ArcMap<int>,
28.48 - typename TR = PreflowDefaultTraits<GR, CM> >
28.49 + typename CAP = typename GR::template ArcMap<int>,
28.50 + typename TR = PreflowDefaultTraits<GR, CAP> >
28.51 #endif
28.52 class Preflow {
28.53 public:
28.54 @@ -194,9 +195,9 @@
28.55
28.56 ///@{
28.57
28.58 - template <typename _FlowMap>
28.59 + template <typename T>
28.60 struct SetFlowMapTraits : public Traits {
28.61 - typedef _FlowMap FlowMap;
28.62 + typedef T FlowMap;
28.63 static FlowMap *createFlowMap(const Digraph&) {
28.64 LEMON_ASSERT(false, "FlowMap is not initialized");
28.65 return 0; // ignore warnings
28.66 @@ -208,16 +209,16 @@
28.67 ///
28.68 /// \ref named-templ-param "Named parameter" for setting FlowMap
28.69 /// type.
28.70 - template <typename _FlowMap>
28.71 + template <typename T>
28.72 struct SetFlowMap
28.73 - : public Preflow<Digraph, CapacityMap, SetFlowMapTraits<_FlowMap> > {
28.74 + : public Preflow<Digraph, CapacityMap, SetFlowMapTraits<T> > {
28.75 typedef Preflow<Digraph, CapacityMap,
28.76 - SetFlowMapTraits<_FlowMap> > Create;
28.77 + SetFlowMapTraits<T> > Create;
28.78 };
28.79
28.80 - template <typename _Elevator>
28.81 + template <typename T>
28.82 struct SetElevatorTraits : public Traits {
28.83 - typedef _Elevator Elevator;
28.84 + typedef T Elevator;
28.85 static Elevator *createElevator(const Digraph&, int) {
28.86 LEMON_ASSERT(false, "Elevator is not initialized");
28.87 return 0; // ignore warnings
28.88 @@ -233,16 +234,16 @@
28.89 /// \ref elevator(Elevator&) "elevator()" function before calling
28.90 /// \ref run() or \ref init().
28.91 /// \sa SetStandardElevator
28.92 - template <typename _Elevator>
28.93 + template <typename T>
28.94 struct SetElevator
28.95 - : public Preflow<Digraph, CapacityMap, SetElevatorTraits<_Elevator> > {
28.96 + : public Preflow<Digraph, CapacityMap, SetElevatorTraits<T> > {
28.97 typedef Preflow<Digraph, CapacityMap,
28.98 - SetElevatorTraits<_Elevator> > Create;
28.99 + SetElevatorTraits<T> > Create;
28.100 };
28.101
28.102 - template <typename _Elevator>
28.103 + template <typename T>
28.104 struct SetStandardElevatorTraits : public Traits {
28.105 - typedef _Elevator Elevator;
28.106 + typedef T Elevator;
28.107 static Elevator *createElevator(const Digraph& digraph, int max_level) {
28.108 return new Elevator(digraph, max_level);
28.109 }
28.110 @@ -260,12 +261,12 @@
28.111 /// algorithm with the \ref elevator(Elevator&) "elevator()" function
28.112 /// before calling \ref run() or \ref init().
28.113 /// \sa SetElevator
28.114 - template <typename _Elevator>
28.115 + template <typename T>
28.116 struct SetStandardElevator
28.117 : public Preflow<Digraph, CapacityMap,
28.118 - SetStandardElevatorTraits<_Elevator> > {
28.119 + SetStandardElevatorTraits<T> > {
28.120 typedef Preflow<Digraph, CapacityMap,
28.121 - SetStandardElevatorTraits<_Elevator> > Create;
28.122 + SetStandardElevatorTraits<T> > Create;
28.123 };
28.124
28.125 /// @}
28.126 @@ -946,7 +947,7 @@
28.127 /// could be slightly different if inexact computation is used.
28.128 ///
28.129 /// \note This function calls \ref minCut() for each node, so it runs in
28.130 - /// \f$O(n)\f$ time.
28.131 + /// O(n) time.
28.132 ///
28.133 /// \pre Either \ref run() or \ref init() must be called before
28.134 /// using this function.
29.1 --- a/lemon/radix_sort.h Thu Mar 05 10:13:20 2009 +0000
29.2 +++ b/lemon/radix_sort.h Sun Mar 29 23:08:20 2009 +0200
29.3 @@ -205,11 +205,11 @@
29.4 /// the identity function instead.
29.5 ///
29.6 /// This is a special quick sort algorithm where the pivot
29.7 - /// values to split the items are choosen to be \f$ 2^k \f$ for each \c k.
29.8 - /// Therefore, the time complexity of the
29.9 - /// algorithm is \f$ O(\log(c)n) \f$ and it uses \f$ O(\log(c)) \f$,
29.10 - /// additional space, where \c c is the maximal value and \c n is the
29.11 - /// number of the items in the container.
29.12 + /// values to split the items are choosen to be 2<sup>k</sup>
29.13 + /// for each \c k.
29.14 + /// Therefore, the time complexity of the algorithm is O(log(c)*n) and
29.15 + /// it uses O(log(c)) additional space, where \c c is the maximal value
29.16 + /// and \c n is the number of the items in the container.
29.17 ///
29.18 /// \param first The begin of the given range.
29.19 /// \param last The end of the given range.
29.20 @@ -430,10 +430,10 @@
29.21 /// bytes of the integer number. The algorithm sorts the items
29.22 /// byte-by-byte. First, it counts how many times a byte value occurs
29.23 /// in the container, then it copies the corresponding items to
29.24 - /// another container in asceding order in \c O(n) time.
29.25 + /// another container in asceding order in O(n) time.
29.26 ///
29.27 - /// The time complexity of the algorithm is \f$ O(\log(c)n) \f$ and
29.28 - /// it uses \f$ O(n) \f$, additional space, where \c c is the
29.29 + /// The time complexity of the algorithm is O(log(c)*n) and
29.30 + /// it uses O(n) additional space, where \c c is the
29.31 /// maximal value and \c n is the number of the items in the
29.32 /// container.
29.33 ///
30.1 --- a/lemon/random.h Thu Mar 05 10:13:20 2009 +0000
30.2 +++ b/lemon/random.h Sun Mar 29 23:08:20 2009 +0200
30.3 @@ -603,7 +603,7 @@
30.4 /// By default, this function calls the \c seedFromFile() member
30.5 /// function with the <tt>/dev/urandom</tt> file. If it does not success,
30.6 /// it uses the \c seedFromTime().
30.7 - /// \return Currently always true.
30.8 + /// \return Currently always \c true.
30.9 bool seed() {
30.10 #ifndef WIN32
30.11 if (seedFromFile("/dev/urandom", 0)) return true;
30.12 @@ -624,7 +624,7 @@
30.13 /// entropy).
30.14 /// \param file The source file
30.15 /// \param offset The offset, from the file read.
30.16 - /// \return True when the seeding successes.
30.17 + /// \return \c true when the seeding successes.
30.18 #ifndef WIN32
30.19 bool seedFromFile(const std::string& file = "/dev/urandom", int offset = 0)
30.20 #else
30.21 @@ -645,7 +645,7 @@
30.22 /// Seding from process id and time. This function uses the
30.23 /// current process id and the current time for initialize the
30.24 /// random sequence.
30.25 - /// \return Currently always true.
30.26 + /// \return Currently always \c true.
30.27 bool seedFromTime() {
30.28 #ifndef WIN32
30.29 timeval tv;
31.1 --- a/lemon/smart_graph.h Thu Mar 05 10:13:20 2009 +0000
31.2 +++ b/lemon/smart_graph.h Sun Mar 29 23:08:20 2009 +0200
31.3 @@ -225,15 +225,15 @@
31.4
31.5 ///Add a new node to the digraph.
31.6
31.7 - /// \return the new node.
31.8 - ///
31.9 + /// Add a new node to the digraph.
31.10 + /// \return The new node.
31.11 Node addNode() { return Parent::addNode(); }
31.12
31.13 ///Add a new arc to the digraph.
31.14
31.15 ///Add a new arc to the digraph with source node \c s
31.16 ///and target node \c t.
31.17 - ///\return the new arc.
31.18 + ///\return The new arc.
31.19 Arc addArc(const Node& s, const Node& t) {
31.20 return Parent::addArc(s, t);
31.21 }
31.22 @@ -666,15 +666,15 @@
31.23
31.24 ///Add a new node to the graph.
31.25
31.26 - /// \return the new node.
31.27 - ///
31.28 + /// Add a new node to the graph.
31.29 + /// \return The new node.
31.30 Node addNode() { return Parent::addNode(); }
31.31
31.32 ///Add a new edge to the graph.
31.33
31.34 ///Add a new edge to the graph with node \c s
31.35 ///and \c t.
31.36 - ///\return the new edge.
31.37 + ///\return The new edge.
31.38 Edge addEdge(const Node& s, const Node& t) {
31.39 return Parent::addEdge(s, t);
31.40 }
32.1 --- a/lemon/suurballe.h Thu Mar 05 10:13:20 2009 +0000
32.2 +++ b/lemon/suurballe.h Sun Mar 29 23:08:20 2009 +0200
32.3 @@ -45,9 +45,9 @@
32.4 /// In fact, this implementation is the specialization of the
32.5 /// \ref CapacityScaling "successive shortest path" algorithm.
32.6 ///
32.7 - /// \tparam Digraph The digraph type the algorithm runs on.
32.8 + /// \tparam GR The digraph type the algorithm runs on.
32.9 /// The default value is \c ListDigraph.
32.10 - /// \tparam LengthMap The type of the length (cost) map.
32.11 + /// \tparam LEN The type of the length (cost) map.
32.12 /// The default value is <tt>Digraph::ArcMap<int></tt>.
32.13 ///
32.14 /// \warning Length values should be \e non-negative \e integers.
32.15 @@ -55,21 +55,26 @@
32.16 /// \note For finding node-disjoint paths this algorithm can be used
32.17 /// with \ref SplitNodes.
32.18 #ifdef DOXYGEN
32.19 - template <typename Digraph, typename LengthMap>
32.20 + template <typename GR, typename LEN>
32.21 #else
32.22 - template < typename Digraph = ListDigraph,
32.23 - typename LengthMap = typename Digraph::template ArcMap<int> >
32.24 + template < typename GR = ListDigraph,
32.25 + typename LEN = typename GR::template ArcMap<int> >
32.26 #endif
32.27 class Suurballe
32.28 {
32.29 - TEMPLATE_DIGRAPH_TYPEDEFS(Digraph);
32.30 + TEMPLATE_DIGRAPH_TYPEDEFS(GR);
32.31
32.32 - typedef typename LengthMap::Value Length;
32.33 typedef ConstMap<Arc, int> ConstArcMap;
32.34 - typedef typename Digraph::template NodeMap<Arc> PredMap;
32.35 + typedef typename GR::template NodeMap<Arc> PredMap;
32.36
32.37 public:
32.38
32.39 + /// The type of the digraph the algorithm runs on.
32.40 + typedef GR Digraph;
32.41 + /// The type of the length map.
32.42 + typedef LEN LengthMap;
32.43 + /// The type of the lengths.
32.44 + typedef typename LengthMap::Value Length;
32.45 /// The type of the flow map.
32.46 typedef typename Digraph::template ArcMap<int> FlowMap;
32.47 /// The type of the potential map.
32.48 @@ -256,7 +261,7 @@
32.49 /// The found flow contains only 0 and 1 values. It is the union of
32.50 /// the found arc-disjoint paths.
32.51 ///
32.52 - /// \return \c (*this)
32.53 + /// \return <tt>(*this)</tt>
32.54 Suurballe& flowMap(FlowMap &map) {
32.55 if (_local_flow) {
32.56 delete _flow;
32.57 @@ -273,7 +278,7 @@
32.58 /// The potentials provide the dual solution of the underlying
32.59 /// minimum cost flow problem.
32.60 ///
32.61 - /// \return \c (*this)
32.62 + /// \return <tt>(*this)</tt>
32.63 Suurballe& potentialMap(PotentialMap &map) {
32.64 if (_local_potential) {
32.65 delete _potential;
32.66 @@ -458,7 +463,7 @@
32.67 /// \brief Return the total length (cost) of the found paths (flow).
32.68 ///
32.69 /// This function returns the total length (cost) of the found paths
32.70 - /// (flow). The complexity of the function is \f$ O(e) \f$.
32.71 + /// (flow). The complexity of the function is O(e).
32.72 ///
32.73 /// \pre \ref run() or \ref findFlow() must be called before using
32.74 /// this function.
33.1 --- a/lemon/unionfind.h Thu Mar 05 10:13:20 2009 +0000
33.2 +++ b/lemon/unionfind.h Sun Mar 29 23:08:20 2009 +0200
33.3 @@ -51,11 +51,13 @@
33.4 ///
33.5 /// \pre You need to add all the elements by the \ref insert()
33.6 /// method.
33.7 - template <typename _ItemIntMap>
33.8 + template <typename IM>
33.9 class UnionFind {
33.10 public:
33.11
33.12 - typedef _ItemIntMap ItemIntMap;
33.13 + ///\e
33.14 + typedef IM ItemIntMap;
33.15 + ///\e
33.16 typedef typename ItemIntMap::Key Item;
33.17
33.18 private:
33.19 @@ -170,11 +172,13 @@
33.20 /// \pre You need to add all the elements by the \ref insert()
33.21 /// method.
33.22 ///
33.23 - template <typename _ItemIntMap>
33.24 + template <typename IM>
33.25 class UnionFindEnum {
33.26 public:
33.27
33.28 - typedef _ItemIntMap ItemIntMap;
33.29 + ///\e
33.30 + typedef IM ItemIntMap;
33.31 + ///\e
33.32 typedef typename ItemIntMap::Key Item;
33.33
33.34 private:
33.35 @@ -627,11 +631,13 @@
33.36 ///
33.37 /// \pre You need to add all the elements by the \ref insert()
33.38 /// method.
33.39 - template <typename _ItemIntMap>
33.40 + template <typename IM>
33.41 class ExtendFindEnum {
33.42 public:
33.43
33.44 - typedef _ItemIntMap ItemIntMap;
33.45 + ///\e
33.46 + typedef IM ItemIntMap;
33.47 + ///\e
33.48 typedef typename ItemIntMap::Key Item;
33.49
33.50 private:
33.51 @@ -948,18 +954,18 @@
33.52 ///
33.53 /// \pre You need to add all the elements by the \ref insert()
33.54 /// method.
33.55 - ///
33.56 - template <typename _Value, typename _ItemIntMap,
33.57 - typename _Comp = std::less<_Value> >
33.58 + template <typename V, typename IM, typename Comp = std::less<V> >
33.59 class HeapUnionFind {
33.60 public:
33.61
33.62 - typedef _Value Value;
33.63 - typedef typename _ItemIntMap::Key Item;
33.64 -
33.65 - typedef _ItemIntMap ItemIntMap;
33.66 -
33.67 - typedef _Comp Comp;
33.68 + ///\e
33.69 + typedef V Value;
33.70 + ///\e
33.71 + typedef typename IM::Key Item;
33.72 + ///\e
33.73 + typedef IM ItemIntMap;
33.74 + ///\e
33.75 + typedef Comp Compare;
33.76
33.77 private:
33.78
33.79 @@ -1601,7 +1607,7 @@
33.80
33.81 /// \brief Gives back the priority of the current item.
33.82 ///
33.83 - /// \return Gives back the priority of the current item.
33.84 + /// Gives back the priority of the current item.
33.85 const Value& operator[](const Item& item) const {
33.86 return nodes[index[item]].prio;
33.87 }
33.88 @@ -1646,7 +1652,7 @@
33.89
33.90 /// \brief Gives back the minimum priority of the class.
33.91 ///
33.92 - /// \return Gives back the minimum priority of the class.
33.93 + /// Gives back the minimum priority of the class.
33.94 const Value& classPrio(int cls) const {
33.95 return nodes[~(classes[cls].parent)].prio;
33.96 }
33.97 @@ -1660,9 +1666,9 @@
33.98
33.99 /// \brief Gives back a representant item of the class.
33.100 ///
33.101 + /// Gives back a representant item of the class.
33.102 /// The representant is indpendent from the priorities of the
33.103 /// items.
33.104 - /// \return Gives back a representant item of the class.
33.105 const Item& classRep(int id) const {
33.106 int parent = classes[id].parent;
33.107 return nodes[parent >= 0 ? classes[id].depth : leftNode(id)].item;