1.1 --- a/lemon/bfs.h Fri Sep 26 12:40:11 2008 +0200
1.2 +++ b/lemon/bfs.h Sat Sep 27 14:33:28 2008 +0200
1.3 @@ -54,7 +54,6 @@
1.4 ///This function instantiates a \ref PredMap.
1.5 ///\param g is the digraph, to which we would like to define the
1.6 ///\ref PredMap.
1.7 - ///\todo The digraph alone may be insufficient to initialize
1.8 static PredMap *createPredMap(const Digraph &g)
1.9 {
1.10 return new PredMap(g);
1.11 @@ -64,7 +63,6 @@
1.12
1.13 ///The type of the map that indicates which nodes are processed.
1.14 ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
1.15 - ///By default it is a NullMap.
1.16 typedef NullMap<typename Digraph::Node,bool> ProcessedMap;
1.17 ///Instantiates a \ref ProcessedMap.
1.18
1.19 @@ -196,8 +194,7 @@
1.20 int _queue_head,_queue_tail,_queue_next_dist;
1.21 int _curr_dist;
1.22
1.23 - ///Creates the maps if necessary.
1.24 - ///\todo Better memory allocation (instead of new).
1.25 + //Creates the maps if necessary.
1.26 void create_maps()
1.27 {
1.28 if(!_pred) {
1.29 @@ -848,7 +845,6 @@
1.30 ///This function instantiates a \ref PredMap.
1.31 ///\param g is the digraph, to which we would like to define the
1.32 ///\ref PredMap.
1.33 - ///\todo The digraph alone may be insufficient to initialize
1.34 static PredMap *createPredMap(const Digraph &g)
1.35 {
1.36 return new PredMap(g);
1.37 @@ -1370,8 +1366,7 @@
1.38 std::vector<typename Digraph::Node> _list;
1.39 int _list_front, _list_back;
1.40
1.41 - ///Creates the maps if necessary.
1.42 - ///\todo Better memory allocation (instead of new).
1.43 + //Creates the maps if necessary.
1.44 void create_maps() {
1.45 if(!_reached) {
1.46 local_reached = true;
2.1 --- a/lemon/bits/base_extender.h Fri Sep 26 12:40:11 2008 +0200
2.2 +++ b/lemon/bits/base_extender.h Sat Sep 27 14:33:28 2008 +0200
2.3 @@ -105,9 +105,6 @@
2.4
2.5 /// Returns whether the given directed arc has the same orientation
2.6 /// as the corresponding edge.
2.7 - ///
2.8 - /// \todo reference to the corresponding point of the undirected digraph
2.9 - /// concept. "What does the direction of an edge mean?"
2.10 static bool direction(const Arc &a) { return a.forward; }
2.11
2.12 using Parent::first;
3.1 --- a/lemon/bits/vector_map.h Fri Sep 26 12:40:11 2008 +0200
3.2 +++ b/lemon/bits/vector_map.h Sat Sep 27 14:33:28 2008 +0200
3.3 @@ -42,10 +42,9 @@
3.4 /// automatically updates the map when a key is added to or erased from
3.5 /// the map. This map type uses the std::vector to store the values.
3.6 ///
3.7 - /// \tparam _Notifier The AlterationNotifier that will notify this map.
3.8 + /// \tparam _Graph The graph this map is attached to.
3.9 /// \tparam _Item The item type of the graph items.
3.10 /// \tparam _Value The value type of the map.
3.11 - /// \todo Fix the doc: there is _Graph parameter instead of _Notifier.
3.12 template <typename _Graph, typename _Item, typename _Value>
3.13 class VectorMap
3.14 : public ItemSetTraits<_Graph, _Item>::ItemNotifier::ObserverBase {
4.1 --- a/lemon/concept_check.h Fri Sep 26 12:40:11 2008 +0200
4.2 +++ b/lemon/concept_check.h Sat Sep 27 14:33:28 2008 +0200
4.3 @@ -16,28 +16,12 @@
4.4 *
4.5 */
4.6
4.7 -// This file contains a modified version of the concept checking
4.8 -// utility from BOOST.
4.9 -// See the appropriate copyright notice below.
4.10 -
4.11 -// (C) Copyright Jeremy Siek 2000.
4.12 -// Distributed under the Boost Software License, Version 1.0. (See
4.13 -// accompanying file LICENSE_1_0.txt or copy at
4.14 -// http://www.boost.org/LICENSE_1_0.txt)
4.15 -//
4.16 -// Revision History:
4.17 -// 05 May 2001: Workarounds for HP aCC from Thomas Matelich. (Jeremy Siek)
4.18 -// 02 April 2001: Removed limits header altogether. (Jeremy Siek)
4.19 -// 01 April 2001: Modified to use new <boost/limits.hpp> header. (JMaddock)
4.20 -//
4.21 -
4.22 -// See http://www.boost.org/libs/concept_check for documentation.
4.23 +// The contents of this file was inspired by the concept checking
4.24 +// utility of the BOOST library (http://www.boost.org).
4.25
4.26 ///\file
4.27 ///\brief Basic utilities for concept checking.
4.28 ///
4.29 -///\todo Are we still using BOOST concept checking utility?
4.30 -///Is the BOOST copyright notice necessary?
4.31
4.32 #ifndef LEMON_CONCEPT_CHECK_H
4.33 #define LEMON_CONCEPT_CHECK_H
5.1 --- a/lemon/concepts/path.h Fri Sep 26 12:40:11 2008 +0200
5.2 +++ b/lemon/concepts/path.h Sat Sep 27 14:33:28 2008 +0200
5.3 @@ -20,7 +20,6 @@
5.4 ///\file
5.5 ///\brief Classes for representing paths in digraphs.
5.6 ///
5.7 -///\todo Iterators have obsolete style
5.8
5.9 #ifndef LEMON_CONCEPT_PATH_H
5.10 #define LEMON_CONCEPT_PATH_H
6.1 --- a/lemon/core.h Fri Sep 26 12:40:11 2008 +0200
6.2 +++ b/lemon/core.h Sat Sep 27 14:33:28 2008 +0200
6.3 @@ -58,10 +58,10 @@
6.4 /// \addtogroup gutils
6.5 /// @{
6.6
6.7 - ///Creates convenience typedefs for the digraph types and iterators
6.8 + ///Create convenient typedefs for the digraph types and iterators
6.9
6.10 - ///This \c \#define creates convenience typedefs for the following types
6.11 - ///of \c Digraph: \c Node, \c NodeIt, \c Arc, \c ArcIt, \c InArcIt,
6.12 + ///This \c \#define creates convenient type definitions for the following
6.13 + ///types of \c Digraph: \c Node, \c NodeIt, \c Arc, \c ArcIt, \c InArcIt,
6.14 ///\c OutArcIt, \c BoolNodeMap, \c IntNodeMap, \c DoubleNodeMap,
6.15 ///\c BoolArcMap, \c IntArcMap, \c DoubleArcMap.
6.16 ///
6.17 @@ -80,9 +80,9 @@
6.18 typedef Digraph::NodeMap<double> DoubleNodeMap; \
6.19 typedef Digraph::ArcMap<bool> BoolArcMap; \
6.20 typedef Digraph::ArcMap<int> IntArcMap; \
6.21 - typedef Digraph::ArcMap<double> DoubleArcMap
6.22 + typedef Digraph::ArcMap<double> DoubleArcMap;
6.23
6.24 - ///Creates convenience typedefs for the digraph types and iterators
6.25 + ///Create convenient typedefs for the digraph types and iterators
6.26
6.27 ///\see DIGRAPH_TYPEDEFS
6.28 ///
6.29 @@ -100,17 +100,17 @@
6.30 typedef typename Digraph::template NodeMap<double> DoubleNodeMap; \
6.31 typedef typename Digraph::template ArcMap<bool> BoolArcMap; \
6.32 typedef typename Digraph::template ArcMap<int> IntArcMap; \
6.33 - typedef typename Digraph::template ArcMap<double> DoubleArcMap
6.34 + typedef typename Digraph::template ArcMap<double> DoubleArcMap;
6.35
6.36 - ///Creates convenience typedefs for the graph types and iterators
6.37 + ///Create convenient typedefs for the graph types and iterators
6.38
6.39 - ///This \c \#define creates the same convenience typedefs as defined
6.40 + ///This \c \#define creates the same convenient type definitions as defined
6.41 ///by \ref DIGRAPH_TYPEDEFS(Graph) and six more, namely it creates
6.42 ///\c Edge, \c EdgeIt, \c IncEdgeIt, \c BoolEdgeMap, \c IntEdgeMap,
6.43 ///\c DoubleEdgeMap.
6.44 ///
6.45 ///\note If the graph type is a dependent type, ie. the graph type depend
6.46 - ///on a template parameter, then use \c TEMPLATE_DIGRAPH_TYPEDEFS()
6.47 + ///on a template parameter, then use \c TEMPLATE_GRAPH_TYPEDEFS()
6.48 ///macro.
6.49 #define GRAPH_TYPEDEFS(Graph) \
6.50 DIGRAPH_TYPEDEFS(Graph); \
6.51 @@ -119,9 +119,9 @@
6.52 typedef Graph::IncEdgeIt IncEdgeIt; \
6.53 typedef Graph::EdgeMap<bool> BoolEdgeMap; \
6.54 typedef Graph::EdgeMap<int> IntEdgeMap; \
6.55 - typedef Graph::EdgeMap<double> DoubleEdgeMap
6.56 + typedef Graph::EdgeMap<double> DoubleEdgeMap;
6.57
6.58 - ///Creates convenience typedefs for the graph types and iterators
6.59 + ///Create convenient typedefs for the graph types and iterators
6.60
6.61 ///\see GRAPH_TYPEDEFS
6.62 ///
6.63 @@ -134,12 +134,12 @@
6.64 typedef typename Graph::IncEdgeIt IncEdgeIt; \
6.65 typedef typename Graph::template EdgeMap<bool> BoolEdgeMap; \
6.66 typedef typename Graph::template EdgeMap<int> IntEdgeMap; \
6.67 - typedef typename Graph::template EdgeMap<double> DoubleEdgeMap
6.68 + typedef typename Graph::template EdgeMap<double> DoubleEdgeMap;
6.69
6.70 - /// \brief Function to count the items in the graph.
6.71 + /// \brief Function to count the items in a graph.
6.72 ///
6.73 - /// This function counts the items (nodes, arcs etc) in the graph.
6.74 - /// The complexity of the function is O(n) because
6.75 + /// This function counts the items (nodes, arcs etc.) in a graph.
6.76 + /// The complexity of the function is linear because
6.77 /// it iterates on all of the items.
6.78 template <typename Graph, typename Item>
6.79 inline int countItems(const Graph& g) {
6.80 @@ -176,11 +176,11 @@
6.81 /// \brief Function to count the nodes in the graph.
6.82 ///
6.83 /// This function counts the nodes in the graph.
6.84 - /// The complexity of the function is O(n) but for some
6.85 - /// graph structures it is specialized to run in O(1).
6.86 + /// The complexity of the function is <em>O</em>(<em>n</em>), but for some
6.87 + /// graph structures it is specialized to run in <em>O</em>(1).
6.88 ///
6.89 - /// If the graph contains a \e nodeNum() member function and a
6.90 - /// \e NodeNumTag tag then this function calls directly the member
6.91 + /// \note If the graph contains a \c nodeNum() member function and a
6.92 + /// \c NodeNumTag tag then this function calls directly the member
6.93 /// function to query the cardinality of the node set.
6.94 template <typename Graph>
6.95 inline int countNodes(const Graph& g) {
6.96 @@ -212,11 +212,11 @@
6.97 /// \brief Function to count the arcs in the graph.
6.98 ///
6.99 /// This function counts the arcs in the graph.
6.100 - /// The complexity of the function is O(e) but for some
6.101 - /// graph structures it is specialized to run in O(1).
6.102 + /// The complexity of the function is <em>O</em>(<em>m</em>), but for some
6.103 + /// graph structures it is specialized to run in <em>O</em>(1).
6.104 ///
6.105 - /// If the graph contains a \e arcNum() member function and a
6.106 - /// \e EdgeNumTag tag then this function calls directly the member
6.107 + /// \note If the graph contains a \c arcNum() member function and a
6.108 + /// \c ArcNumTag tag then this function calls directly the member
6.109 /// function to query the cardinality of the arc set.
6.110 template <typename Graph>
6.111 inline int countArcs(const Graph& g) {
6.112 @@ -224,6 +224,7 @@
6.113 }
6.114
6.115 // Edge counting:
6.116 +
6.117 namespace _core_bits {
6.118
6.119 template <typename Graph, typename Enable = void>
6.120 @@ -247,11 +248,11 @@
6.121 /// \brief Function to count the edges in the graph.
6.122 ///
6.123 /// This function counts the edges in the graph.
6.124 - /// The complexity of the function is O(m) but for some
6.125 - /// graph structures it is specialized to run in O(1).
6.126 + /// The complexity of the function is <em>O</em>(<em>m</em>), but for some
6.127 + /// graph structures it is specialized to run in <em>O</em>(1).
6.128 ///
6.129 - /// If the graph contains a \e edgeNum() member function and a
6.130 - /// \e EdgeNumTag tag then this function calls directly the member
6.131 + /// \note If the graph contains a \c edgeNum() member function and a
6.132 + /// \c EdgeNumTag tag then this function calls directly the member
6.133 /// function to query the cardinality of the edge set.
6.134 template <typename Graph>
6.135 inline int countEdges(const Graph& g) {
6.136 @@ -272,28 +273,28 @@
6.137 /// \brief Function to count the number of the out-arcs from node \c n.
6.138 ///
6.139 /// This function counts the number of the out-arcs from node \c n
6.140 - /// in the graph.
6.141 + /// in the graph \c g.
6.142 template <typename Graph>
6.143 - inline int countOutArcs(const Graph& _g, const typename Graph::Node& _n) {
6.144 - return countNodeDegree<Graph, typename Graph::OutArcIt>(_g, _n);
6.145 + inline int countOutArcs(const Graph& g, const typename Graph::Node& n) {
6.146 + return countNodeDegree<Graph, typename Graph::OutArcIt>(g, n);
6.147 }
6.148
6.149 /// \brief Function to count the number of the in-arcs to node \c n.
6.150 ///
6.151 /// This function counts the number of the in-arcs to node \c n
6.152 - /// in the graph.
6.153 + /// in the graph \c g.
6.154 template <typename Graph>
6.155 - inline int countInArcs(const Graph& _g, const typename Graph::Node& _n) {
6.156 - return countNodeDegree<Graph, typename Graph::InArcIt>(_g, _n);
6.157 + inline int countInArcs(const Graph& g, const typename Graph::Node& n) {
6.158 + return countNodeDegree<Graph, typename Graph::InArcIt>(g, n);
6.159 }
6.160
6.161 /// \brief Function to count the number of the inc-edges to node \c n.
6.162 ///
6.163 /// This function counts the number of the inc-edges to node \c n
6.164 - /// in the graph.
6.165 + /// in the undirected graph \c g.
6.166 template <typename Graph>
6.167 - inline int countIncEdges(const Graph& _g, const typename Graph::Node& _n) {
6.168 - return countNodeDegree<Graph, typename Graph::IncEdgeIt>(_g, _n);
6.169 + inline int countIncEdges(const Graph& g, const typename Graph::Node& n) {
6.170 + return countNodeDegree<Graph, typename Graph::IncEdgeIt>(g, n);
6.171 }
6.172
6.173 namespace _core_bits {
6.174 @@ -307,12 +308,12 @@
6.175 };
6.176
6.177 template <typename Digraph, typename Item, typename RefMap,
6.178 - typename ToMap, typename FromMap>
6.179 + typename FromMap, typename ToMap>
6.180 class MapCopy : public MapCopyBase<Digraph, Item, RefMap> {
6.181 public:
6.182
6.183 - MapCopy(ToMap& tmap, const FromMap& map)
6.184 - : _tmap(tmap), _map(map) {}
6.185 + MapCopy(const FromMap& map, ToMap& tmap)
6.186 + : _map(map), _tmap(tmap) {}
6.187
6.188 virtual void copy(const Digraph& digraph, const RefMap& refMap) {
6.189 typedef typename ItemSetTraits<Digraph, Item>::ItemIt ItemIt;
6.190 @@ -322,23 +323,23 @@
6.191 }
6.192
6.193 private:
6.194 + const FromMap& _map;
6.195 ToMap& _tmap;
6.196 - const FromMap& _map;
6.197 };
6.198
6.199 template <typename Digraph, typename Item, typename RefMap, typename It>
6.200 class ItemCopy : public MapCopyBase<Digraph, Item, RefMap> {
6.201 public:
6.202
6.203 - ItemCopy(It& it, const Item& item) : _it(it), _item(item) {}
6.204 + ItemCopy(const Item& item, It& it) : _item(item), _it(it) {}
6.205
6.206 virtual void copy(const Digraph&, const RefMap& refMap) {
6.207 _it = refMap[_item];
6.208 }
6.209
6.210 private:
6.211 + Item _item;
6.212 It& _it;
6.213 - Item _item;
6.214 };
6.215
6.216 template <typename Digraph, typename Item, typename RefMap, typename Ref>
6.217 @@ -379,7 +380,7 @@
6.218 template <typename Digraph, typename Enable = void>
6.219 struct DigraphCopySelector {
6.220 template <typename From, typename NodeRefMap, typename ArcRefMap>
6.221 - static void copy(Digraph &to, const From& from,
6.222 + static void copy(const From& from, Digraph &to,
6.223 NodeRefMap& nodeRefMap, ArcRefMap& arcRefMap) {
6.224 for (typename From::NodeIt it(from); it != INVALID; ++it) {
6.225 nodeRefMap[it] = to.addNode();
6.226 @@ -397,7 +398,7 @@
6.227 typename enable_if<typename Digraph::BuildTag, void>::type>
6.228 {
6.229 template <typename From, typename NodeRefMap, typename ArcRefMap>
6.230 - static void copy(Digraph &to, const From& from,
6.231 + static void copy(const From& from, Digraph &to,
6.232 NodeRefMap& nodeRefMap, ArcRefMap& arcRefMap) {
6.233 to.build(from, nodeRefMap, arcRefMap);
6.234 }
6.235 @@ -406,7 +407,7 @@
6.236 template <typename Graph, typename Enable = void>
6.237 struct GraphCopySelector {
6.238 template <typename From, typename NodeRefMap, typename EdgeRefMap>
6.239 - static void copy(Graph &to, const From& from,
6.240 + static void copy(const From& from, Graph &to,
6.241 NodeRefMap& nodeRefMap, EdgeRefMap& edgeRefMap) {
6.242 for (typename From::NodeIt it(from); it != INVALID; ++it) {
6.243 nodeRefMap[it] = to.addNode();
6.244 @@ -424,7 +425,7 @@
6.245 typename enable_if<typename Graph::BuildTag, void>::type>
6.246 {
6.247 template <typename From, typename NodeRefMap, typename EdgeRefMap>
6.248 - static void copy(Graph &to, const From& from,
6.249 + static void copy(const From& from, Graph &to,
6.250 NodeRefMap& nodeRefMap, EdgeRefMap& edgeRefMap) {
6.251 to.build(from, nodeRefMap, edgeRefMap);
6.252 }
6.253 @@ -435,39 +436,39 @@
6.254 /// \brief Class to copy a digraph.
6.255 ///
6.256 /// Class to copy a digraph to another digraph (duplicate a digraph). The
6.257 - /// simplest way of using it is through the \c copyDigraph() function.
6.258 + /// simplest way of using it is through the \c digraphCopy() function.
6.259 ///
6.260 - /// This class not just make a copy of a graph, but it can create
6.261 + /// This class not only make a copy of a digraph, but it can create
6.262 /// references and cross references between the nodes and arcs of
6.263 - /// the two graphs, it can copy maps for use with the newly created
6.264 - /// graph and copy nodes and arcs.
6.265 + /// the two digraphs, and it can copy maps to use with the newly created
6.266 + /// digraph.
6.267 ///
6.268 - /// To make a copy from a graph, first an instance of DigraphCopy
6.269 - /// should be created, then the data belongs to the graph should
6.270 + /// To make a copy from a digraph, first an instance of DigraphCopy
6.271 + /// should be created, then the data belongs to the digraph should
6.272 /// assigned to copy. In the end, the \c run() member should be
6.273 /// called.
6.274 ///
6.275 - /// The next code copies a graph with several data:
6.276 + /// The next code copies a digraph with several data:
6.277 ///\code
6.278 - /// DigraphCopy<NewGraph, OrigGraph> dc(new_graph, orig_graph);
6.279 - /// // create a reference for the nodes
6.280 + /// DigraphCopy<OrigGraph, NewGraph> cg(orig_graph, new_graph);
6.281 + /// // Create references for the nodes
6.282 /// OrigGraph::NodeMap<NewGraph::Node> nr(orig_graph);
6.283 - /// dc.nodeRef(nr);
6.284 - /// // create a cross reference (inverse) for the arcs
6.285 + /// cg.nodeRef(nr);
6.286 + /// // Create cross references (inverse) for the arcs
6.287 /// NewGraph::ArcMap<OrigGraph::Arc> acr(new_graph);
6.288 - /// dc.arcCrossRef(acr);
6.289 - /// // copy an arc map
6.290 + /// cg.arcCrossRef(acr);
6.291 + /// // Copy an arc map
6.292 /// OrigGraph::ArcMap<double> oamap(orig_graph);
6.293 /// NewGraph::ArcMap<double> namap(new_graph);
6.294 - /// dc.arcMap(namap, oamap);
6.295 - /// // copy a node
6.296 + /// cg.arcMap(oamap, namap);
6.297 + /// // Copy a node
6.298 /// OrigGraph::Node on;
6.299 /// NewGraph::Node nn;
6.300 - /// dc.node(nn, on);
6.301 - /// // Executions of copy
6.302 - /// dc.run();
6.303 + /// cg.node(on, nn);
6.304 + /// // Execute copying
6.305 + /// cg.run();
6.306 ///\endcode
6.307 - template <typename To, typename From>
6.308 + template <typename From, typename To>
6.309 class DigraphCopy {
6.310 private:
6.311
6.312 @@ -482,20 +483,18 @@
6.313 typedef typename From::template NodeMap<TNode> NodeRefMap;
6.314 typedef typename From::template ArcMap<TArc> ArcRefMap;
6.315
6.316 -
6.317 public:
6.318
6.319 -
6.320 - /// \brief Constructor for the DigraphCopy.
6.321 + /// \brief Constructor of DigraphCopy.
6.322 ///
6.323 - /// It copies the content of the \c _from digraph into the
6.324 - /// \c _to digraph.
6.325 - DigraphCopy(To& to, const From& from)
6.326 + /// Constructor of DigraphCopy for copying the content of the
6.327 + /// \c from digraph into the \c to digraph.
6.328 + DigraphCopy(const From& from, To& to)
6.329 : _from(from), _to(to) {}
6.330
6.331 - /// \brief Destructor of the DigraphCopy
6.332 + /// \brief Destructor of DigraphCopy
6.333 ///
6.334 - /// Destructor of the DigraphCopy
6.335 + /// Destructor of DigraphCopy.
6.336 ~DigraphCopy() {
6.337 for (int i = 0; i < int(_node_maps.size()); ++i) {
6.338 delete _node_maps[i];
6.339 @@ -506,12 +505,12 @@
6.340
6.341 }
6.342
6.343 - /// \brief Copies the node references into the given map.
6.344 + /// \brief Copy the node references into the given map.
6.345 ///
6.346 - /// Copies the node references into the given map. The parameter
6.347 - /// should be a map, which key type is the Node type of the source
6.348 - /// graph, while the value type is the Node type of the
6.349 - /// destination graph.
6.350 + /// This function copies the node references into the given map.
6.351 + /// The parameter should be a map, whose key type is the Node type of
6.352 + /// the source digraph, while the value type is the Node type of the
6.353 + /// destination digraph.
6.354 template <typename NodeRef>
6.355 DigraphCopy& nodeRef(NodeRef& map) {
6.356 _node_maps.push_back(new _core_bits::RefCopy<From, Node,
6.357 @@ -519,12 +518,12 @@
6.358 return *this;
6.359 }
6.360
6.361 - /// \brief Copies the node cross references into the given map.
6.362 + /// \brief Copy the node cross references into the given map.
6.363 ///
6.364 - /// Copies the node cross references (reverse references) into
6.365 - /// the given map. The parameter should be a map, which key type
6.366 - /// is the Node type of the destination graph, while the value type is
6.367 - /// the Node type of the source graph.
6.368 + /// This function copies the node cross references (reverse references)
6.369 + /// into the given map. The parameter should be a map, whose key type
6.370 + /// is the Node type of the destination digraph, while the value type is
6.371 + /// the Node type of the source digraph.
6.372 template <typename NodeCrossRef>
6.373 DigraphCopy& nodeCrossRef(NodeCrossRef& map) {
6.374 _node_maps.push_back(new _core_bits::CrossRefCopy<From, Node,
6.375 @@ -532,30 +531,35 @@
6.376 return *this;
6.377 }
6.378
6.379 - /// \brief Make copy of the given map.
6.380 + /// \brief Make a copy of the given node map.
6.381 ///
6.382 - /// Makes copy of the given map for the newly created digraph.
6.383 - /// The new map's key type is the destination graph's node type,
6.384 - /// and the copied map's key type is the source graph's node type.
6.385 - template <typename ToMap, typename FromMap>
6.386 - DigraphCopy& nodeMap(ToMap& tmap, const FromMap& map) {
6.387 + /// This function makes a copy of the given node map for the newly
6.388 + /// created digraph.
6.389 + /// The key type of the new map \c tmap should be the Node type of the
6.390 + /// destination digraph, and the key type of the original map \c map
6.391 + /// should be the Node type of the source digraph.
6.392 + template <typename FromMap, typename ToMap>
6.393 + DigraphCopy& nodeMap(const FromMap& map, ToMap& tmap) {
6.394 _node_maps.push_back(new _core_bits::MapCopy<From, Node,
6.395 - NodeRefMap, ToMap, FromMap>(tmap, map));
6.396 + NodeRefMap, FromMap, ToMap>(map, tmap));
6.397 return *this;
6.398 }
6.399
6.400 /// \brief Make a copy of the given node.
6.401 ///
6.402 - /// Make a copy of the given node.
6.403 - DigraphCopy& node(TNode& tnode, const Node& snode) {
6.404 + /// This function makes a copy of the given node.
6.405 + DigraphCopy& node(const Node& node, TNode& tnode) {
6.406 _node_maps.push_back(new _core_bits::ItemCopy<From, Node,
6.407 - NodeRefMap, TNode>(tnode, snode));
6.408 + NodeRefMap, TNode>(node, tnode));
6.409 return *this;
6.410 }
6.411
6.412 - /// \brief Copies the arc references into the given map.
6.413 + /// \brief Copy the arc references into the given map.
6.414 ///
6.415 - /// Copies the arc references into the given map.
6.416 + /// This function copies the arc references into the given map.
6.417 + /// The parameter should be a map, whose key type is the Arc type of
6.418 + /// the source digraph, while the value type is the Arc type of the
6.419 + /// destination digraph.
6.420 template <typename ArcRef>
6.421 DigraphCopy& arcRef(ArcRef& map) {
6.422 _arc_maps.push_back(new _core_bits::RefCopy<From, Arc,
6.423 @@ -563,10 +567,12 @@
6.424 return *this;
6.425 }
6.426
6.427 - /// \brief Copies the arc cross references into the given map.
6.428 + /// \brief Copy the arc cross references into the given map.
6.429 ///
6.430 - /// Copies the arc cross references (reverse references) into
6.431 - /// the given map.
6.432 + /// This function copies the arc cross references (reverse references)
6.433 + /// into the given map. The parameter should be a map, whose key type
6.434 + /// is the Arc type of the destination digraph, while the value type is
6.435 + /// the Arc type of the source digraph.
6.436 template <typename ArcCrossRef>
6.437 DigraphCopy& arcCrossRef(ArcCrossRef& map) {
6.438 _arc_maps.push_back(new _core_bits::CrossRefCopy<From, Arc,
6.439 @@ -574,36 +580,38 @@
6.440 return *this;
6.441 }
6.442
6.443 - /// \brief Make copy of the given map.
6.444 + /// \brief Make a copy of the given arc map.
6.445 ///
6.446 - /// Makes copy of the given map for the newly created digraph.
6.447 - /// The new map's key type is the to digraph's arc type,
6.448 - /// and the copied map's key type is the from digraph's arc
6.449 - /// type.
6.450 - template <typename ToMap, typename FromMap>
6.451 - DigraphCopy& arcMap(ToMap& tmap, const FromMap& map) {
6.452 + /// This function makes a copy of the given arc map for the newly
6.453 + /// created digraph.
6.454 + /// The key type of the new map \c tmap should be the Arc type of the
6.455 + /// destination digraph, and the key type of the original map \c map
6.456 + /// should be the Arc type of the source digraph.
6.457 + template <typename FromMap, typename ToMap>
6.458 + DigraphCopy& arcMap(const FromMap& map, ToMap& tmap) {
6.459 _arc_maps.push_back(new _core_bits::MapCopy<From, Arc,
6.460 - ArcRefMap, ToMap, FromMap>(tmap, map));
6.461 + ArcRefMap, FromMap, ToMap>(map, tmap));
6.462 return *this;
6.463 }
6.464
6.465 /// \brief Make a copy of the given arc.
6.466 ///
6.467 - /// Make a copy of the given arc.
6.468 - DigraphCopy& arc(TArc& tarc, const Arc& sarc) {
6.469 + /// This function makes a copy of the given arc.
6.470 + DigraphCopy& arc(const Arc& arc, TArc& tarc) {
6.471 _arc_maps.push_back(new _core_bits::ItemCopy<From, Arc,
6.472 - ArcRefMap, TArc>(tarc, sarc));
6.473 + ArcRefMap, TArc>(arc, tarc));
6.474 return *this;
6.475 }
6.476
6.477 - /// \brief Executes the copies.
6.478 + /// \brief Execute copying.
6.479 ///
6.480 - /// Executes the copies.
6.481 + /// This function executes the copying of the digraph along with the
6.482 + /// copying of the assigned data.
6.483 void run() {
6.484 NodeRefMap nodeRefMap(_from);
6.485 ArcRefMap arcRefMap(_from);
6.486 _core_bits::DigraphCopySelector<To>::
6.487 - copy(_to, _from, nodeRefMap, arcRefMap);
6.488 + copy(_from, _to, nodeRefMap, arcRefMap);
6.489 for (int i = 0; i < int(_node_maps.size()); ++i) {
6.490 _node_maps[i]->copy(_from, nodeRefMap);
6.491 }
6.492 @@ -614,47 +622,46 @@
6.493
6.494 protected:
6.495
6.496 -
6.497 const From& _from;
6.498 To& _to;
6.499
6.500 std::vector<_core_bits::MapCopyBase<From, Node, NodeRefMap>* >
6.501 - _node_maps;
6.502 + _node_maps;
6.503
6.504 std::vector<_core_bits::MapCopyBase<From, Arc, ArcRefMap>* >
6.505 - _arc_maps;
6.506 + _arc_maps;
6.507
6.508 };
6.509
6.510 /// \brief Copy a digraph to another digraph.
6.511 ///
6.512 - /// Copy a digraph to another digraph. The complete usage of the
6.513 - /// function is detailed in the DigraphCopy class, but a short
6.514 - /// example shows a basic work:
6.515 + /// This function copies a digraph to another digraph.
6.516 + /// The complete usage of it is detailed in the DigraphCopy class, but
6.517 + /// a short example shows a basic work:
6.518 ///\code
6.519 - /// copyDigraph(trg, src).nodeRef(nr).arcCrossRef(ecr).run();
6.520 + /// digraphCopy(src, trg).nodeRef(nr).arcCrossRef(acr).run();
6.521 ///\endcode
6.522 ///
6.523 /// After the copy the \c nr map will contain the mapping from the
6.524 /// nodes of the \c from digraph to the nodes of the \c to digraph and
6.525 - /// \c ecr will contain the mapping from the arcs of the \c to digraph
6.526 + /// \c acr will contain the mapping from the arcs of the \c to digraph
6.527 /// to the arcs of the \c from digraph.
6.528 ///
6.529 /// \see DigraphCopy
6.530 - template <typename To, typename From>
6.531 - DigraphCopy<To, From> copyDigraph(To& to, const From& from) {
6.532 - return DigraphCopy<To, From>(to, from);
6.533 + template <typename From, typename To>
6.534 + DigraphCopy<From, To> digraphCopy(const From& from, To& to) {
6.535 + return DigraphCopy<From, To>(from, to);
6.536 }
6.537
6.538 /// \brief Class to copy a graph.
6.539 ///
6.540 /// Class to copy a graph to another graph (duplicate a graph). The
6.541 - /// simplest way of using it is through the \c copyGraph() function.
6.542 + /// simplest way of using it is through the \c graphCopy() function.
6.543 ///
6.544 - /// This class not just make a copy of a graph, but it can create
6.545 + /// This class not only make a copy of a graph, but it can create
6.546 /// references and cross references between the nodes, edges and arcs of
6.547 - /// the two graphs, it can copy maps for use with the newly created
6.548 - /// graph and copy nodes, edges and arcs.
6.549 + /// the two graphs, and it can copy maps for using with the newly created
6.550 + /// graph.
6.551 ///
6.552 /// To make a copy from a graph, first an instance of GraphCopy
6.553 /// should be created, then the data belongs to the graph should
6.554 @@ -663,25 +670,25 @@
6.555 ///
6.556 /// The next code copies a graph with several data:
6.557 ///\code
6.558 - /// GraphCopy<NewGraph, OrigGraph> dc(new_graph, orig_graph);
6.559 - /// // create a reference for the nodes
6.560 + /// GraphCopy<OrigGraph, NewGraph> cg(orig_graph, new_graph);
6.561 + /// // Create references for the nodes
6.562 /// OrigGraph::NodeMap<NewGraph::Node> nr(orig_graph);
6.563 - /// dc.nodeRef(nr);
6.564 - /// // create a cross reference (inverse) for the edges
6.565 - /// NewGraph::EdgeMap<OrigGraph::Arc> ecr(new_graph);
6.566 - /// dc.edgeCrossRef(ecr);
6.567 - /// // copy an arc map
6.568 - /// OrigGraph::ArcMap<double> oamap(orig_graph);
6.569 - /// NewGraph::ArcMap<double> namap(new_graph);
6.570 - /// dc.arcMap(namap, oamap);
6.571 - /// // copy a node
6.572 + /// cg.nodeRef(nr);
6.573 + /// // Create cross references (inverse) for the edges
6.574 + /// NewGraph::EdgeMap<OrigGraph::Edge> ecr(new_graph);
6.575 + /// cg.edgeCrossRef(ecr);
6.576 + /// // Copy an edge map
6.577 + /// OrigGraph::EdgeMap<double> oemap(orig_graph);
6.578 + /// NewGraph::EdgeMap<double> nemap(new_graph);
6.579 + /// cg.edgeMap(oemap, nemap);
6.580 + /// // Copy a node
6.581 /// OrigGraph::Node on;
6.582 /// NewGraph::Node nn;
6.583 - /// dc.node(nn, on);
6.584 - /// // Executions of copy
6.585 - /// dc.run();
6.586 + /// cg.node(on, nn);
6.587 + /// // Execute copying
6.588 + /// cg.run();
6.589 ///\endcode
6.590 - template <typename To, typename From>
6.591 + template <typename From, typename To>
6.592 class GraphCopy {
6.593 private:
6.594
6.595 @@ -700,9 +707,9 @@
6.596 typedef typename From::template EdgeMap<TEdge> EdgeRefMap;
6.597
6.598 struct ArcRefMap {
6.599 - ArcRefMap(const To& to, const From& from,
6.600 + ArcRefMap(const From& from, const To& to,
6.601 const EdgeRefMap& edge_ref, const NodeRefMap& node_ref)
6.602 - : _to(to), _from(from),
6.603 + : _from(from), _to(to),
6.604 _edge_ref(edge_ref), _node_ref(node_ref) {}
6.605
6.606 typedef typename From::Arc Key;
6.607 @@ -716,26 +723,24 @@
6.608 return _to.direct(_edge_ref[key], forward);
6.609 }
6.610
6.611 + const From& _from;
6.612 const To& _to;
6.613 - const From& _from;
6.614 const EdgeRefMap& _edge_ref;
6.615 const NodeRefMap& _node_ref;
6.616 };
6.617
6.618 -
6.619 public:
6.620
6.621 -
6.622 - /// \brief Constructor for the GraphCopy.
6.623 + /// \brief Constructor of GraphCopy.
6.624 ///
6.625 - /// It copies the content of the \c _from graph into the
6.626 - /// \c _to graph.
6.627 - GraphCopy(To& to, const From& from)
6.628 + /// Constructor of GraphCopy for copying the content of the
6.629 + /// \c from graph into the \c to graph.
6.630 + GraphCopy(const From& from, To& to)
6.631 : _from(from), _to(to) {}
6.632
6.633 - /// \brief Destructor of the GraphCopy
6.634 + /// \brief Destructor of GraphCopy
6.635 ///
6.636 - /// Destructor of the GraphCopy
6.637 + /// Destructor of GraphCopy.
6.638 ~GraphCopy() {
6.639 for (int i = 0; i < int(_node_maps.size()); ++i) {
6.640 delete _node_maps[i];
6.641 @@ -746,12 +751,14 @@
6.642 for (int i = 0; i < int(_edge_maps.size()); ++i) {
6.643 delete _edge_maps[i];
6.644 }
6.645 -
6.646 }
6.647
6.648 - /// \brief Copies the node references into the given map.
6.649 + /// \brief Copy the node references into the given map.
6.650 ///
6.651 - /// Copies the node references into the given map.
6.652 + /// This function copies the node references into the given map.
6.653 + /// The parameter should be a map, whose key type is the Node type of
6.654 + /// the source graph, while the value type is the Node type of the
6.655 + /// destination graph.
6.656 template <typename NodeRef>
6.657 GraphCopy& nodeRef(NodeRef& map) {
6.658 _node_maps.push_back(new _core_bits::RefCopy<From, Node,
6.659 @@ -759,10 +766,12 @@
6.660 return *this;
6.661 }
6.662
6.663 - /// \brief Copies the node cross references into the given map.
6.664 + /// \brief Copy the node cross references into the given map.
6.665 ///
6.666 - /// Copies the node cross references (reverse references) into
6.667 - /// the given map.
6.668 + /// This function copies the node cross references (reverse references)
6.669 + /// into the given map. The parameter should be a map, whose key type
6.670 + /// is the Node type of the destination graph, while the value type is
6.671 + /// the Node type of the source graph.
6.672 template <typename NodeCrossRef>
6.673 GraphCopy& nodeCrossRef(NodeCrossRef& map) {
6.674 _node_maps.push_back(new _core_bits::CrossRefCopy<From, Node,
6.675 @@ -770,31 +779,35 @@
6.676 return *this;
6.677 }
6.678
6.679 - /// \brief Make copy of the given map.
6.680 + /// \brief Make a copy of the given node map.
6.681 ///
6.682 - /// Makes copy of the given map for the newly created graph.
6.683 - /// The new map's key type is the to graph's node type,
6.684 - /// and the copied map's key type is the from graph's node
6.685 - /// type.
6.686 - template <typename ToMap, typename FromMap>
6.687 - GraphCopy& nodeMap(ToMap& tmap, const FromMap& map) {
6.688 + /// This function makes a copy of the given node map for the newly
6.689 + /// created graph.
6.690 + /// The key type of the new map \c tmap should be the Node type of the
6.691 + /// destination graph, and the key type of the original map \c map
6.692 + /// should be the Node type of the source graph.
6.693 + template <typename FromMap, typename ToMap>
6.694 + GraphCopy& nodeMap(const FromMap& map, ToMap& tmap) {
6.695 _node_maps.push_back(new _core_bits::MapCopy<From, Node,
6.696 - NodeRefMap, ToMap, FromMap>(tmap, map));
6.697 + NodeRefMap, FromMap, ToMap>(map, tmap));
6.698 return *this;
6.699 }
6.700
6.701 /// \brief Make a copy of the given node.
6.702 ///
6.703 - /// Make a copy of the given node.
6.704 - GraphCopy& node(TNode& tnode, const Node& snode) {
6.705 + /// This function makes a copy of the given node.
6.706 + GraphCopy& node(const Node& node, TNode& tnode) {
6.707 _node_maps.push_back(new _core_bits::ItemCopy<From, Node,
6.708 - NodeRefMap, TNode>(tnode, snode));
6.709 + NodeRefMap, TNode>(node, tnode));
6.710 return *this;
6.711 }
6.712
6.713 - /// \brief Copies the arc references into the given map.
6.714 + /// \brief Copy the arc references into the given map.
6.715 ///
6.716 - /// Copies the arc references into the given map.
6.717 + /// This function copies the arc references into the given map.
6.718 + /// The parameter should be a map, whose key type is the Arc type of
6.719 + /// the source graph, while the value type is the Arc type of the
6.720 + /// destination graph.
6.721 template <typename ArcRef>
6.722 GraphCopy& arcRef(ArcRef& map) {
6.723 _arc_maps.push_back(new _core_bits::RefCopy<From, Arc,
6.724 @@ -802,10 +815,12 @@
6.725 return *this;
6.726 }
6.727
6.728 - /// \brief Copies the arc cross references into the given map.
6.729 + /// \brief Copy the arc cross references into the given map.
6.730 ///
6.731 - /// Copies the arc cross references (reverse references) into
6.732 - /// the given map.
6.733 + /// This function copies the arc cross references (reverse references)
6.734 + /// into the given map. The parameter should be a map, whose key type
6.735 + /// is the Arc type of the destination graph, while the value type is
6.736 + /// the Arc type of the source graph.
6.737 template <typename ArcCrossRef>
6.738 GraphCopy& arcCrossRef(ArcCrossRef& map) {
6.739 _arc_maps.push_back(new _core_bits::CrossRefCopy<From, Arc,
6.740 @@ -813,31 +828,35 @@
6.741 return *this;
6.742 }
6.743
6.744 - /// \brief Make copy of the given map.
6.745 + /// \brief Make a copy of the given arc map.
6.746 ///
6.747 - /// Makes copy of the given map for the newly created graph.
6.748 - /// The new map's key type is the to graph's arc type,
6.749 - /// and the copied map's key type is the from graph's arc
6.750 - /// type.
6.751 - template <typename ToMap, typename FromMap>
6.752 - GraphCopy& arcMap(ToMap& tmap, const FromMap& map) {
6.753 + /// This function makes a copy of the given arc map for the newly
6.754 + /// created graph.
6.755 + /// The key type of the new map \c tmap should be the Arc type of the
6.756 + /// destination graph, and the key type of the original map \c map
6.757 + /// should be the Arc type of the source graph.
6.758 + template <typename FromMap, typename ToMap>
6.759 + GraphCopy& arcMap(const FromMap& map, ToMap& tmap) {
6.760 _arc_maps.push_back(new _core_bits::MapCopy<From, Arc,
6.761 - ArcRefMap, ToMap, FromMap>(tmap, map));
6.762 + ArcRefMap, FromMap, ToMap>(map, tmap));
6.763 return *this;
6.764 }
6.765
6.766 /// \brief Make a copy of the given arc.
6.767 ///
6.768 - /// Make a copy of the given arc.
6.769 - GraphCopy& arc(TArc& tarc, const Arc& sarc) {
6.770 + /// This function makes a copy of the given arc.
6.771 + GraphCopy& arc(const Arc& arc, TArc& tarc) {
6.772 _arc_maps.push_back(new _core_bits::ItemCopy<From, Arc,
6.773 - ArcRefMap, TArc>(tarc, sarc));
6.774 + ArcRefMap, TArc>(arc, tarc));
6.775 return *this;
6.776 }
6.777
6.778 - /// \brief Copies the edge references into the given map.
6.779 + /// \brief Copy the edge references into the given map.
6.780 ///
6.781 - /// Copies the edge references into the given map.
6.782 + /// This function copies the edge references into the given map.
6.783 + /// The parameter should be a map, whose key type is the Edge type of
6.784 + /// the source graph, while the value type is the Edge type of the
6.785 + /// destination graph.
6.786 template <typename EdgeRef>
6.787 GraphCopy& edgeRef(EdgeRef& map) {
6.788 _edge_maps.push_back(new _core_bits::RefCopy<From, Edge,
6.789 @@ -845,10 +864,12 @@
6.790 return *this;
6.791 }
6.792
6.793 - /// \brief Copies the edge cross references into the given map.
6.794 + /// \brief Copy the edge cross references into the given map.
6.795 ///
6.796 - /// Copies the edge cross references (reverse
6.797 - /// references) into the given map.
6.798 + /// This function copies the edge cross references (reverse references)
6.799 + /// into the given map. The parameter should be a map, whose key type
6.800 + /// is the Edge type of the destination graph, while the value type is
6.801 + /// the Edge type of the source graph.
6.802 template <typename EdgeCrossRef>
6.803 GraphCopy& edgeCrossRef(EdgeCrossRef& map) {
6.804 _edge_maps.push_back(new _core_bits::CrossRefCopy<From,
6.805 @@ -856,37 +877,39 @@
6.806 return *this;
6.807 }
6.808
6.809 - /// \brief Make copy of the given map.
6.810 + /// \brief Make a copy of the given edge map.
6.811 ///
6.812 - /// Makes copy of the given map for the newly created graph.
6.813 - /// The new map's key type is the to graph's edge type,
6.814 - /// and the copied map's key type is the from graph's edge
6.815 - /// type.
6.816 - template <typename ToMap, typename FromMap>
6.817 - GraphCopy& edgeMap(ToMap& tmap, const FromMap& map) {
6.818 + /// This function makes a copy of the given edge map for the newly
6.819 + /// created graph.
6.820 + /// The key type of the new map \c tmap should be the Edge type of the
6.821 + /// destination graph, and the key type of the original map \c map
6.822 + /// should be the Edge type of the source graph.
6.823 + template <typename FromMap, typename ToMap>
6.824 + GraphCopy& edgeMap(const FromMap& map, ToMap& tmap) {
6.825 _edge_maps.push_back(new _core_bits::MapCopy<From, Edge,
6.826 - EdgeRefMap, ToMap, FromMap>(tmap, map));
6.827 + EdgeRefMap, FromMap, ToMap>(map, tmap));
6.828 return *this;
6.829 }
6.830
6.831 /// \brief Make a copy of the given edge.
6.832 ///
6.833 - /// Make a copy of the given edge.
6.834 - GraphCopy& edge(TEdge& tedge, const Edge& sedge) {
6.835 + /// This function makes a copy of the given edge.
6.836 + GraphCopy& edge(const Edge& edge, TEdge& tedge) {
6.837 _edge_maps.push_back(new _core_bits::ItemCopy<From, Edge,
6.838 - EdgeRefMap, TEdge>(tedge, sedge));
6.839 + EdgeRefMap, TEdge>(edge, tedge));
6.840 return *this;
6.841 }
6.842
6.843 - /// \brief Executes the copies.
6.844 + /// \brief Execute copying.
6.845 ///
6.846 - /// Executes the copies.
6.847 + /// This function executes the copying of the graph along with the
6.848 + /// copying of the assigned data.
6.849 void run() {
6.850 NodeRefMap nodeRefMap(_from);
6.851 EdgeRefMap edgeRefMap(_from);
6.852 - ArcRefMap arcRefMap(_to, _from, edgeRefMap, nodeRefMap);
6.853 + ArcRefMap arcRefMap(_from, _to, edgeRefMap, nodeRefMap);
6.854 _core_bits::GraphCopySelector<To>::
6.855 - copy(_to, _from, nodeRefMap, edgeRefMap);
6.856 + copy(_from, _to, nodeRefMap, edgeRefMap);
6.857 for (int i = 0; i < int(_node_maps.size()); ++i) {
6.858 _node_maps[i]->copy(_from, nodeRefMap);
6.859 }
6.860 @@ -904,35 +927,35 @@
6.861 To& _to;
6.862
6.863 std::vector<_core_bits::MapCopyBase<From, Node, NodeRefMap>* >
6.864 - _node_maps;
6.865 + _node_maps;
6.866
6.867 std::vector<_core_bits::MapCopyBase<From, Arc, ArcRefMap>* >
6.868 - _arc_maps;
6.869 + _arc_maps;
6.870
6.871 std::vector<_core_bits::MapCopyBase<From, Edge, EdgeRefMap>* >
6.872 - _edge_maps;
6.873 + _edge_maps;
6.874
6.875 };
6.876
6.877 /// \brief Copy a graph to another graph.
6.878 ///
6.879 - /// Copy a graph to another graph. The complete usage of the
6.880 - /// function is detailed in the GraphCopy class, but a short
6.881 - /// example shows a basic work:
6.882 + /// This function copies a graph to another graph.
6.883 + /// The complete usage of it is detailed in the GraphCopy class,
6.884 + /// but a short example shows a basic work:
6.885 ///\code
6.886 - /// copyGraph(trg, src).nodeRef(nr).arcCrossRef(ecr).run();
6.887 + /// graphCopy(src, trg).nodeRef(nr).edgeCrossRef(ecr).run();
6.888 ///\endcode
6.889 ///
6.890 /// After the copy the \c nr map will contain the mapping from the
6.891 /// nodes of the \c from graph to the nodes of the \c to graph and
6.892 - /// \c ecr will contain the mapping from the arcs of the \c to graph
6.893 - /// to the arcs of the \c from graph.
6.894 + /// \c ecr will contain the mapping from the edges of the \c to graph
6.895 + /// to the edges of the \c from graph.
6.896 ///
6.897 /// \see GraphCopy
6.898 - template <typename To, typename From>
6.899 - GraphCopy<To, From>
6.900 - copyGraph(To& to, const From& from) {
6.901 - return GraphCopy<To, From>(to, from);
6.902 + template <typename From, typename To>
6.903 + GraphCopy<From, To>
6.904 + graphCopy(const From& from, To& to) {
6.905 + return GraphCopy<From, To>(from, to);
6.906 }
6.907
6.908 namespace _core_bits {
6.909 @@ -957,7 +980,7 @@
6.910 template <typename Graph>
6.911 struct FindArcSelector<
6.912 Graph,
6.913 - typename enable_if<typename Graph::FindEdgeTag, void>::type>
6.914 + typename enable_if<typename Graph::FindArcTag, void>::type>
6.915 {
6.916 typedef typename Graph::Node Node;
6.917 typedef typename Graph::Arc Arc;
6.918 @@ -967,9 +990,10 @@
6.919 };
6.920 }
6.921
6.922 - /// \brief Finds an arc between two nodes of a graph.
6.923 + /// \brief Find an arc between two nodes of a digraph.
6.924 ///
6.925 - /// Finds an arc from node \c u to node \c v in graph \c g.
6.926 + /// This function finds an arc from node \c u to node \c v in the
6.927 + /// digraph \c g.
6.928 ///
6.929 /// If \c prev is \ref INVALID (this is the default value), then
6.930 /// it finds the first arc from \c u to \c v. Otherwise it looks for
6.931 @@ -978,15 +1002,16 @@
6.932 ///
6.933 /// Thus you can iterate through each arc from \c u to \c v as it follows.
6.934 ///\code
6.935 - /// for(Arc e=findArc(g,u,v);e!=INVALID;e=findArc(g,u,v,e)) {
6.936 + /// for(Arc e = findArc(g,u,v); e != INVALID; e = findArc(g,u,v,e)) {
6.937 /// ...
6.938 /// }
6.939 ///\endcode
6.940 ///
6.941 - ///\sa ArcLookUp
6.942 - ///\sa AllArcLookUp
6.943 - ///\sa DynArcLookUp
6.944 + /// \note \ref ConArcIt provides iterator interface for the same
6.945 + /// functionality.
6.946 + ///
6.947 ///\sa ConArcIt
6.948 + ///\sa ArcLookUp, AllArcLookUp, DynArcLookUp
6.949 template <typename Graph>
6.950 inline typename Graph::Arc
6.951 findArc(const Graph &g, typename Graph::Node u, typename Graph::Node v,
6.952 @@ -994,10 +1019,10 @@
6.953 return _core_bits::FindArcSelector<Graph>::find(g, u, v, prev);
6.954 }
6.955
6.956 - /// \brief Iterator for iterating on arcs connected the same nodes.
6.957 + /// \brief Iterator for iterating on parallel arcs connecting the same nodes.
6.958 ///
6.959 - /// Iterator for iterating on arcs connected the same nodes. It is
6.960 - /// higher level interface for the findArc() function. You can
6.961 + /// Iterator for iterating on parallel arcs connecting the same nodes. It is
6.962 + /// a higher level interface for the \ref findArc() function. You can
6.963 /// use it the following way:
6.964 ///\code
6.965 /// for (ConArcIt<Graph> it(g, src, trg); it != INVALID; ++it) {
6.966 @@ -1006,9 +1031,7 @@
6.967 ///\endcode
6.968 ///
6.969 ///\sa findArc()
6.970 - ///\sa ArcLookUp
6.971 - ///\sa AllArcLookUp
6.972 - ///\sa DynArcLookUp
6.973 + ///\sa ArcLookUp, AllArcLookUp, DynArcLookUp
6.974 template <typename _Graph>
6.975 class ConArcIt : public _Graph::Arc {
6.976 public:
6.977 @@ -1021,16 +1044,15 @@
6.978
6.979 /// \brief Constructor.
6.980 ///
6.981 - /// Construct a new ConArcIt iterating on the arcs which
6.982 - /// connects the \c u and \c v node.
6.983 + /// Construct a new ConArcIt iterating on the arcs that
6.984 + /// connects nodes \c u and \c v.
6.985 ConArcIt(const Graph& g, Node u, Node v) : _graph(g) {
6.986 Parent::operator=(findArc(_graph, u, v));
6.987 }
6.988
6.989 /// \brief Constructor.
6.990 ///
6.991 - /// Construct a new ConArcIt which continues the iterating from
6.992 - /// the \c e arc.
6.993 + /// Construct a new ConArcIt that continues the iterating from arc \c a.
6.994 ConArcIt(const Graph& g, Arc a) : Parent(a), _graph(g) {}
6.995
6.996 /// \brief Increment operator.
6.997 @@ -1091,27 +1113,29 @@
6.998 };
6.999 }
6.1000
6.1001 - /// \brief Finds an edge between two nodes of a graph.
6.1002 + /// \brief Find an edge between two nodes of a graph.
6.1003 ///
6.1004 - /// Finds an edge from node \c u to node \c v in graph \c g.
6.1005 - /// If the node \c u and node \c v is equal then each loop edge
6.1006 + /// This function finds an edge from node \c u to node \c v in graph \c g.
6.1007 + /// If node \c u and node \c v is equal then each loop edge
6.1008 /// will be enumerated once.
6.1009 ///
6.1010 /// If \c prev is \ref INVALID (this is the default value), then
6.1011 - /// it finds the first arc from \c u to \c v. Otherwise it looks for
6.1012 - /// the next arc from \c u to \c v after \c prev.
6.1013 - /// \return The found arc or \ref INVALID if there is no such an arc.
6.1014 + /// it finds the first edge from \c u to \c v. Otherwise it looks for
6.1015 + /// the next edge from \c u to \c v after \c prev.
6.1016 + /// \return The found edge or \ref INVALID if there is no such an edge.
6.1017 ///
6.1018 - /// Thus you can iterate through each arc from \c u to \c v as it follows.
6.1019 + /// Thus you can iterate through each edge between \c u and \c v
6.1020 + /// as it follows.
6.1021 ///\code
6.1022 - /// for(Edge e = findEdge(g,u,v); e != INVALID;
6.1023 - /// e = findEdge(g,u,v,e)) {
6.1024 + /// for(Edge e = findEdge(g,u,v); e != INVALID; e = findEdge(g,u,v,e)) {
6.1025 /// ...
6.1026 /// }
6.1027 ///\endcode
6.1028 ///
6.1029 + /// \note \ref ConEdgeIt provides iterator interface for the same
6.1030 + /// functionality.
6.1031 + ///
6.1032 ///\sa ConEdgeIt
6.1033 -
6.1034 template <typename Graph>
6.1035 inline typename Graph::Edge
6.1036 findEdge(const Graph &g, typename Graph::Node u, typename Graph::Node v,
6.1037 @@ -1119,13 +1143,13 @@
6.1038 return _core_bits::FindEdgeSelector<Graph>::find(g, u, v, p);
6.1039 }
6.1040
6.1041 - /// \brief Iterator for iterating on edges connected the same nodes.
6.1042 + /// \brief Iterator for iterating on parallel edges connecting the same nodes.
6.1043 ///
6.1044 - /// Iterator for iterating on edges connected the same nodes. It is
6.1045 - /// higher level interface for the findEdge() function. You can
6.1046 + /// Iterator for iterating on parallel edges connecting the same nodes.
6.1047 + /// It is a higher level interface for the findEdge() function. You can
6.1048 /// use it the following way:
6.1049 ///\code
6.1050 - /// for (ConEdgeIt<Graph> it(g, src, trg); it != INVALID; ++it) {
6.1051 + /// for (ConEdgeIt<Graph> it(g, u, v); it != INVALID; ++it) {
6.1052 /// ...
6.1053 /// }
6.1054 ///\endcode
6.1055 @@ -1143,16 +1167,15 @@
6.1056
6.1057 /// \brief Constructor.
6.1058 ///
6.1059 - /// Construct a new ConEdgeIt iterating on the edges which
6.1060 - /// connects the \c u and \c v node.
6.1061 + /// Construct a new ConEdgeIt iterating on the edges that
6.1062 + /// connects nodes \c u and \c v.
6.1063 ConEdgeIt(const Graph& g, Node u, Node v) : _graph(g) {
6.1064 Parent::operator=(findEdge(_graph, u, v));
6.1065 }
6.1066
6.1067 /// \brief Constructor.
6.1068 ///
6.1069 - /// Construct a new ConEdgeIt which continues the iterating from
6.1070 - /// the \c e edge.
6.1071 + /// Construct a new ConEdgeIt that continues iterating from edge \c e.
6.1072 ConEdgeIt(const Graph& g, Edge e) : Parent(e), _graph(g) {}
6.1073
6.1074 /// \brief Increment operator.
6.1075 @@ -1168,21 +1191,21 @@
6.1076 };
6.1077
6.1078
6.1079 - ///Dynamic arc look up between given endpoints.
6.1080 + ///Dynamic arc look-up between given endpoints.
6.1081
6.1082 ///Using this class, you can find an arc in a digraph from a given
6.1083 - ///source to a given target in amortized time <em>O(log</em>d<em>)</em>,
6.1084 + ///source to a given target in amortized time <em>O</em>(log<em>d</em>),
6.1085 ///where <em>d</em> is the out-degree of the source node.
6.1086 ///
6.1087 ///It is possible to find \e all parallel arcs between two nodes with
6.1088 ///the \c operator() member.
6.1089 ///
6.1090 - ///See the \ref ArcLookUp and \ref AllArcLookUp classes if your
6.1091 - ///digraph is not changed so frequently.
6.1092 + ///This is a dynamic data structure. Consider to use \ref ArcLookUp or
6.1093 + ///\ref AllArcLookUp if your digraph is not changed so frequently.
6.1094 ///
6.1095 - ///This class uses a self-adjusting binary search tree, Sleator's
6.1096 - ///and Tarjan's Splay tree for guarantee the logarithmic amortized
6.1097 - ///time bound for arc lookups. This class also guarantees the
6.1098 + ///This class uses a self-adjusting binary search tree, the Splay tree
6.1099 + ///of Sleator and Tarjan to guarantee the logarithmic amortized
6.1100 + ///time bound for arc look-ups. This class also guarantees the
6.1101 ///optimal time bound in a constant factor for any distribution of
6.1102 ///queries.
6.1103 ///
6.1104 @@ -1507,8 +1530,8 @@
6.1105 ///Find an arc between two nodes.
6.1106
6.1107 ///Find an arc between two nodes.
6.1108 - ///\param s The source node
6.1109 - ///\param t The target node
6.1110 + ///\param s The source node.
6.1111 + ///\param t The target node.
6.1112 ///\param p The previous arc between \c s and \c t. It it is INVALID or
6.1113 ///not given, the operator finds the first appropriate arc.
6.1114 ///\return An arc from \c s to \c t after \c p or
6.1115 @@ -1519,21 +1542,20 @@
6.1116 ///\code
6.1117 ///DynArcLookUp<ListDigraph> ae(g);
6.1118 ///...
6.1119 - ///int n=0;
6.1120 - ///for(Arc e=ae(u,v);e!=INVALID;e=ae(u,v,e)) n++;
6.1121 + ///int n = 0;
6.1122 + ///for(Arc a = ae(u,v); a != INVALID; a = ae(u,v,a)) n++;
6.1123 ///\endcode
6.1124 ///
6.1125 - ///Finding the arcs take at most <em>O(</em>log<em>d)</em>
6.1126 + ///Finding the arcs take at most <em>O</em>(log<em>d</em>)
6.1127 ///amortized time, specifically, the time complexity of the lookups
6.1128 ///is equal to the optimal search tree implementation for the
6.1129 ///current query distribution in a constant factor.
6.1130 ///
6.1131 ///\note This is a dynamic data structure, therefore the data
6.1132 - ///structure is updated after each graph alteration. However,
6.1133 - ///theoretically this data structure is faster than \c ArcLookUp
6.1134 - ///or AllEdgeLookup, but it often provides worse performance than
6.1135 + ///structure is updated after each graph alteration. Thus although
6.1136 + ///this data structure is theoretically faster than \ref ArcLookUp
6.1137 + ///and \ref AllArcLookup, it often provides worse performance than
6.1138 ///them.
6.1139 - ///
6.1140 Arc operator()(Node s, Node t, Arc p = INVALID) const {
6.1141 if (p == INVALID) {
6.1142 Arc a = _head[s];
6.1143 @@ -1585,19 +1607,19 @@
6.1144
6.1145 };
6.1146
6.1147 - ///Fast arc look up between given endpoints.
6.1148 + ///Fast arc look-up between given endpoints.
6.1149
6.1150 ///Using this class, you can find an arc in a digraph from a given
6.1151 - ///source to a given target in time <em>O(log d)</em>,
6.1152 + ///source to a given target in time <em>O</em>(log<em>d</em>),
6.1153 ///where <em>d</em> is the out-degree of the source node.
6.1154 ///
6.1155 ///It is not possible to find \e all parallel arcs between two nodes.
6.1156 ///Use \ref AllArcLookUp for this purpose.
6.1157 ///
6.1158 - ///\warning This class is static, so you should refresh() (or at least
6.1159 - ///refresh(Node)) this data structure
6.1160 - ///whenever the digraph changes. This is a time consuming (superlinearly
6.1161 - ///proportional (<em>O(m</em>log<em>m)</em>) to the number of arcs).
6.1162 + ///\warning This class is static, so you should call refresh() (or at
6.1163 + ///least refresh(Node)) to refresh this data structure whenever the
6.1164 + ///digraph changes. This is a time consuming (superlinearly proportional
6.1165 + ///(<em>O</em>(<em>m</em> log<em>m</em>)) to the number of arcs).
6.1166 ///
6.1167 ///\tparam G The type of the underlying digraph.
6.1168 ///
6.1169 @@ -1646,12 +1668,12 @@
6.1170 return me;
6.1171 }
6.1172 public:
6.1173 - ///Refresh the data structure at a node.
6.1174 + ///Refresh the search data structure at a node.
6.1175
6.1176 ///Build up the search database of node \c n.
6.1177 ///
6.1178 - ///It runs in time <em>O(d</em>log<em>d)</em>, where <em>d</em> is
6.1179 - ///the number of the outgoing arcs of \c n.
6.1180 + ///It runs in time <em>O</em>(<em>d</em> log<em>d</em>), where <em>d</em>
6.1181 + ///is the number of the outgoing arcs of \c n.
6.1182 void refresh(Node n)
6.1183 {
6.1184 std::vector<Arc> v;
6.1185 @@ -1667,10 +1689,9 @@
6.1186 ///Build up the full search database. In fact, it simply calls
6.1187 ///\ref refresh(Node) "refresh(n)" for each node \c n.
6.1188 ///
6.1189 - ///It runs in time <em>O(m</em>log<em>D)</em>, where <em>m</em> is
6.1190 - ///the number of the arcs of \c n and <em>D</em> is the maximum
6.1191 + ///It runs in time <em>O</em>(<em>m</em> log<em>D</em>), where <em>m</em> is
6.1192 + ///the number of the arcs in the digraph and <em>D</em> is the maximum
6.1193 ///out-degree of the digraph.
6.1194 -
6.1195 void refresh()
6.1196 {
6.1197 for(NodeIt n(_g);n!=INVALID;++n) refresh(n);
6.1198 @@ -1678,18 +1699,16 @@
6.1199
6.1200 ///Find an arc between two nodes.
6.1201
6.1202 - ///Find an arc between two nodes in time <em>O(</em>log<em>d)</em>, where
6.1203 - /// <em>d</em> is the number of outgoing arcs of \c s.
6.1204 - ///\param s The source node
6.1205 - ///\param t The target node
6.1206 + ///Find an arc between two nodes in time <em>O</em>(log<em>d</em>), where
6.1207 + ///<em>d</em> is the number of outgoing arcs of \c s.
6.1208 + ///\param s The source node.
6.1209 + ///\param t The target node.
6.1210 ///\return An arc from \c s to \c t if there exists,
6.1211 ///\ref INVALID otherwise.
6.1212 ///
6.1213 ///\warning If you change the digraph, refresh() must be called before using
6.1214 ///this operator. If you change the outgoing arcs of
6.1215 - ///a single node \c n, then
6.1216 - ///\ref refresh(Node) "refresh(n)" is enough.
6.1217 - ///
6.1218 + ///a single node \c n, then \ref refresh(Node) "refresh(n)" is enough.
6.1219 Arc operator()(Node s, Node t) const
6.1220 {
6.1221 Arc e;
6.1222 @@ -1701,15 +1720,16 @@
6.1223
6.1224 };
6.1225
6.1226 - ///Fast look up of all arcs between given endpoints.
6.1227 + ///Fast look-up of all arcs between given endpoints.
6.1228
6.1229 ///This class is the same as \ref ArcLookUp, with the addition
6.1230 - ///that it makes it possible to find all arcs between given endpoints.
6.1231 + ///that it makes it possible to find all parallel arcs between given
6.1232 + ///endpoints.
6.1233 ///
6.1234 - ///\warning This class is static, so you should refresh() (or at least
6.1235 - ///refresh(Node)) this data structure
6.1236 - ///whenever the digraph changes. This is a time consuming (superlinearly
6.1237 - ///proportional (<em>O(m</em>log<em>m)</em>) to the number of arcs).
6.1238 + ///\warning This class is static, so you should call refresh() (or at
6.1239 + ///least refresh(Node)) to refresh this data structure whenever the
6.1240 + ///digraph changes. This is a time consuming (superlinearly proportional
6.1241 + ///(<em>O</em>(<em>m</em> log<em>m</em>)) to the number of arcs).
6.1242 ///
6.1243 ///\tparam G The type of the underlying digraph.
6.1244 ///
6.1245 @@ -1733,7 +1753,6 @@
6.1246 if(head==INVALID) return next;
6.1247 else {
6.1248 next=refreshNext(_right[head],next);
6.1249 -// _next[head]=next;
6.1250 _next[head]=( next!=INVALID && _g.target(next)==_g.target(head))
6.1251 ? next : INVALID;
6.1252 return refreshNext(_left[head],head);
6.1253 @@ -1758,9 +1777,8 @@
6.1254
6.1255 ///Build up the search database of node \c n.
6.1256 ///
6.1257 - ///It runs in time <em>O(d</em>log<em>d)</em>, where <em>d</em> is
6.1258 + ///It runs in time <em>O</em>(<em>d</em> log<em>d</em>), where <em>d</em> is
6.1259 ///the number of the outgoing arcs of \c n.
6.1260 -
6.1261 void refresh(Node n)
6.1262 {
6.1263 ArcLookUp<G>::refresh(n);
6.1264 @@ -1772,10 +1790,9 @@
6.1265 ///Build up the full search database. In fact, it simply calls
6.1266 ///\ref refresh(Node) "refresh(n)" for each node \c n.
6.1267 ///
6.1268 - ///It runs in time <em>O(m</em>log<em>D)</em>, where <em>m</em> is
6.1269 - ///the number of the arcs of \c n and <em>D</em> is the maximum
6.1270 + ///It runs in time <em>O</em>(<em>m</em> log<em>D</em>), where <em>m</em> is
6.1271 + ///the number of the arcs in the digraph and <em>D</em> is the maximum
6.1272 ///out-degree of the digraph.
6.1273 -
6.1274 void refresh()
6.1275 {
6.1276 for(NodeIt n(_g);n!=INVALID;++n) refresh(_head[n]);
6.1277 @@ -1784,8 +1801,8 @@
6.1278 ///Find an arc between two nodes.
6.1279
6.1280 ///Find an arc between two nodes.
6.1281 - ///\param s The source node
6.1282 - ///\param t The target node
6.1283 + ///\param s The source node.
6.1284 + ///\param t The target node.
6.1285 ///\param prev The previous arc between \c s and \c t. It it is INVALID or
6.1286 ///not given, the operator finds the first appropriate arc.
6.1287 ///\return An arc from \c s to \c t after \c prev or
6.1288 @@ -1796,18 +1813,17 @@
6.1289 ///\code
6.1290 ///AllArcLookUp<ListDigraph> ae(g);
6.1291 ///...
6.1292 - ///int n=0;
6.1293 - ///for(Arc e=ae(u,v);e!=INVALID;e=ae(u,v,e)) n++;
6.1294 + ///int n = 0;
6.1295 + ///for(Arc a = ae(u,v); a != INVALID; a=ae(u,v,a)) n++;
6.1296 ///\endcode
6.1297 ///
6.1298 - ///Finding the first arc take <em>O(</em>log<em>d)</em> time, where
6.1299 - /// <em>d</em> is the number of outgoing arcs of \c s. Then, the
6.1300 + ///Finding the first arc take <em>O</em>(log<em>d</em>) time, where
6.1301 + ///<em>d</em> is the number of outgoing arcs of \c s. Then, the
6.1302 ///consecutive arcs are found in constant time.
6.1303 ///
6.1304 ///\warning If you change the digraph, refresh() must be called before using
6.1305 ///this operator. If you change the outgoing arcs of
6.1306 - ///a single node \c n, then
6.1307 - ///\ref refresh(Node) "refresh(n)" is enough.
6.1308 + ///a single node \c n, then \ref refresh(Node) "refresh(n)" is enough.
6.1309 ///
6.1310 #ifdef DOXYGEN
6.1311 Arc operator()(Node s, Node t, Arc prev=INVALID) const {}
7.1 --- a/lemon/dfs.h Fri Sep 26 12:40:11 2008 +0200
7.2 +++ b/lemon/dfs.h Sat Sep 27 14:33:28 2008 +0200
7.3 @@ -55,7 +55,6 @@
7.4 ///This function instantiates a \ref PredMap.
7.5 ///\param g is the digraph, to which we would like to define the
7.6 ///\ref PredMap.
7.7 - ///\todo The digraph alone may be insufficient to initialize
7.8 static PredMap *createPredMap(const Digraph &g)
7.9 {
7.10 return new PredMap(g);
7.11 @@ -65,7 +64,6 @@
7.12
7.13 ///The type of the map that indicates which nodes are processed.
7.14 ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
7.15 - ///By default it is a NullMap.
7.16 typedef NullMap<typename Digraph::Node,bool> ProcessedMap;
7.17 ///Instantiates a \ref ProcessedMap.
7.18
7.19 @@ -196,8 +194,7 @@
7.20 std::vector<typename Digraph::OutArcIt> _stack;
7.21 int _stack_head;
7.22
7.23 - ///Creates the maps if necessary.
7.24 - ///\todo Better memory allocation (instead of new).
7.25 + //Creates the maps if necessary.
7.26 void create_maps()
7.27 {
7.28 if(!_pred) {
7.29 @@ -782,7 +779,6 @@
7.30 ///This function instantiates a \ref PredMap.
7.31 ///\param g is the digraph, to which we would like to define the
7.32 ///\ref PredMap.
7.33 - ///\todo The digraph alone may be insufficient to initialize
7.34 static PredMap *createPredMap(const Digraph &g)
7.35 {
7.36 return new PredMap(g);
7.37 @@ -1317,8 +1313,7 @@
7.38 std::vector<typename Digraph::Arc> _stack;
7.39 int _stack_head;
7.40
7.41 - ///Creates the maps if necessary.
7.42 - ///\todo Better memory allocation (instead of new).
7.43 + //Creates the maps if necessary.
7.44 void create_maps() {
7.45 if(!_reached) {
7.46 local_reached = true;
8.1 --- a/lemon/dijkstra.h Fri Sep 26 12:40:11 2008 +0200
8.2 +++ b/lemon/dijkstra.h Sat Sep 27 14:33:28 2008 +0200
8.3 @@ -144,7 +144,6 @@
8.4 ///This function instantiates a \ref PredMap.
8.5 ///\param g is the digraph, to which we would like to define the
8.6 ///\ref PredMap.
8.7 - ///\todo The digraph alone may be insufficient for the initialization
8.8 static PredMap *createPredMap(const Digraph &g)
8.9 {
8.10 return new PredMap(g);
8.11 @@ -155,8 +154,6 @@
8.12 ///The type of the map that indicates which nodes are processed.
8.13 ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
8.14 ///By default it is a NullMap.
8.15 - ///\todo If it is set to a real map,
8.16 - ///Dijkstra::processed() should read this.
8.17 typedef NullMap<typename Digraph::Node,bool> ProcessedMap;
8.18 ///Instantiates a \ref ProcessedMap.
8.19
8.20 @@ -297,8 +294,7 @@
8.21 //Indicates if _heap is locally allocated (true) or not.
8.22 bool local_heap;
8.23
8.24 - ///Creates the maps if necessary.
8.25 - ///\todo Better memory allocation (instead of new).
8.26 + //Creates the maps if necessary.
8.27 void create_maps()
8.28 {
8.29 if(!_pred) {
8.30 @@ -965,7 +961,6 @@
8.31 ///This function instantiates a \ref HeapCrossRef.
8.32 /// \param g is the digraph, to which we would like to define the
8.33 /// HeapCrossRef.
8.34 - /// \todo The digraph alone may be insufficient for the initialization
8.35 static HeapCrossRef *createHeapCrossRef(const Digraph &g)
8.36 {
8.37 return new HeapCrossRef(g);
8.38 @@ -1001,7 +996,6 @@
8.39 ///This function instantiates a \ref PredMap.
8.40 ///\param g is the digraph, to which we would like to define the
8.41 ///\ref PredMap.
8.42 - ///\todo The digraph alone may be insufficient to initialize
8.43 static PredMap *createPredMap(const Digraph &g)
8.44 {
8.45 return new PredMap(g);
8.46 @@ -1012,9 +1006,6 @@
8.47 ///The type of the map that indicates which nodes are processed.
8.48 ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
8.49 ///By default it is a NullMap.
8.50 - ///\todo If it is set to a real map,
8.51 - ///Dijkstra::processed() should read this.
8.52 - ///\todo named parameter to set this type, function to read and write.
8.53 typedef NullMap<typename Digraph::Node,bool> ProcessedMap;
8.54 ///Instantiates a \ref ProcessedMap.
8.55
8.56 @@ -1060,7 +1051,6 @@
8.57 /// as well as the \ref Dijkstra class.
8.58 /// The \ref DijkstraWizardBase is a class to be the default traits of the
8.59 /// \ref DijkstraWizard class.
8.60 - /// \todo More named parameters are required...
8.61 template<class GR,class LM>
8.62 class DijkstraWizardBase : public DijkstraWizardDefaultTraits<GR,LM>
8.63 {
9.1 --- a/lemon/error.h Fri Sep 26 12:40:11 2008 +0200
9.2 +++ b/lemon/error.h Sat Sep 27 14:33:28 2008 +0200
9.3 @@ -102,8 +102,6 @@
9.4 protected:
9.5 ///\e
9.6
9.7 - ///\todo The good solution is boost::shared_ptr...
9.8 - ///
9.9 mutable std::auto_ptr<std::ostringstream> buf;
9.10
9.11 ///\e
10.1 --- a/lemon/graph_to_eps.h Fri Sep 26 12:40:11 2008 +0200
10.2 +++ b/lemon/graph_to_eps.h Sat Sep 27 14:33:28 2008 +0200
10.3 @@ -666,7 +666,6 @@
10.4 ///this function calls the algorithm itself, i.e. in this case
10.5 ///it draws the graph.
10.6 void run() {
10.7 - //\todo better 'epsilon' would be nice here.
10.8 const double EPSILON=1e-9;
10.9 if(dontPrint) return;
10.10
10.11 @@ -707,7 +706,6 @@
10.12 double max_w=0;
10.13 for(ArcIt e(g);e!=INVALID;++e)
10.14 max_w=std::max(double(_arcWidths[e]),max_w);
10.15 - //\todo better 'epsilon' would be nice here.
10.16 if(max_w>EPSILON) {
10.17 _arcWidthScale/=max_w;
10.18 }
10.19 @@ -717,7 +715,6 @@
10.20 double max_s=0;
10.21 for(NodeIt n(g);n!=INVALID;++n)
10.22 max_s=std::max(double(_nodeSizes[n]),max_s);
10.23 - //\todo better 'epsilon' would be nice here.
10.24 if(max_s>EPSILON) {
10.25 _nodeScale/=max_s;
10.26 }
10.27 @@ -873,7 +870,6 @@
10.28 << -bb.left() << ' ' << -bb.bottom() << " translate\n";
10.29 }
10.30 else {
10.31 - //\todo Verify centering
10.32 double sc= std::min((A4HEIGHT-2*A4BORDER)/bb.width(),
10.33 (A4WIDTH-2*A4BORDER)/bb.height());
10.34 os << ((A4WIDTH -2*A4BORDER)-sc*bb.height())/2 + A4BORDER << ' '
10.35 @@ -906,7 +902,6 @@
10.36 dim2::Point<double>
10.37 dvec(mycoords[g.target(*i)]-mycoords[g.source(*i)]);
10.38 double l=std::sqrt(dvec.normSquare());
10.39 - //\todo better 'epsilon' would be nice here.
10.40 dim2::Point<double> d(dvec/std::max(l,EPSILON));
10.41 dim2::Point<double> m;
10.42 // m=dim2::Point<double>(mycoords[g.target(*i)]+
11.1 --- a/lemon/list_graph.h Fri Sep 26 12:40:11 2008 +0200
11.2 +++ b/lemon/list_graph.h Sat Sep 27 14:33:28 2008 +0200
11.3 @@ -501,10 +501,8 @@
11.4 ///valid. However <tt>InArcIt</tt>s and <tt>OutArcIt</tt>s may
11.5 ///be invalidated.
11.6 ///
11.7 - ///\warning This functionality cannot be used together with the
11.8 + ///\warning This functionality cannot be used in conjunction with the
11.9 ///Snapshot feature.
11.10 - ///
11.11 - ///\todo It could be implemented in a bit faster way.
11.12 Node split(Node n, bool connect = true) {
11.13 Node b = addNode();
11.14 for(OutArcIt e(*this,n);e!=INVALID;) {
12.1 --- a/lemon/maps.h Fri Sep 26 12:40:11 2008 +0200
12.2 +++ b/lemon/maps.h Sat Sep 27 14:33:28 2008 +0200
12.3 @@ -484,8 +484,6 @@
12.4 /// function.
12.5 ///
12.6 /// \sa CombineMap
12.7 - ///
12.8 - /// \todo Check the requirements.
12.9 template <typename M1, typename M2>
12.10 class ComposeMap : public MapBase<typename M2::Key, typename M1::Value> {
12.11 const M1 &_m1;
12.12 @@ -540,8 +538,6 @@
12.13 /// function.
12.14 ///
12.15 /// \sa ComposeMap
12.16 - ///
12.17 - /// \todo Check the requirements.
12.18 template<typename M1, typename M2, typename F,
12.19 typename V = typename F::result_type>
12.20 class CombineMap : public MapBase<typename M1::Key, V> {
13.1 --- a/lemon/random.h Fri Sep 26 12:40:11 2008 +0200
13.2 +++ b/lemon/random.h Sat Sep 27 14:33:28 2008 +0200
13.3 @@ -821,7 +821,6 @@
13.4 /// Standard Gauss distribution.
13.5 /// \note The Cartesian form of the Box-Muller
13.6 /// transformation is used to generate a random normal distribution.
13.7 - /// \todo Consider using the "ziggurat" method instead.
13.8 double gauss()
13.9 {
13.10 double V1,V2,S;
14.1 --- a/lemon/smart_graph.h Fri Sep 26 12:40:11 2008 +0200
14.2 +++ b/lemon/smart_graph.h Sat Sep 27 14:33:28 2008 +0200
14.3 @@ -300,7 +300,6 @@
14.4 ///may be invalidated.
14.5 ///\warning This functionality cannot be used together with the Snapshot
14.6 ///feature.
14.7 - ///\todo It could be implemented in a bit faster way.
14.8 Node split(Node n, bool connect = true)
14.9 {
14.10 Node b = addNode();
15.1 --- a/lemon/time_measure.h Fri Sep 26 12:40:11 2008 +0200
15.2 +++ b/lemon/time_measure.h Sat Sep 27 14:33:28 2008 +0200
15.3 @@ -292,7 +292,6 @@
15.4 ///\note If you want to measure the running time of the execution of a certain
15.5 ///function, consider the usage of \ref TimeReport instead.
15.6 ///
15.7 - ///\todo This shouldn't be Unix (Linux) specific.
15.8 ///\sa TimeReport
15.9 class Timer
15.10 {
15.11 @@ -487,7 +486,6 @@
15.12 ///
15.13 ///\sa Timer
15.14 ///\sa NoTimeReport
15.15 - ///\todo There is no test case for this
15.16 class TimeReport : public Timer
15.17 {
15.18 std::string _title;
16.1 --- a/lemon/tolerance.h Fri Sep 26 12:40:11 2008 +0200
16.2 +++ b/lemon/tolerance.h Sat Sep 27 14:33:28 2008 +0200
16.3 @@ -24,8 +24,6 @@
16.4 ///\brief A basic tool to handle the anomalies of calculation with
16.5 ///floating point numbers.
16.6 ///
16.7 -///\todo It should be in a module like "Basic tools"
16.8 -
16.9
16.10 namespace lemon {
16.11
17.1 --- a/scripts/chg-len.py Fri Sep 26 12:40:11 2008 +0200
17.2 +++ b/scripts/chg-len.py Sat Sep 27 14:33:28 2008 +0200
17.3 @@ -9,13 +9,14 @@
17.4 in the revision graph from revison 0 to the current one.
17.5 """
17.6 exit(0)
17.7 -plist = os.popen("hg parents --template='{rev}\n'").readlines()
17.8 +plist = os.popen("HGRCPATH='' hg parents --template='{rev}\n'").readlines()
17.9 if len(plist)>1:
17.10 print "You are in the process of merging"
17.11 exit(1)
17.12 PAR = int(plist[0])
17.13
17.14 -f = os.popen("hg log -r 0:tip --template='{rev} {parents}\n'").readlines()
17.15 +f = os.popen("HGRCPATH='' hg log -r 0:tip --template='{rev} {parents}\n'").\
17.16 + readlines()
17.17 REV = -1
17.18 lengths=[]
17.19 for l in f:
18.1 --- a/test/graph_copy_test.cc Fri Sep 26 12:40:11 2008 +0200
18.2 +++ b/test/graph_copy_test.cc Sat Sep 27 14:33:28 2008 +0200
18.3 @@ -63,11 +63,11 @@
18.4 ListDigraph::NodeMap<SmartDigraph::Node> ncr(to);
18.5 ListDigraph::ArcMap<SmartDigraph::Arc> ecr(to);
18.6
18.7 - DigraphCopy<ListDigraph, SmartDigraph>(to, from).
18.8 - nodeMap(tnm, fnm).arcMap(tam, fam).
18.9 + digraphCopy(from, to).
18.10 + nodeMap(fnm, tnm).arcMap(fam, tam).
18.11 nodeRef(nr).arcRef(er).
18.12 nodeCrossRef(ncr).arcCrossRef(ecr).
18.13 - node(tn, fn).arc(ta, fa).run();
18.14 + node(fn, tn).arc(fa, ta).run();
18.15
18.16 for (SmartDigraph::NodeIt it(from); it != INVALID; ++it) {
18.17 check(ncr[nr[it]] == it, "Wrong copy.");
18.18 @@ -138,11 +138,11 @@
18.19 ListGraph::ArcMap<SmartGraph::Arc> acr(to);
18.20 ListGraph::EdgeMap<SmartGraph::Edge> ecr(to);
18.21
18.22 - GraphCopy<ListGraph, SmartGraph>(to, from).
18.23 - nodeMap(tnm, fnm).arcMap(tam, fam).edgeMap(tem, fem).
18.24 + graphCopy(from, to).
18.25 + nodeMap(fnm, tnm).arcMap(fam, tam).edgeMap(fem, tem).
18.26 nodeRef(nr).arcRef(ar).edgeRef(er).
18.27 nodeCrossRef(ncr).arcCrossRef(acr).edgeCrossRef(ecr).
18.28 - node(tn, fn).arc(ta, fa).edge(te, fe).run();
18.29 + node(fn, tn).arc(fa, ta).edge(fe, te).run();
18.30
18.31 for (SmartGraph::NodeIt it(from); it != INVALID; ++it) {
18.32 check(ncr[nr[it]] == it, "Wrong copy.");