1.1 --- a/lemon/adaptors.h Fri Jan 09 12:43:52 2009 +0100
1.2 +++ b/lemon/adaptors.h Fri Jan 09 12:54:27 2009 +0100
1.3 @@ -21,7 +21,7 @@
1.4
1.5 /// \ingroup graph_adaptors
1.6 /// \file
1.7 -/// \brief Several graph adaptors
1.8 +/// \brief Adaptor classes for digraphs and graphs
1.9 ///
1.10 /// This file contains several useful adaptors for digraphs and graphs.
1.11
1.12 @@ -346,14 +346,22 @@
1.13
1.14 /// \ingroup graph_adaptors
1.15 ///
1.16 - /// \brief A digraph adaptor which reverses the orientation of the arcs.
1.17 + /// \brief Adaptor class for reversing the orientation of the arcs in
1.18 + /// a digraph.
1.19 ///
1.20 - /// ReverseDigraph reverses the arcs in the adapted digraph. The
1.21 - /// SubDigraph is conform to the \ref concepts::Digraph
1.22 - /// "Digraph concept".
1.23 + /// ReverseDigraph can be used for reversing the arcs in a digraph.
1.24 + /// It conforms to the \ref concepts::Digraph "Digraph" concept.
1.25 ///
1.26 - /// \tparam _Digraph It must be conform to the \ref concepts::Digraph
1.27 - /// "Digraph concept". The type can be specified to be const.
1.28 + /// The adapted digraph can also be modified through this adaptor
1.29 + /// by adding or removing nodes or arcs, unless the \c _Digraph template
1.30 + /// parameter is set to be \c const.
1.31 + ///
1.32 + /// \tparam _Digraph The type of the adapted digraph.
1.33 + /// It must conform to the \ref concepts::Digraph "Digraph" concept.
1.34 + /// It can also be specified to be \c const.
1.35 + ///
1.36 + /// \note The \c Node and \c Arc types of this adaptor and the adapted
1.37 + /// digraph are convertible to each other.
1.38 template<typename _Digraph>
1.39 class ReverseDigraph :
1.40 public DigraphAdaptorExtender<ReverseDigraphBase<_Digraph> > {
1.41 @@ -367,20 +375,23 @@
1.42
1.43 /// \brief Constructor
1.44 ///
1.45 - /// Creates a reverse digraph adaptor for the given digraph
1.46 + /// Creates a reverse digraph adaptor for the given digraph.
1.47 explicit ReverseDigraph(Digraph& digraph) {
1.48 Parent::setDigraph(digraph);
1.49 }
1.50 };
1.51
1.52 - /// \brief Just gives back a reverse digraph adaptor
1.53 + /// \brief Returns a read-only ReverseDigraph adaptor
1.54 ///
1.55 - /// Just gives back a reverse digraph adaptor
1.56 + /// This function just returns a read-only \ref ReverseDigraph adaptor.
1.57 + /// \ingroup graph_adaptors
1.58 + /// \relates ReverseDigraph
1.59 template<typename Digraph>
1.60 ReverseDigraph<const Digraph> reverseDigraph(const Digraph& digraph) {
1.61 return ReverseDigraph<const Digraph>(digraph);
1.62 }
1.63
1.64 +
1.65 template <typename _Digraph, typename _NodeFilterMap,
1.66 typename _ArcFilterMap, bool _checked = true>
1.67 class SubDigraphBase : public DigraphAdaptorBase<_Digraph> {
1.68 @@ -685,41 +696,64 @@
1.69
1.70 /// \ingroup graph_adaptors
1.71 ///
1.72 - /// \brief An adaptor for hiding nodes and arcs in a digraph
1.73 + /// \brief Adaptor class for hiding nodes and arcs in a digraph
1.74 ///
1.75 - /// SubDigraph hides nodes and arcs in a digraph. A bool node map
1.76 - /// and a bool arc map must be specified, which define the filters
1.77 - /// for nodes and arcs. Just the nodes and arcs with true value are
1.78 - /// shown in the subdigraph. The SubDigraph is conform to the \ref
1.79 - /// concepts::Digraph "Digraph concept". If the \c _checked parameter
1.80 - /// is true, then the arcs incident to filtered nodes are also
1.81 + /// SubDigraph can be used for hiding nodes and arcs in a digraph.
1.82 + /// A \c bool node map and a \c bool arc map must be specified, which
1.83 + /// define the filters for nodes and arcs.
1.84 + /// Only the nodes and arcs with \c true filter value are
1.85 + /// shown in the subdigraph. This adaptor conforms to the \ref
1.86 + /// concepts::Digraph "Digraph" concept. If the \c _checked parameter
1.87 + /// is \c true, then the arcs incident to hidden nodes are also
1.88 /// filtered out.
1.89 ///
1.90 - /// \tparam _Digraph It must be conform to the \ref
1.91 - /// concepts::Digraph "Digraph concept". The type can be specified
1.92 - /// to const.
1.93 - /// \tparam _NodeFilterMap A bool valued node map of the the adapted digraph.
1.94 - /// \tparam _ArcFilterMap A bool valued arc map of the the adapted digraph.
1.95 - /// \tparam _checked If the parameter is false then the arc filtering
1.96 - /// is not checked with respect to node filter. Otherwise, each arc
1.97 - /// is automatically filtered, which is incident to a filtered node.
1.98 + /// The adapted digraph can also be modified through this adaptor
1.99 + /// by adding or removing nodes or arcs, unless the \c _Digraph template
1.100 + /// parameter is set to be \c const.
1.101 + ///
1.102 + /// \tparam _Digraph The type of the adapted digraph.
1.103 + /// It must conform to the \ref concepts::Digraph "Digraph" concept.
1.104 + /// It can also be specified to be \c const.
1.105 + /// \tparam _NodeFilterMap A \c bool (or convertible) node map of the
1.106 + /// adapted digraph. The default map type is
1.107 + /// \ref concepts::Digraph::NodeMap "_Digraph::NodeMap<bool>".
1.108 + /// \tparam _ArcFilterMap A \c bool (or convertible) arc map of the
1.109 + /// adapted digraph. The default map type is
1.110 + /// \ref concepts::Digraph::ArcMap "_Digraph::ArcMap<bool>".
1.111 + /// \tparam _checked If this parameter is set to \c false, then the arc
1.112 + /// filtering is not checked with respect to the node filter.
1.113 + /// Otherwise, each arc that is incident to a hidden node is automatically
1.114 + /// filtered out. This is the default option.
1.115 + ///
1.116 + /// \note The \c Node and \c Arc types of this adaptor and the adapted
1.117 + /// digraph are convertible to each other.
1.118 ///
1.119 /// \see FilterNodes
1.120 /// \see FilterArcs
1.121 +#ifdef DOXYGEN
1.122 + template<typename _Digraph,
1.123 + typename _NodeFilterMap,
1.124 + typename _ArcFilterMap,
1.125 + bool _checked>
1.126 +#else
1.127 template<typename _Digraph,
1.128 typename _NodeFilterMap = typename _Digraph::template NodeMap<bool>,
1.129 typename _ArcFilterMap = typename _Digraph::template ArcMap<bool>,
1.130 bool _checked = true>
1.131 +#endif
1.132 class SubDigraph
1.133 : public DigraphAdaptorExtender<
1.134 SubDigraphBase<_Digraph, _NodeFilterMap, _ArcFilterMap, _checked> > {
1.135 public:
1.136 + /// The type of the adapted digraph.
1.137 typedef _Digraph Digraph;
1.138 + /// The type of the node filter map.
1.139 typedef _NodeFilterMap NodeFilterMap;
1.140 + /// The type of the arc filter map.
1.141 typedef _ArcFilterMap ArcFilterMap;
1.142
1.143 typedef DigraphAdaptorExtender<
1.144 - SubDigraphBase<Digraph, NodeFilterMap, ArcFilterMap, _checked> >
1.145 + SubDigraphBase<_Digraph, _NodeFilterMap, _ArcFilterMap, _checked> >
1.146 Parent;
1.147
1.148 typedef typename Parent::Node Node;
1.149 @@ -731,8 +765,8 @@
1.150
1.151 /// \brief Constructor
1.152 ///
1.153 - /// Creates a subdigraph for the given digraph with
1.154 - /// given node and arc map filters.
1.155 + /// Creates a subdigraph for the given digraph with the
1.156 + /// given node and arc filter maps.
1.157 SubDigraph(Digraph& digraph, NodeFilterMap& node_filter,
1.158 ArcFilterMap& arc_filter) {
1.159 setDigraph(digraph);
1.160 @@ -740,51 +774,53 @@
1.161 setArcFilterMap(arc_filter);
1.162 }
1.163
1.164 - /// \brief Hides the node of the graph
1.165 + /// \brief Hides the given node
1.166 ///
1.167 - /// This function hides \c n in the digraph, i.e. the iteration
1.168 - /// jumps over it. This is done by simply setting the value of \c n
1.169 - /// to be false in the corresponding node-map.
1.170 + /// This function hides the given node in the subdigraph,
1.171 + /// i.e. the iteration jumps over it.
1.172 + /// It is done by simply setting the assigned value of \c n
1.173 + /// to be \c false in the node filter map.
1.174 void hide(const Node& n) const { Parent::hide(n); }
1.175
1.176 - /// \brief Hides the arc of the graph
1.177 + /// \brief Hides the given arc
1.178 ///
1.179 - /// This function hides \c a in the digraph, i.e. the iteration
1.180 - /// jumps over it. This is done by simply setting the value of \c a
1.181 - /// to be false in the corresponding arc-map.
1.182 + /// This function hides the given arc in the subdigraph,
1.183 + /// i.e. the iteration jumps over it.
1.184 + /// It is done by simply setting the assigned value of \c a
1.185 + /// to be \c false in the arc filter map.
1.186 void hide(const Arc& a) const { Parent::hide(a); }
1.187
1.188 - /// \brief Unhides the node of the graph
1.189 + /// \brief Shows the given node
1.190 ///
1.191 - /// The value of \c n is set to be true in the node-map which stores
1.192 - /// hide information. If \c n was hidden previuosly, then it is shown
1.193 - /// again
1.194 + /// This function shows the given node in the subdigraph.
1.195 + /// It is done by simply setting the assigned value of \c n
1.196 + /// to be \c true in the node filter map.
1.197 void unHide(const Node& n) const { Parent::unHide(n); }
1.198
1.199 - /// \brief Unhides the arc of the graph
1.200 + /// \brief Shows the given arc
1.201 ///
1.202 - /// The value of \c a is set to be true in the arc-map which stores
1.203 - /// hide information. If \c a was hidden previuosly, then it is shown
1.204 - /// again
1.205 + /// This function shows the given arc in the subdigraph.
1.206 + /// It is done by simply setting the assigned value of \c a
1.207 + /// to be \c true in the arc filter map.
1.208 void unHide(const Arc& a) const { Parent::unHide(a); }
1.209
1.210 - /// \brief Returns true if \c n is hidden.
1.211 + /// \brief Returns \c true if the given node is hidden.
1.212 ///
1.213 - /// Returns true if \c n is hidden.
1.214 + /// This function returns \c true if the given node is hidden.
1.215 + bool hidden(const Node& n) const { return Parent::hidden(n); }
1.216 +
1.217 + /// \brief Returns \c true if the given arc is hidden.
1.218 ///
1.219 - bool hidden(const Node& n) const { return Parent::hidden(n); }
1.220 -
1.221 - /// \brief Returns true if \c a is hidden.
1.222 - ///
1.223 - /// Returns true if \c a is hidden.
1.224 - ///
1.225 + /// This function returns \c true if the given arc is hidden.
1.226 bool hidden(const Arc& a) const { return Parent::hidden(a); }
1.227
1.228 };
1.229
1.230 - /// \brief Just gives back a subdigraph
1.231 + /// \brief Returns a read-only SubDigraph adaptor
1.232 ///
1.233 - /// Just gives back a subdigraph
1.234 + /// This function just returns a read-only \ref SubDigraph adaptor.
1.235 + /// \ingroup graph_adaptors
1.236 + /// \relates SubDigraph
1.237 template<typename Digraph, typename NodeFilterMap, typename ArcFilterMap>
1.238 SubDigraph<const Digraph, NodeFilterMap, ArcFilterMap>
1.239 subDigraph(const Digraph& digraph, NodeFilterMap& nfm, ArcFilterMap& afm) {
1.240 @@ -1249,37 +1285,65 @@
1.241
1.242 /// \ingroup graph_adaptors
1.243 ///
1.244 - /// \brief A graph adaptor for hiding nodes and edges in an
1.245 - /// undirected graph.
1.246 + /// \brief Adaptor class for hiding nodes and edges in an undirected
1.247 + /// graph.
1.248 ///
1.249 - /// SubGraph hides nodes and edges in a graph. A bool node map and a
1.250 - /// bool edge map must be specified, which define the filters for
1.251 - /// nodes and edges. Just the nodes and edges with true value are
1.252 - /// shown in the subgraph. The SubGraph is conform to the \ref
1.253 - /// concepts::Graph "Graph concept". If the \c _checked parameter is
1.254 - /// true, then the edges incident to filtered nodes are also
1.255 + /// SubGraph can be used for hiding nodes and edges in a graph.
1.256 + /// A \c bool node map and a \c bool edge map must be specified, which
1.257 + /// define the filters for nodes and edges.
1.258 + /// Only the nodes and edges with \c true filter value are
1.259 + /// shown in the subgraph. This adaptor conforms to the \ref
1.260 + /// concepts::Graph "Graph" concept. If the \c _checked parameter is
1.261 + /// \c true, then the edges incident to hidden nodes are also
1.262 /// filtered out.
1.263 ///
1.264 - /// \tparam _Graph It must be conform to the \ref
1.265 - /// concepts::Graph "Graph concept". The type can be specified
1.266 - /// to const.
1.267 - /// \tparam _NodeFilterMap A bool valued node map of the the adapted graph.
1.268 - /// \tparam _EdgeFilterMap A bool valued edge map of the the adapted graph.
1.269 - /// \tparam _checked If the parameter is false then the edge filtering
1.270 - /// is not checked with respect to node filter. Otherwise, each edge
1.271 - /// is automatically filtered, which is incident to a filtered node.
1.272 + /// The adapted graph can also be modified through this adaptor
1.273 + /// by adding or removing nodes or edges, unless the \c _Graph template
1.274 + /// parameter is set to be \c const.
1.275 + ///
1.276 + /// \tparam _Graph The type of the adapted graph.
1.277 + /// It must conform to the \ref concepts::Graph "Graph" concept.
1.278 + /// It can also be specified to be \c const.
1.279 + /// \tparam _NodeFilterMap A \c bool (or convertible) node map of the
1.280 + /// adapted graph. The default map type is
1.281 + /// \ref concepts::Graph::NodeMap "_Graph::NodeMap<bool>".
1.282 + /// \tparam _EdgeFilterMap A \c bool (or convertible) edge map of the
1.283 + /// adapted graph. The default map type is
1.284 + /// \ref concepts::Graph::EdgeMap "_Graph::EdgeMap<bool>".
1.285 + /// \tparam _checked If this parameter is set to \c false, then the edge
1.286 + /// filtering is not checked with respect to the node filter.
1.287 + /// Otherwise, each edge that is incident to a hidden node is automatically
1.288 + /// filtered out. This is the default option.
1.289 + ///
1.290 + /// \note The \c Node, \c Edge and \c Arc types of this adaptor and the
1.291 + /// adapted graph are convertible to each other.
1.292 ///
1.293 /// \see FilterNodes
1.294 /// \see FilterEdges
1.295 - template<typename _Graph, typename NodeFilterMap,
1.296 - typename EdgeFilterMap, bool _checked = true>
1.297 +#ifdef DOXYGEN
1.298 + template<typename _Graph,
1.299 + typename _NodeFilterMap,
1.300 + typename _EdgeFilterMap,
1.301 + bool _checked>
1.302 +#else
1.303 + template<typename _Graph,
1.304 + typename _NodeFilterMap = typename _Graph::template NodeMap<bool>,
1.305 + typename _EdgeFilterMap = typename _Graph::template EdgeMap<bool>,
1.306 + bool _checked = true>
1.307 +#endif
1.308 class SubGraph
1.309 : public GraphAdaptorExtender<
1.310 - SubGraphBase<_Graph, NodeFilterMap, EdgeFilterMap, _checked> > {
1.311 + SubGraphBase<_Graph, _NodeFilterMap, _EdgeFilterMap, _checked> > {
1.312 public:
1.313 + /// The type of the adapted graph.
1.314 typedef _Graph Graph;
1.315 + /// The type of the node filter map.
1.316 + typedef _NodeFilterMap NodeFilterMap;
1.317 + /// The type of the edge filter map.
1.318 + typedef _EdgeFilterMap EdgeFilterMap;
1.319 +
1.320 typedef GraphAdaptorExtender<
1.321 - SubGraphBase<_Graph, NodeFilterMap, EdgeFilterMap> > Parent;
1.322 + SubGraphBase<_Graph, _NodeFilterMap, _EdgeFilterMap, _checked> > Parent;
1.323
1.324 typedef typename Parent::Node Node;
1.325 typedef typename Parent::Edge Edge;
1.326 @@ -1290,59 +1354,61 @@
1.327
1.328 /// \brief Constructor
1.329 ///
1.330 - /// Creates a subgraph for the given graph with given node and
1.331 - /// edge map filters.
1.332 - SubGraph(Graph& _graph, NodeFilterMap& node_filter_map,
1.333 + /// Creates a subgraph for the given graph with the given node
1.334 + /// and edge filter maps.
1.335 + SubGraph(Graph& graph, NodeFilterMap& node_filter_map,
1.336 EdgeFilterMap& edge_filter_map) {
1.337 - setGraph(_graph);
1.338 + setGraph(graph);
1.339 setNodeFilterMap(node_filter_map);
1.340 setEdgeFilterMap(edge_filter_map);
1.341 }
1.342
1.343 - /// \brief Hides the node of the graph
1.344 + /// \brief Hides the given node
1.345 ///
1.346 - /// This function hides \c n in the graph, i.e. the iteration
1.347 - /// jumps over it. This is done by simply setting the value of \c n
1.348 - /// to be false in the corresponding node-map.
1.349 + /// This function hides the given node in the subgraph,
1.350 + /// i.e. the iteration jumps over it.
1.351 + /// It is done by simply setting the assigned value of \c n
1.352 + /// to be \c false in the node filter map.
1.353 void hide(const Node& n) const { Parent::hide(n); }
1.354
1.355 - /// \brief Hides the edge of the graph
1.356 + /// \brief Hides the given edge
1.357 ///
1.358 - /// This function hides \c e in the graph, i.e. the iteration
1.359 - /// jumps over it. This is done by simply setting the value of \c e
1.360 - /// to be false in the corresponding edge-map.
1.361 + /// This function hides the given edge in the subgraph,
1.362 + /// i.e. the iteration jumps over it.
1.363 + /// It is done by simply setting the assigned value of \c e
1.364 + /// to be \c false in the edge filter map.
1.365 void hide(const Edge& e) const { Parent::hide(e); }
1.366
1.367 - /// \brief Unhides the node of the graph
1.368 + /// \brief Shows the given node
1.369 ///
1.370 - /// The value of \c n is set to be true in the node-map which stores
1.371 - /// hide information. If \c n was hidden previuosly, then it is shown
1.372 - /// again
1.373 + /// This function shows the given node in the subgraph.
1.374 + /// It is done by simply setting the assigned value of \c n
1.375 + /// to be \c true in the node filter map.
1.376 void unHide(const Node& n) const { Parent::unHide(n); }
1.377
1.378 - /// \brief Unhides the edge of the graph
1.379 + /// \brief Shows the given edge
1.380 ///
1.381 - /// The value of \c e is set to be true in the edge-map which stores
1.382 - /// hide information. If \c e was hidden previuosly, then it is shown
1.383 - /// again
1.384 + /// This function shows the given edge in the subgraph.
1.385 + /// It is done by simply setting the assigned value of \c e
1.386 + /// to be \c true in the edge filter map.
1.387 void unHide(const Edge& e) const { Parent::unHide(e); }
1.388
1.389 - /// \brief Returns true if \c n is hidden.
1.390 + /// \brief Returns \c true if the given node is hidden.
1.391 ///
1.392 - /// Returns true if \c n is hidden.
1.393 + /// This function returns \c true if the given node is hidden.
1.394 + bool hidden(const Node& n) const { return Parent::hidden(n); }
1.395 +
1.396 + /// \brief Returns \c true if the given edge is hidden.
1.397 ///
1.398 - bool hidden(const Node& n) const { return Parent::hidden(n); }
1.399 -
1.400 - /// \brief Returns true if \c e is hidden.
1.401 - ///
1.402 - /// Returns true if \c e is hidden.
1.403 - ///
1.404 + /// This function returns \c true if the given edge is hidden.
1.405 bool hidden(const Edge& e) const { return Parent::hidden(e); }
1.406 };
1.407
1.408 - /// \brief Just gives back a subgraph
1.409 + /// \brief Returns a read-only SubGraph adaptor
1.410 ///
1.411 - /// Just gives back a subgraph
1.412 + /// This function just returns a read-only \ref SubGraph adaptor.
1.413 + /// \ingroup graph_adaptors
1.414 + /// \relates SubGraph
1.415 template<typename Graph, typename NodeFilterMap, typename ArcFilterMap>
1.416 SubGraph<const Graph, NodeFilterMap, ArcFilterMap>
1.417 subGraph(const Graph& graph, NodeFilterMap& nfm, ArcFilterMap& efm) {
1.418 @@ -1373,32 +1439,42 @@
1.419 (graph, nfm, efm);
1.420 }
1.421
1.422 +
1.423 /// \ingroup graph_adaptors
1.424 ///
1.425 - /// \brief An adaptor for hiding nodes from a digraph or a graph.
1.426 + /// \brief Adaptor class for hiding nodes in a digraph or a graph.
1.427 ///
1.428 - /// FilterNodes adaptor hides nodes in a graph or a digraph. A bool
1.429 - /// node map must be specified, which defines the filters for
1.430 - /// nodes. Just the unfiltered nodes and the arcs or edges incident
1.431 - /// to unfiltered nodes are shown in the subdigraph or subgraph. The
1.432 - /// FilterNodes is conform to the \ref concepts::Digraph
1.433 - /// "Digraph concept" or \ref concepts::Graph "Graph concept" depending
1.434 - /// on the \c _Digraph template parameter. If the \c _checked
1.435 - /// parameter is true, then the arc or edges incident to filtered nodes
1.436 - /// are also filtered out.
1.437 + /// FilterNodes adaptor can be used for hiding nodes in a digraph or a
1.438 + /// graph. A \c bool node map must be specified, which defines the filter
1.439 + /// for the nodes. Only the nodes with \c true filter value and the
1.440 + /// arcs/edges incident to nodes both with \c true filter value are shown
1.441 + /// in the subgraph. This adaptor conforms to the \ref concepts::Digraph
1.442 + /// "Digraph" concept or the \ref concepts::Graph "Graph" concept
1.443 + /// depending on the \c _Graph template parameter.
1.444 ///
1.445 - /// \tparam _Digraph It must be conform to the \ref
1.446 - /// concepts::Digraph "Digraph concept" or \ref concepts::Graph
1.447 - /// "Graph concept". The type can be specified to be const.
1.448 - /// \tparam _NodeFilterMap A bool valued node map of the the adapted graph.
1.449 - /// \tparam _checked If the parameter is false then the arc or edge
1.450 - /// filtering is not checked with respect to node filter. In this
1.451 - /// case just isolated nodes can be filtered out from the
1.452 - /// graph.
1.453 + /// The adapted (di)graph can also be modified through this adaptor
1.454 + /// by adding or removing nodes or arcs/edges, unless the \c _Graph template
1.455 + /// parameter is set to be \c const.
1.456 + ///
1.457 + /// \tparam _Graph The type of the adapted digraph or graph.
1.458 + /// It must conform to the \ref concepts::Digraph "Digraph" concept
1.459 + /// or the \ref concepts::Graph "Graph" concept.
1.460 + /// It can also be specified to be \c const.
1.461 + /// \tparam _NodeFilterMap A \c bool (or convertible) node map of the
1.462 + /// adapted (di)graph. The default map type is
1.463 + /// \ref concepts::Graph::NodeMap "_Graph::NodeMap<bool>".
1.464 + /// \tparam _checked If this parameter is set to \c false then the arc/edge
1.465 + /// filtering is not checked with respect to the node filter. In this
1.466 + /// case only isolated nodes can be filtered out from the graph.
1.467 + /// Otherwise, each arc/edge that is incident to a hidden node is
1.468 + /// automatically filtered out. This is the default option.
1.469 + ///
1.470 + /// \note The \c Node and <tt>Arc/Edge</tt> types of this adaptor and the
1.471 + /// adapted (di)graph are convertible to each other.
1.472 #ifdef DOXYGEN
1.473 - template<typename _Digraph,
1.474 - typename _NodeFilterMap = typename _Digraph::template NodeMap<bool>,
1.475 - bool _checked = true>
1.476 + template<typename _Graph,
1.477 + typename _NodeFilterMap,
1.478 + bool _checked>
1.479 #else
1.480 template<typename _Digraph,
1.481 typename _NodeFilterMap = typename _Digraph::template NodeMap<bool>,
1.482 @@ -1430,33 +1506,37 @@
1.483
1.484 /// \brief Constructor
1.485 ///
1.486 - /// Creates an adaptor for the given digraph or graph with
1.487 + /// Creates a subgraph for the given digraph or graph with the
1.488 /// given node filter map.
1.489 - FilterNodes(Digraph& _digraph, NodeFilterMap& node_filter) :
1.490 +#ifdef DOXYGEN
1.491 + FilterNodes(_Graph& graph, _NodeFilterMap& node_filter) :
1.492 +#else
1.493 + FilterNodes(Digraph& graph, NodeFilterMap& node_filter) :
1.494 +#endif
1.495 Parent(), const_true_map(true) {
1.496 - Parent::setDigraph(_digraph);
1.497 + Parent::setDigraph(graph);
1.498 Parent::setNodeFilterMap(node_filter);
1.499 Parent::setArcFilterMap(const_true_map);
1.500 }
1.501
1.502 - /// \brief Hides the node of the graph
1.503 + /// \brief Hides the given node
1.504 ///
1.505 - /// This function hides \c n in the digraph or graph, i.e. the iteration
1.506 - /// jumps over it. This is done by simply setting the value of \c n
1.507 - /// to be false in the corresponding node map.
1.508 + /// This function hides the given node in the subgraph,
1.509 + /// i.e. the iteration jumps over it.
1.510 + /// It is done by simply setting the assigned value of \c n
1.511 + /// to be \c false in the node filter map.
1.512 void hide(const Node& n) const { Parent::hide(n); }
1.513
1.514 - /// \brief Unhides the node of the graph
1.515 + /// \brief Shows the given node
1.516 ///
1.517 - /// The value of \c n is set to be true in the node-map which stores
1.518 - /// hide information. If \c n was hidden previuosly, then it is shown
1.519 - /// again
1.520 + /// This function shows the given node in the subgraph.
1.521 + /// It is done by simply setting the assigned value of \c n
1.522 + /// to be \c true in the node filter map.
1.523 void unHide(const Node& n) const { Parent::unHide(n); }
1.524
1.525 - /// \brief Returns true if \c n is hidden.
1.526 + /// \brief Returns \c true if the given node is hidden.
1.527 ///
1.528 - /// Returns true if \c n is hidden.
1.529 - ///
1.530 + /// This function returns \c true if the given node is hidden.
1.531 bool hidden(const Node& n) const { return Parent::hidden(n); }
1.532
1.533 };
1.534 @@ -1496,9 +1576,11 @@
1.535 };
1.536
1.537
1.538 - /// \brief Just gives back a FilterNodes adaptor
1.539 + /// \brief Returns a read-only FilterNodes adaptor
1.540 ///
1.541 - /// Just gives back a FilterNodes adaptor
1.542 + /// This function just returns a read-only \ref FilterNodes adaptor.
1.543 + /// \ingroup graph_adaptors
1.544 + /// \relates FilterNodes
1.545 template<typename Digraph, typename NodeFilterMap>
1.546 FilterNodes<const Digraph, NodeFilterMap>
1.547 filterNodes(const Digraph& digraph, NodeFilterMap& nfm) {
1.548 @@ -1513,22 +1595,39 @@
1.549
1.550 /// \ingroup graph_adaptors
1.551 ///
1.552 - /// \brief An adaptor for hiding arcs from a digraph.
1.553 + /// \brief Adaptor class for hiding arcs in a digraph.
1.554 ///
1.555 - /// FilterArcs adaptor hides arcs in a digraph. A bool arc map must
1.556 - /// be specified, which defines the filters for arcs. Just the
1.557 - /// unfiltered arcs are shown in the subdigraph. The FilterArcs is
1.558 - /// conform to the \ref concepts::Digraph "Digraph concept".
1.559 + /// FilterArcs adaptor can be used for hiding arcs in a digraph.
1.560 + /// A \c bool arc map must be specified, which defines the filter for
1.561 + /// the arcs. Only the arcs with \c true filter value are shown in the
1.562 + /// subdigraph. This adaptor conforms to the \ref concepts::Digraph
1.563 + /// "Digraph" concept.
1.564 ///
1.565 - /// \tparam _Digraph It must be conform to the \ref concepts::Digraph
1.566 - /// "Digraph concept". The type can be specified to be const.
1.567 - /// \tparam _ArcFilterMap A bool valued arc map of the the adapted
1.568 - /// graph.
1.569 - template<typename _Digraph, typename _ArcFilterMap>
1.570 + /// The adapted digraph can also be modified through this adaptor
1.571 + /// by adding or removing nodes or arcs, unless the \c _Digraph template
1.572 + /// parameter is set to be \c const.
1.573 + ///
1.574 + /// \tparam _Digraph The type of the adapted digraph.
1.575 + /// It must conform to the \ref concepts::Digraph "Digraph" concept.
1.576 + /// It can also be specified to be \c const.
1.577 + /// \tparam _ArcFilterMap A \c bool (or convertible) arc map of the
1.578 + /// adapted digraph. The default map type is
1.579 + /// \ref concepts::Digraph::ArcMap "_Digraph::ArcMap<bool>".
1.580 + ///
1.581 + /// \note The \c Node and \c Arc types of this adaptor and the adapted
1.582 + /// digraph are convertible to each other.
1.583 +#ifdef DOXYGEN
1.584 + template<typename _Digraph,
1.585 + typename _ArcFilterMap>
1.586 +#else
1.587 + template<typename _Digraph,
1.588 + typename _ArcFilterMap = typename _Digraph::template ArcMap<bool> >
1.589 +#endif
1.590 class FilterArcs :
1.591 public SubDigraph<_Digraph, ConstMap<typename _Digraph::Node, bool>,
1.592 _ArcFilterMap, false> {
1.593 public:
1.594 +
1.595 typedef _Digraph Digraph;
1.596 typedef _ArcFilterMap ArcFilterMap;
1.597
1.598 @@ -1548,8 +1647,8 @@
1.599
1.600 /// \brief Constructor
1.601 ///
1.602 - /// Creates a FilterArcs adaptor for the given graph with
1.603 - /// given arc map filter.
1.604 + /// Creates a subdigraph for the given digraph with the given arc
1.605 + /// filter map.
1.606 FilterArcs(Digraph& digraph, ArcFilterMap& arc_filter)
1.607 : Parent(), const_true_map(true) {
1.608 Parent::setDigraph(digraph);
1.609 @@ -1557,31 +1656,33 @@
1.610 Parent::setArcFilterMap(arc_filter);
1.611 }
1.612
1.613 - /// \brief Hides the arc of the graph
1.614 + /// \brief Hides the given arc
1.615 ///
1.616 - /// This function hides \c a in the graph, i.e. the iteration
1.617 - /// jumps over it. This is done by simply setting the value of \c a
1.618 - /// to be false in the corresponding arc map.
1.619 + /// This function hides the given arc in the subdigraph,
1.620 + /// i.e. the iteration jumps over it.
1.621 + /// It is done by simply setting the assigned value of \c a
1.622 + /// to be \c false in the arc filter map.
1.623 void hide(const Arc& a) const { Parent::hide(a); }
1.624
1.625 - /// \brief Unhides the arc of the graph
1.626 + /// \brief Shows the given arc
1.627 ///
1.628 - /// The value of \c a is set to be true in the arc-map which stores
1.629 - /// hide information. If \c a was hidden previuosly, then it is shown
1.630 - /// again
1.631 + /// This function shows the given arc in the subdigraph.
1.632 + /// It is done by simply setting the assigned value of \c a
1.633 + /// to be \c true in the arc filter map.
1.634 void unHide(const Arc& a) const { Parent::unHide(a); }
1.635
1.636 - /// \brief Returns true if \c a is hidden.
1.637 + /// \brief Returns \c true if the given arc is hidden.
1.638 ///
1.639 - /// Returns true if \c a is hidden.
1.640 - ///
1.641 + /// This function returns \c true if the given arc is hidden.
1.642 bool hidden(const Arc& a) const { return Parent::hidden(a); }
1.643
1.644 };
1.645
1.646 - /// \brief Just gives back an FilterArcs adaptor
1.647 + /// \brief Returns a read-only FilterArcs adaptor
1.648 ///
1.649 - /// Just gives back an FilterArcs adaptor
1.650 + /// This function just returns a read-only \ref FilterArcs adaptor.
1.651 + /// \ingroup graph_adaptors
1.652 + /// \relates FilterArcs
1.653 template<typename Digraph, typename ArcFilterMap>
1.654 FilterArcs<const Digraph, ArcFilterMap>
1.655 filterArcs(const Digraph& digraph, ArcFilterMap& afm) {
1.656 @@ -1596,18 +1697,34 @@
1.657
1.658 /// \ingroup graph_adaptors
1.659 ///
1.660 - /// \brief An adaptor for hiding edges from a graph.
1.661 + /// \brief Adaptor class for hiding edges in a graph.
1.662 ///
1.663 - /// FilterEdges adaptor hides edges in a digraph. A bool edge map must
1.664 - /// be specified, which defines the filters for edges. Just the
1.665 - /// unfiltered edges are shown in the subdigraph. The FilterEdges is
1.666 - /// conform to the \ref concepts::Graph "Graph concept".
1.667 + /// FilterEdges adaptor can be used for hiding edges in a graph.
1.668 + /// A \c bool edge map must be specified, which defines the filter for
1.669 + /// the edges. Only the edges with \c true filter value are shown in the
1.670 + /// subgraph. This adaptor conforms to the \ref concepts::Graph
1.671 + /// "Graph" concept.
1.672 ///
1.673 - /// \tparam _Graph It must be conform to the \ref concepts::Graph
1.674 - /// "Graph concept". The type can be specified to be const.
1.675 - /// \tparam _EdgeFilterMap A bool valued edge map of the the adapted
1.676 - /// graph.
1.677 - template<typename _Graph, typename _EdgeFilterMap>
1.678 + /// The adapted graph can also be modified through this adaptor
1.679 + /// by adding or removing nodes or edges, unless the \c _Graph template
1.680 + /// parameter is set to be \c const.
1.681 + ///
1.682 + /// \tparam _Graph The type of the adapted graph.
1.683 + /// It must conform to the \ref concepts::Graph "Graph" concept.
1.684 + /// It can also be specified to be \c const.
1.685 + /// \tparam _EdgeFilterMap A \c bool (or convertible) edge map of the
1.686 + /// adapted graph. The default map type is
1.687 + /// \ref concepts::Graph::EdgeMap "_Graph::EdgeMap<bool>".
1.688 + ///
1.689 + /// \note The \c Node, \c Edge and \c Arc types of this adaptor and the
1.690 + /// adapted graph are convertible to each other.
1.691 +#ifdef DOXYGEN
1.692 + template<typename _Graph,
1.693 + typename _EdgeFilterMap>
1.694 +#else
1.695 + template<typename _Graph,
1.696 + typename _EdgeFilterMap = typename _Graph::template EdgeMap<bool> >
1.697 +#endif
1.698 class FilterEdges :
1.699 public SubGraph<_Graph, ConstMap<typename _Graph::Node,bool>,
1.700 _EdgeFilterMap, false> {
1.701 @@ -1628,40 +1745,42 @@
1.702
1.703 /// \brief Constructor
1.704 ///
1.705 - /// Creates a FilterEdges adaptor for the given graph with
1.706 - /// given edge map filters.
1.707 - FilterEdges(Graph& _graph, EdgeFilterMap& edge_filter_map) :
1.708 + /// Creates a subgraph for the given graph with the given edge
1.709 + /// filter map.
1.710 + FilterEdges(Graph& graph, EdgeFilterMap& edge_filter_map) :
1.711 Parent(), const_true_map(true) {
1.712 - Parent::setGraph(_graph);
1.713 + Parent::setGraph(graph);
1.714 Parent::setNodeFilterMap(const_true_map);
1.715 Parent::setEdgeFilterMap(edge_filter_map);
1.716 }
1.717
1.718 - /// \brief Hides the edge of the graph
1.719 + /// \brief Hides the given edge
1.720 ///
1.721 - /// This function hides \c e in the graph, i.e. the iteration
1.722 - /// jumps over it. This is done by simply setting the value of \c e
1.723 - /// to be false in the corresponding edge-map.
1.724 + /// This function hides the given edge in the subgraph,
1.725 + /// i.e. the iteration jumps over it.
1.726 + /// It is done by simply setting the assigned value of \c e
1.727 + /// to be \c false in the edge filter map.
1.728 void hide(const Edge& e) const { Parent::hide(e); }
1.729
1.730 - /// \brief Unhides the edge of the graph
1.731 + /// \brief Shows the given edge
1.732 ///
1.733 - /// The value of \c e is set to be true in the edge-map which stores
1.734 - /// hide information. If \c e was hidden previuosly, then it is shown
1.735 - /// again
1.736 + /// This function shows the given edge in the subgraph.
1.737 + /// It is done by simply setting the assigned value of \c e
1.738 + /// to be \c true in the edge filter map.
1.739 void unHide(const Edge& e) const { Parent::unHide(e); }
1.740
1.741 - /// \brief Returns true if \c e is hidden.
1.742 + /// \brief Returns \c true if the given edge is hidden.
1.743 ///
1.744 - /// Returns true if \c e is hidden.
1.745 - ///
1.746 + /// This function returns \c true if the given edge is hidden.
1.747 bool hidden(const Edge& e) const { return Parent::hidden(e); }
1.748
1.749 };
1.750
1.751 - /// \brief Just gives back a FilterEdges adaptor
1.752 + /// \brief Returns a read-only FilterEdges adaptor
1.753 ///
1.754 - /// Just gives back a FilterEdges adaptor
1.755 + /// This function just returns a read-only \ref FilterEdges adaptor.
1.756 + /// \ingroup graph_adaptors
1.757 + /// \relates FilterEdges
1.758 template<typename Graph, typename EdgeFilterMap>
1.759 FilterEdges<const Graph, EdgeFilterMap>
1.760 filterEdges(const Graph& graph, EdgeFilterMap& efm) {
1.761 @@ -1674,6 +1793,7 @@
1.762 return FilterEdges<const Graph, const EdgeFilterMap>(graph, efm);
1.763 }
1.764
1.765 +
1.766 template <typename _Digraph>
1.767 class UndirectorBase {
1.768 public:
1.769 @@ -1713,8 +1833,6 @@
1.770 }
1.771 };
1.772
1.773 -
1.774 -
1.775 void first(Node& n) const {
1.776 _digraph->first(n);
1.777 }
1.778 @@ -2068,16 +2186,27 @@
1.779
1.780 /// \ingroup graph_adaptors
1.781 ///
1.782 - /// \brief Undirect the graph
1.783 + /// \brief Adaptor class for viewing a digraph as an undirected graph.
1.784 ///
1.785 - /// This adaptor makes an undirected graph from a directed
1.786 - /// graph. All arcs of the underlying digraph will be showed in the
1.787 - /// adaptor as an edge. The Orienter adaptor is conform to the \ref
1.788 - /// concepts::Graph "Graph concept".
1.789 + /// Undirector adaptor can be used for viewing a digraph as an undirected
1.790 + /// graph. All arcs of the underlying digraph are showed in the
1.791 + /// adaptor as an edge (and also as a pair of arcs, of course).
1.792 + /// This adaptor conforms to the \ref concepts::Graph "Graph" concept.
1.793 ///
1.794 - /// \tparam _Digraph It must be conform to the \ref
1.795 - /// concepts::Digraph "Digraph concept". The type can be specified
1.796 - /// to const.
1.797 + /// The adapted digraph can also be modified through this adaptor
1.798 + /// by adding or removing nodes or edges, unless the \c _Digraph template
1.799 + /// parameter is set to be \c const.
1.800 + ///
1.801 + /// \tparam _Digraph The type of the adapted digraph.
1.802 + /// It must conform to the \ref concepts::Digraph "Digraph" concept.
1.803 + /// It can also be specified to be \c const.
1.804 + ///
1.805 + /// \note The \c Node type of this adaptor and the adapted digraph are
1.806 + /// convertible to each other, moreover the \c Edge type of the adaptor
1.807 + /// and the \c Arc type of the adapted digraph are also convertible to
1.808 + /// each other.
1.809 + /// (Thus the \c Arc type of the adaptor is convertible to the \c Arc type
1.810 + /// of the adapted digraph.)
1.811 template<typename _Digraph>
1.812 class Undirector
1.813 : public GraphAdaptorExtender<UndirectorBase<_Digraph> > {
1.814 @@ -2090,15 +2219,17 @@
1.815
1.816 /// \brief Constructor
1.817 ///
1.818 - /// Creates a undirected graph from the given digraph
1.819 + /// Creates an undirected graph from the given digraph.
1.820 Undirector(_Digraph& digraph) {
1.821 setDigraph(digraph);
1.822 }
1.823
1.824 - /// \brief ArcMap combined from two original ArcMap
1.825 + /// \brief Arc map combined from two original arc maps
1.826 ///
1.827 - /// This class adapts two original digraph ArcMap to
1.828 - /// get an arc map on the undirected graph.
1.829 + /// This map adaptor class adapts two arc maps of the underlying
1.830 + /// digraph to get an arc map of the undirected graph.
1.831 + /// Its value type is inherited from the first arc map type
1.832 + /// (\c %ForwardMap).
1.833 template <typename _ForwardMap, typename _BackwardMap>
1.834 class CombinedArcMap {
1.835 public:
1.836 @@ -2108,24 +2239,21 @@
1.837
1.838 typedef typename MapTraits<ForwardMap>::ReferenceMapTag ReferenceMapTag;
1.839
1.840 + /// The key type of the map
1.841 + typedef typename Parent::Arc Key;
1.842 + /// The value type of the map
1.843 typedef typename ForwardMap::Value Value;
1.844 - typedef typename Parent::Arc Key;
1.845
1.846 typedef typename MapTraits<ForwardMap>::ReturnValue ReturnValue;
1.847 typedef typename MapTraits<ForwardMap>::ConstReturnValue ConstReturnValue;
1.848 typedef typename MapTraits<ForwardMap>::ReturnValue Reference;
1.849 typedef typename MapTraits<ForwardMap>::ConstReturnValue ConstReference;
1.850
1.851 - /// \brief Constructor
1.852 - ///
1.853 /// Constructor
1.854 CombinedArcMap(ForwardMap& forward, BackwardMap& backward)
1.855 : _forward(&forward), _backward(&backward) {}
1.856
1.857 -
1.858 - /// \brief Sets the value associated with a key.
1.859 - ///
1.860 - /// Sets the value associated with a key.
1.861 + /// Sets the value associated with the given key.
1.862 void set(const Key& e, const Value& a) {
1.863 if (Parent::direction(e)) {
1.864 _forward->set(e, a);
1.865 @@ -2134,9 +2262,7 @@
1.866 }
1.867 }
1.868
1.869 - /// \brief Returns the value associated with a key.
1.870 - ///
1.871 - /// Returns the value associated with a key.
1.872 + /// Returns the value associated with the given key.
1.873 ConstReturnValue operator[](const Key& e) const {
1.874 if (Parent::direction(e)) {
1.875 return (*_forward)[e];
1.876 @@ -2145,9 +2271,7 @@
1.877 }
1.878 }
1.879
1.880 - /// \brief Returns the value associated with a key.
1.881 - ///
1.882 - /// Returns the value associated with a key.
1.883 + /// Returns a reference to the value associated with the given key.
1.884 ReturnValue operator[](const Key& e) {
1.885 if (Parent::direction(e)) {
1.886 return (*_forward)[e];
1.887 @@ -2163,9 +2287,9 @@
1.888
1.889 };
1.890
1.891 - /// \brief Just gives back a combined arc map
1.892 + /// \brief Returns a combined arc map
1.893 ///
1.894 - /// Just gives back a combined arc map
1.895 + /// This function just returns a combined arc map.
1.896 template <typename ForwardMap, typename BackwardMap>
1.897 static CombinedArcMap<ForwardMap, BackwardMap>
1.898 combinedArcMap(ForwardMap& forward, BackwardMap& backward) {
1.899 @@ -2195,15 +2319,18 @@
1.900
1.901 };
1.902
1.903 - /// \brief Just gives back an undirected view of the given digraph
1.904 + /// \brief Returns a read-only Undirector adaptor
1.905 ///
1.906 - /// Just gives back an undirected view of the given digraph
1.907 + /// This function just returns a read-only \ref Undirector adaptor.
1.908 + /// \ingroup graph_adaptors
1.909 + /// \relates Undirector
1.910 template<typename Digraph>
1.911 Undirector<const Digraph>
1.912 undirector(const Digraph& digraph) {
1.913 return Undirector<const Digraph>(digraph);
1.914 }
1.915
1.916 +
1.917 template <typename _Graph, typename _DirectionMap>
1.918 class OrienterBase {
1.919 public:
1.920 @@ -2364,52 +2491,76 @@
1.921
1.922 /// \ingroup graph_adaptors
1.923 ///
1.924 - /// \brief Orients the edges of the graph to get a digraph
1.925 + /// \brief Adaptor class for orienting the edges of a graph to get a digraph
1.926 ///
1.927 - /// This adaptor orients each edge in the undirected graph. The
1.928 - /// direction of the arcs stored in an edge node map. The arcs can
1.929 - /// be easily reverted by the \c reverseArc() member function in the
1.930 - /// adaptor. The Orienter adaptor is conform to the \ref
1.931 - /// concepts::Digraph "Digraph concept".
1.932 + /// Orienter adaptor can be used for orienting the edges of a graph to
1.933 + /// get a digraph. A \c bool edge map of the underlying graph must be
1.934 + /// specified, which define the direction of the arcs in the adaptor.
1.935 + /// The arcs can be easily reversed by the \c reverseArc() member function
1.936 + /// of the adaptor.
1.937 + /// This class conforms to the \ref concepts::Digraph "Digraph" concept.
1.938 ///
1.939 - /// \tparam _Graph It must be conform to the \ref concepts::Graph
1.940 - /// "Graph concept". The type can be specified to be const.
1.941 - /// \tparam _DirectionMap A bool valued edge map of the the adapted
1.942 - /// graph.
1.943 + /// The adapted graph can also be modified through this adaptor
1.944 + /// by adding or removing nodes or arcs, unless the \c _Graph template
1.945 + /// parameter is set to be \c const.
1.946 ///
1.947 - /// \sa orienter
1.948 + /// \tparam _Graph The type of the adapted graph.
1.949 + /// It must conform to the \ref concepts::Graph "Graph" concept.
1.950 + /// It can also be specified to be \c const.
1.951 + /// \tparam _DirectionMap A \c bool (or convertible) edge map of the
1.952 + /// adapted graph. The default map type is
1.953 + /// \ref concepts::Graph::EdgeMap "_Graph::EdgeMap<bool>".
1.954 + ///
1.955 + /// \note The \c Node type of this adaptor and the adapted graph are
1.956 + /// convertible to each other, moreover the \c Arc type of the adaptor
1.957 + /// and the \c Edge type of the adapted graph are also convertible to
1.958 + /// each other.
1.959 +#ifdef DOXYGEN
1.960 template<typename _Graph,
1.961 - typename DirectionMap = typename _Graph::template EdgeMap<bool> >
1.962 + typename _DirectionMap>
1.963 +#else
1.964 + template<typename _Graph,
1.965 + typename _DirectionMap = typename _Graph::template EdgeMap<bool> >
1.966 +#endif
1.967 class Orienter :
1.968 - public DigraphAdaptorExtender<OrienterBase<_Graph, DirectionMap> > {
1.969 + public DigraphAdaptorExtender<OrienterBase<_Graph, _DirectionMap> > {
1.970 public:
1.971 +
1.972 + /// The type of the adapted graph.
1.973 typedef _Graph Graph;
1.974 + /// The type of the direction edge map.
1.975 + typedef _DirectionMap DirectionMap;
1.976 +
1.977 typedef DigraphAdaptorExtender<
1.978 - OrienterBase<_Graph, DirectionMap> > Parent;
1.979 + OrienterBase<_Graph, _DirectionMap> > Parent;
1.980 typedef typename Parent::Arc Arc;
1.981 protected:
1.982 Orienter() { }
1.983 public:
1.984
1.985 - /// \brief Constructor of the adaptor
1.986 + /// \brief Constructor
1.987 ///
1.988 - /// Constructor of the adaptor
1.989 + /// Constructor of the adaptor.
1.990 Orienter(Graph& graph, DirectionMap& direction) {
1.991 setGraph(graph);
1.992 setDirectionMap(direction);
1.993 }
1.994
1.995 - /// \brief Reverse arc
1.996 + /// \brief Reverses the given arc
1.997 ///
1.998 - /// It reverse the given arc. It simply negate the direction in the map.
1.999 + /// This function reverses the given arc.
1.1000 + /// It is done by simply negate the assigned value of \c a
1.1001 + /// in the direction map.
1.1002 void reverseArc(const Arc& a) {
1.1003 Parent::reverseArc(a);
1.1004 }
1.1005 };
1.1006
1.1007 - /// \brief Just gives back a Orienter
1.1008 + /// \brief Returns a read-only Orienter adaptor
1.1009 ///
1.1010 - /// Just gives back a Orienter
1.1011 + /// This function just returns a read-only \ref Orienter adaptor.
1.1012 + /// \ingroup graph_adaptors
1.1013 + /// \relates Orienter
1.1014 template<typename Graph, typename DirectionMap>
1.1015 Orienter<const Graph, DirectionMap>
1.1016 orienter(const Graph& graph, DirectionMap& dm) {
1.1017 @@ -2491,31 +2642,51 @@
1.1018
1.1019 /// \ingroup graph_adaptors
1.1020 ///
1.1021 - /// \brief An adaptor for composing the residual graph for directed
1.1022 + /// \brief Adaptor class for composing the residual digraph for directed
1.1023 /// flow and circulation problems.
1.1024 ///
1.1025 - /// An adaptor for composing the residual graph for directed flow and
1.1026 - /// circulation problems. Let \f$ G=(V, A) \f$ be a directed graph
1.1027 - /// and let \f$ F \f$ be a number type. Let moreover \f$ f,c:A\to F \f$,
1.1028 - /// be functions on the arc-set.
1.1029 + /// Residual can be used for composing the \e residual digraph for directed
1.1030 + /// flow and circulation problems. Let \f$ G=(V, A) \f$ be a directed graph
1.1031 + /// and let \f$ F \f$ be a number type. Let \f$ flow, cap: A\to F \f$ be
1.1032 + /// functions on the arcs.
1.1033 + /// This adaptor implements a digraph structure with node set \f$ V \f$
1.1034 + /// and arc set \f$ A_{forward}\cup A_{backward} \f$,
1.1035 + /// where \f$ A_{forward}=\{uv : uv\in A, flow(uv)<cap(uv)\} \f$ and
1.1036 + /// \f$ A_{backward}=\{vu : uv\in A, flow(uv)>0\} \f$, i.e. the so
1.1037 + /// called residual digraph.
1.1038 + /// When the union \f$ A_{forward}\cup A_{backward} \f$ is taken,
1.1039 + /// multiplicities are counted, i.e. the adaptor has exactly
1.1040 + /// \f$ |A_{forward}| + |A_{backward}|\f$ arcs (it may have parallel
1.1041 + /// arcs).
1.1042 + /// This class conforms to the \ref concepts::Digraph "Digraph" concept.
1.1043 ///
1.1044 - /// Then Residual implements the digraph structure with
1.1045 - /// node-set \f$ V \f$ and arc-set \f$ A_{forward}\cup A_{backward} \f$,
1.1046 - /// where \f$ A_{forward}=\{uv : uv\in A, f(uv)<c(uv)\} \f$ and
1.1047 - /// \f$ A_{backward}=\{vu : uv\in A, f(uv)>0\} \f$, i.e. the so
1.1048 - /// called residual graph. When we take the union
1.1049 - /// \f$ A_{forward}\cup A_{backward} \f$, multiplicities are counted,
1.1050 - /// i.e. if an arc is in both \f$ A_{forward} \f$ and
1.1051 - /// \f$ A_{backward} \f$, then in the adaptor it appears in both
1.1052 - /// orientation.
1.1053 + /// \tparam _Digraph The type of the adapted digraph.
1.1054 + /// It must conform to the \ref concepts::Digraph "Digraph" concept.
1.1055 + /// It is implicitly \c const.
1.1056 + /// \tparam _CapacityMap An arc map of some numerical type, which defines
1.1057 + /// the capacities in the flow problem. It is implicitly \c const.
1.1058 + /// The default map type is
1.1059 + /// \ref concepts::Digraph::ArcMap "_Digraph::ArcMap<int>".
1.1060 + /// \tparam _FlowMap An arc map of some numerical type, which defines
1.1061 + /// the flow values in the flow problem.
1.1062 + /// The default map type is \c _CapacityMap.
1.1063 + /// \tparam _Tolerance Tolerance type for handling inexact computation.
1.1064 + /// The default tolerance type depends on the value type of the
1.1065 + /// capacity map.
1.1066 ///
1.1067 - /// \tparam _Digraph It must be conform to the \ref concepts::Digraph
1.1068 - /// "Digraph concept". The type is implicitly const.
1.1069 - /// \tparam _CapacityMap An arc map of some numeric type, it defines
1.1070 - /// the capacities in the flow problem. The map is implicitly const.
1.1071 - /// \tparam _FlowMap An arc map of some numeric type, it defines
1.1072 - /// the capacities in the flow problem.
1.1073 - /// \tparam _Tolerance Handler for inexact computation.
1.1074 + /// \note This adaptor is implemented using Undirector and FilterArcs
1.1075 + /// adaptors.
1.1076 + ///
1.1077 + /// \note The \c Node type of this adaptor and the adapted digraph are
1.1078 + /// convertible to each other, moreover the \c Arc type of the adaptor
1.1079 + /// is convertible to the \c Arc type of the adapted digraph.
1.1080 +#ifdef DOXYGEN
1.1081 + template<typename _Digraph,
1.1082 + typename _CapacityMap,
1.1083 + typename _FlowMap,
1.1084 + typename _Tolerance>
1.1085 + class Residual
1.1086 +#else
1.1087 template<typename _Digraph,
1.1088 typename _CapacityMap = typename _Digraph::template ArcMap<int>,
1.1089 typename _FlowMap = _CapacityMap,
1.1090 @@ -2528,11 +2699,15 @@
1.1091 _FlowMap, _Tolerance>,
1.1092 _adaptor_bits::ResBackwardFilter<const _Digraph, _CapacityMap,
1.1093 _FlowMap, _Tolerance> > >
1.1094 +#endif
1.1095 {
1.1096 public:
1.1097
1.1098 + /// The type of the underlying digraph.
1.1099 typedef _Digraph Digraph;
1.1100 + /// The type of the capacity map.
1.1101 typedef _CapacityMap CapacityMap;
1.1102 + /// The type of the flow map.
1.1103 typedef _FlowMap FlowMap;
1.1104 typedef _Tolerance Tolerance;
1.1105
1.1106 @@ -2564,10 +2739,10 @@
1.1107
1.1108 public:
1.1109
1.1110 - /// \brief Constructor of the residual digraph.
1.1111 + /// \brief Constructor
1.1112 ///
1.1113 - /// Constructor of the residual graph. The parameters are the digraph,
1.1114 - /// the flow map, the capacity map and a tolerance object.
1.1115 + /// Constructor of the residual digraph adaptor. The parameters are the
1.1116 + /// digraph, the capacity map, the flow map, and a tolerance object.
1.1117 Residual(const Digraph& digraph, const CapacityMap& capacity,
1.1118 FlowMap& flow, const Tolerance& tolerance = Tolerance())
1.1119 : Parent(), _capacity(&capacity), _flow(&flow), _graph(digraph),
1.1120 @@ -2581,9 +2756,9 @@
1.1121
1.1122 typedef typename Parent::Arc Arc;
1.1123
1.1124 - /// \brief Gives back the residual capacity of the arc.
1.1125 + /// \brief Returns the residual capacity of the given arc.
1.1126 ///
1.1127 - /// Gives back the residual capacity of the arc.
1.1128 + /// Returns the residual capacity of the given arc.
1.1129 Value residualCapacity(const Arc& a) const {
1.1130 if (Undirected::direction(a)) {
1.1131 return (*_capacity)[a] - (*_flow)[a];
1.1132 @@ -2592,11 +2767,11 @@
1.1133 }
1.1134 }
1.1135
1.1136 - /// \brief Augment on the given arc in the residual graph.
1.1137 + /// \brief Augment on the given arc in the residual digraph.
1.1138 ///
1.1139 - /// Augment on the given arc in the residual graph. It increase
1.1140 - /// or decrease the flow on the original arc depend on the direction
1.1141 - /// of the residual arc.
1.1142 + /// Augment on the given arc in the residual digraph. It increases
1.1143 + /// or decreases the flow value on the original arc according to the
1.1144 + /// direction of the residual arc.
1.1145 void augment(const Arc& a, const Value& v) const {
1.1146 if (Undirected::direction(a)) {
1.1147 _flow->set(a, (*_flow)[a] + v);
1.1148 @@ -2605,51 +2780,56 @@
1.1149 }
1.1150 }
1.1151
1.1152 - /// \brief Returns the direction of the arc.
1.1153 + /// \brief Returns \c true if the given residual arc is a forward arc.
1.1154 ///
1.1155 - /// Returns true when the arc is same oriented as the original arc.
1.1156 + /// Returns \c true if the given residual arc has the same orientation
1.1157 + /// as the original arc, i.e. it is a so called forward arc.
1.1158 static bool forward(const Arc& a) {
1.1159 return Undirected::direction(a);
1.1160 }
1.1161
1.1162 - /// \brief Returns the direction of the arc.
1.1163 + /// \brief Returns \c true if the given residual arc is a backward arc.
1.1164 ///
1.1165 - /// Returns true when the arc is opposite oriented as the original arc.
1.1166 + /// Returns \c true if the given residual arc has the opposite orientation
1.1167 + /// than the original arc, i.e. it is a so called backward arc.
1.1168 static bool backward(const Arc& a) {
1.1169 return !Undirected::direction(a);
1.1170 }
1.1171
1.1172 - /// \brief Gives back the forward oriented residual arc.
1.1173 + /// \brief Returns the forward oriented residual arc.
1.1174 ///
1.1175 - /// Gives back the forward oriented residual arc.
1.1176 + /// Returns the forward oriented residual arc related to the given
1.1177 + /// arc of the underlying digraph.
1.1178 static Arc forward(const typename Digraph::Arc& a) {
1.1179 return Undirected::direct(a, true);
1.1180 }
1.1181
1.1182 - /// \brief Gives back the backward oriented residual arc.
1.1183 + /// \brief Returns the backward oriented residual arc.
1.1184 ///
1.1185 - /// Gives back the backward oriented residual arc.
1.1186 + /// Returns the backward oriented residual arc related to the given
1.1187 + /// arc of the underlying digraph.
1.1188 static Arc backward(const typename Digraph::Arc& a) {
1.1189 return Undirected::direct(a, false);
1.1190 }
1.1191
1.1192 /// \brief Residual capacity map.
1.1193 ///
1.1194 - /// In generic residual graph the residual capacity can be obtained
1.1195 - /// as a map.
1.1196 + /// This map adaptor class can be used for obtaining the residual
1.1197 + /// capacities as an arc map of the residual digraph.
1.1198 + /// Its value type is inherited from the capacity map.
1.1199 class ResidualCapacity {
1.1200 protected:
1.1201 const Adaptor* _adaptor;
1.1202 public:
1.1203 - /// The Key type
1.1204 + /// The key type of the map
1.1205 typedef Arc Key;
1.1206 - /// The Value type
1.1207 + /// The value type of the map
1.1208 typedef typename _CapacityMap::Value Value;
1.1209
1.1210 /// Constructor
1.1211 ResidualCapacity(const Adaptor& adaptor) : _adaptor(&adaptor) {}
1.1212
1.1213 - /// \e
1.1214 + /// Returns the value associated with the given residual arc
1.1215 Value operator[](const Arc& a) const {
1.1216 return _adaptor->residualCapacity(a);
1.1217 }
1.1218 @@ -3108,25 +3288,31 @@
1.1219
1.1220 /// \ingroup graph_adaptors
1.1221 ///
1.1222 - /// \brief Split the nodes of a directed graph
1.1223 + /// \brief Adaptor class for splitting the nodes of a digraph.
1.1224 ///
1.1225 - /// The SplitNodes adaptor splits each node into an in-node and an
1.1226 - /// out-node. Formaly, the adaptor replaces each \f$ u \f$ node in
1.1227 - /// the digraph with two nodes(namely node \f$ u_{in} \f$ and node
1.1228 - /// \f$ u_{out} \f$). If there is a \f$ (v, u) \f$ arc in the
1.1229 - /// original digraph the new target of the arc will be \f$ u_{in} \f$
1.1230 - /// and similarly the source of the original \f$ (u, v) \f$ arc
1.1231 - /// will be \f$ u_{out} \f$. The adaptor will add for each node in
1.1232 - /// the original digraph an additional arc which connects
1.1233 - /// \f$ (u_{in}, u_{out}) \f$.
1.1234 + /// SplitNodes adaptor can be used for splitting each node into an
1.1235 + /// \e in-node and an \e out-node in a digraph. Formaly, the adaptor
1.1236 + /// replaces each node \f$ u \f$ in the digraph with two nodes,
1.1237 + /// namely node \f$ u_{in} \f$ and node \f$ u_{out} \f$.
1.1238 + /// If there is a \f$ (v, u) \f$ arc in the original digraph, then the
1.1239 + /// new target of the arc will be \f$ u_{in} \f$ and similarly the
1.1240 + /// source of each original \f$ (u, v) \f$ arc will be \f$ u_{out} \f$.
1.1241 + /// The adaptor adds an additional \e bind \e arc from \f$ u_{in} \f$
1.1242 + /// to \f$ u_{out} \f$ for each node \f$ u \f$ of the original digraph.
1.1243 ///
1.1244 - /// The aim of this class is to run algorithm with node costs if the
1.1245 - /// algorithm can use directly just arc costs. In this case we should use
1.1246 - /// a \c SplitNodes and set the node cost of the graph to the
1.1247 - /// bind arc in the adapted graph.
1.1248 + /// The aim of this class is running an algorithm with respect to node
1.1249 + /// costs or capacities if the algorithm considers only arc costs or
1.1250 + /// capacities directly.
1.1251 + /// In this case you can use \c SplitNodes adaptor, and set the node
1.1252 + /// costs/capacities of the original digraph to the \e bind \e arcs
1.1253 + /// in the adaptor.
1.1254 ///
1.1255 - /// \tparam _Digraph It must be conform to the \ref concepts::Digraph
1.1256 - /// "Digraph concept". The type can be specified to be const.
1.1257 + /// \tparam _Digraph The type of the adapted digraph.
1.1258 + /// It must conform to the \ref concepts::Digraph "Digraph" concept.
1.1259 + /// It is implicitly \c const.
1.1260 + ///
1.1261 + /// \note The \c Node type of this adaptor is converible to the \c Node
1.1262 + /// type of the adapted digraph.
1.1263 template <typename _Digraph>
1.1264 class SplitNodes
1.1265 : public DigraphAdaptorExtender<SplitNodesBase<const _Digraph> > {
1.1266 @@ -3140,78 +3326,88 @@
1.1267 typedef typename Parent::Node Node;
1.1268 typedef typename Parent::Arc Arc;
1.1269
1.1270 - /// \brief Constructor of the adaptor.
1.1271 + /// \brief Constructor
1.1272 ///
1.1273 /// Constructor of the adaptor.
1.1274 SplitNodes(const Digraph& g) {
1.1275 Parent::setDigraph(g);
1.1276 }
1.1277
1.1278 - /// \brief Returns true when the node is in-node.
1.1279 + /// \brief Returns \c true if the given node is an in-node.
1.1280 ///
1.1281 - /// Returns true when the node is in-node.
1.1282 + /// Returns \c true if the given node is an in-node.
1.1283 static bool inNode(const Node& n) {
1.1284 return Parent::inNode(n);
1.1285 }
1.1286
1.1287 - /// \brief Returns true when the node is out-node.
1.1288 + /// \brief Returns \c true if the given node is an out-node.
1.1289 ///
1.1290 - /// Returns true when the node is out-node.
1.1291 + /// Returns \c true if the given node is an out-node.
1.1292 static bool outNode(const Node& n) {
1.1293 return Parent::outNode(n);
1.1294 }
1.1295
1.1296 - /// \brief Returns true when the arc is arc in the original digraph.
1.1297 + /// \brief Returns \c true if the given arc is an original arc.
1.1298 ///
1.1299 - /// Returns true when the arc is arc in the original digraph.
1.1300 + /// Returns \c true if the given arc is one of the arcs in the
1.1301 + /// original digraph.
1.1302 static bool origArc(const Arc& a) {
1.1303 return Parent::origArc(a);
1.1304 }
1.1305
1.1306 - /// \brief Returns true when the arc binds an in-node and an out-node.
1.1307 + /// \brief Returns \c true if the given arc is a bind arc.
1.1308 ///
1.1309 - /// Returns true when the arc binds an in-node and an out-node.
1.1310 + /// Returns \c true if the given arc is a bind arc, i.e. it connects
1.1311 + /// an in-node and an out-node.
1.1312 static bool bindArc(const Arc& a) {
1.1313 return Parent::bindArc(a);
1.1314 }
1.1315
1.1316 - /// \brief Gives back the in-node created from the \c node.
1.1317 + /// \brief Returns the in-node created from the given original node.
1.1318 ///
1.1319 - /// Gives back the in-node created from the \c node.
1.1320 + /// Returns the in-node created from the given original node.
1.1321 static Node inNode(const DigraphNode& n) {
1.1322 return Parent::inNode(n);
1.1323 }
1.1324
1.1325 - /// \brief Gives back the out-node created from the \c node.
1.1326 + /// \brief Returns the out-node created from the given original node.
1.1327 ///
1.1328 - /// Gives back the out-node created from the \c node.
1.1329 + /// Returns the out-node created from the given original node.
1.1330 static Node outNode(const DigraphNode& n) {
1.1331 return Parent::outNode(n);
1.1332 }
1.1333
1.1334 - /// \brief Gives back the arc binds the two part of the node.
1.1335 + /// \brief Returns the bind arc that corresponds to the given
1.1336 + /// original node.
1.1337 ///
1.1338 - /// Gives back the arc binds the two part of the node.
1.1339 + /// Returns the bind arc in the adaptor that corresponds to the given
1.1340 + /// original node, i.e. the arc connecting the in-node and out-node
1.1341 + /// of \c n.
1.1342 static Arc arc(const DigraphNode& n) {
1.1343 return Parent::arc(n);
1.1344 }
1.1345
1.1346 - /// \brief Gives back the arc of the original arc.
1.1347 + /// \brief Returns the arc that corresponds to the given original arc.
1.1348 ///
1.1349 - /// Gives back the arc of the original arc.
1.1350 + /// Returns the arc in the adaptor that corresponds to the given
1.1351 + /// original arc.
1.1352 static Arc arc(const DigraphArc& a) {
1.1353 return Parent::arc(a);
1.1354 }
1.1355
1.1356 - /// \brief NodeMap combined from two original NodeMap
1.1357 + /// \brief Node map combined from two original node maps
1.1358 ///
1.1359 - /// This class adapt two of the original digraph NodeMap to
1.1360 - /// get a node map on the adapted digraph.
1.1361 + /// This map adaptor class adapts two node maps of the original digraph
1.1362 + /// to get a node map of the split digraph.
1.1363 + /// Its value type is inherited from the first node map type
1.1364 + /// (\c InNodeMap).
1.1365 template <typename InNodeMap, typename OutNodeMap>
1.1366 class CombinedNodeMap {
1.1367 public:
1.1368
1.1369 + /// The key type of the map
1.1370 typedef Node Key;
1.1371 + /// The value type of the map
1.1372 typedef typename InNodeMap::Value Value;
1.1373
1.1374 typedef typename MapTraits<InNodeMap>::ReferenceMapTag ReferenceMapTag;
1.1375 @@ -3220,15 +3416,20 @@
1.1376 typedef typename MapTraits<InNodeMap>::ReturnValue Reference;
1.1377 typedef typename MapTraits<InNodeMap>::ConstReturnValue ConstReference;
1.1378
1.1379 - /// \brief Constructor
1.1380 - ///
1.1381 - /// Constructor.
1.1382 + /// Constructor
1.1383 CombinedNodeMap(InNodeMap& in_map, OutNodeMap& out_map)
1.1384 : _in_map(in_map), _out_map(out_map) {}
1.1385
1.1386 - /// \brief The subscript operator.
1.1387 - ///
1.1388 - /// The subscript operator.
1.1389 + /// Returns the value associated with the given key.
1.1390 + Value operator[](const Key& key) const {
1.1391 + if (Parent::inNode(key)) {
1.1392 + return _in_map[key];
1.1393 + } else {
1.1394 + return _out_map[key];
1.1395 + }
1.1396 + }
1.1397 +
1.1398 + /// Returns a reference to the value associated with the given key.
1.1399 Value& operator[](const Key& key) {
1.1400 if (Parent::inNode(key)) {
1.1401 return _in_map[key];
1.1402 @@ -3237,20 +3438,7 @@
1.1403 }
1.1404 }
1.1405
1.1406 - /// \brief The const subscript operator.
1.1407 - ///
1.1408 - /// The const subscript operator.
1.1409 - Value operator[](const Key& key) const {
1.1410 - if (Parent::inNode(key)) {
1.1411 - return _in_map[key];
1.1412 - } else {
1.1413 - return _out_map[key];
1.1414 - }
1.1415 - }
1.1416 -
1.1417 - /// \brief The setter function of the map.
1.1418 - ///
1.1419 - /// The setter function of the map.
1.1420 + /// Sets the value associated with the given key.
1.1421 void set(const Key& key, const Value& value) {
1.1422 if (Parent::inNode(key)) {
1.1423 _in_map.set(key, value);
1.1424 @@ -3267,9 +3455,9 @@
1.1425 };
1.1426
1.1427
1.1428 - /// \brief Just gives back a combined node map
1.1429 + /// \brief Returns a combined node map
1.1430 ///
1.1431 - /// Just gives back a combined node map
1.1432 + /// This function just returns a combined node map.
1.1433 template <typename InNodeMap, typename OutNodeMap>
1.1434 static CombinedNodeMap<InNodeMap, OutNodeMap>
1.1435 combinedNodeMap(InNodeMap& in_map, OutNodeMap& out_map) {
1.1436 @@ -3295,15 +3483,20 @@
1.1437 const OutNodeMap>(in_map, out_map);
1.1438 }
1.1439
1.1440 - /// \brief ArcMap combined from an original ArcMap and a NodeMap
1.1441 + /// \brief Arc map combined from an arc map and a node map of the
1.1442 + /// original digraph.
1.1443 ///
1.1444 - /// This class adapt an original ArcMap and a NodeMap to get an
1.1445 - /// arc map on the adapted digraph
1.1446 + /// This map adaptor class adapts an arc map and a node map of the
1.1447 + /// original digraph to get an arc map of the split digraph.
1.1448 + /// Its value type is inherited from the original arc map type
1.1449 + /// (\c DigraphArcMap).
1.1450 template <typename DigraphArcMap, typename DigraphNodeMap>
1.1451 class CombinedArcMap {
1.1452 public:
1.1453
1.1454 + /// The key type of the map
1.1455 typedef Arc Key;
1.1456 + /// The value type of the map
1.1457 typedef typename DigraphArcMap::Value Value;
1.1458
1.1459 typedef typename MapTraits<DigraphArcMap>::ReferenceMapTag
1.1460 @@ -3317,15 +3510,29 @@
1.1461 typedef typename MapTraits<DigraphArcMap>::ConstReturnValue
1.1462 ConstReference;
1.1463
1.1464 - /// \brief Constructor
1.1465 - ///
1.1466 - /// Constructor.
1.1467 + /// Constructor
1.1468 CombinedArcMap(DigraphArcMap& arc_map, DigraphNodeMap& node_map)
1.1469 : _arc_map(arc_map), _node_map(node_map) {}
1.1470
1.1471 - /// \brief The subscript operator.
1.1472 - ///
1.1473 - /// The subscript operator.
1.1474 + /// Returns the value associated with the given key.
1.1475 + Value operator[](const Key& arc) const {
1.1476 + if (Parent::origArc(arc)) {
1.1477 + return _arc_map[arc];
1.1478 + } else {
1.1479 + return _node_map[arc];
1.1480 + }
1.1481 + }
1.1482 +
1.1483 + /// Returns a reference to the value associated with the given key.
1.1484 + Value& operator[](const Key& arc) {
1.1485 + if (Parent::origArc(arc)) {
1.1486 + return _arc_map[arc];
1.1487 + } else {
1.1488 + return _node_map[arc];
1.1489 + }
1.1490 + }
1.1491 +
1.1492 + /// Sets the value associated with the given key.
1.1493 void set(const Arc& arc, const Value& val) {
1.1494 if (Parent::origArc(arc)) {
1.1495 _arc_map.set(arc, val);
1.1496 @@ -3334,36 +3541,14 @@
1.1497 }
1.1498 }
1.1499
1.1500 - /// \brief The const subscript operator.
1.1501 - ///
1.1502 - /// The const subscript operator.
1.1503 - Value operator[](const Key& arc) const {
1.1504 - if (Parent::origArc(arc)) {
1.1505 - return _arc_map[arc];
1.1506 - } else {
1.1507 - return _node_map[arc];
1.1508 - }
1.1509 - }
1.1510 -
1.1511 - /// \brief The const subscript operator.
1.1512 - ///
1.1513 - /// The const subscript operator.
1.1514 - Value& operator[](const Key& arc) {
1.1515 - if (Parent::origArc(arc)) {
1.1516 - return _arc_map[arc];
1.1517 - } else {
1.1518 - return _node_map[arc];
1.1519 - }
1.1520 - }
1.1521 -
1.1522 private:
1.1523 DigraphArcMap& _arc_map;
1.1524 DigraphNodeMap& _node_map;
1.1525 };
1.1526
1.1527 - /// \brief Just gives back a combined arc map
1.1528 + /// \brief Returns a combined arc map
1.1529 ///
1.1530 - /// Just gives back a combined arc map
1.1531 + /// This function just returns a combined arc map.
1.1532 template <typename DigraphArcMap, typename DigraphNodeMap>
1.1533 static CombinedArcMap<DigraphArcMap, DigraphNodeMap>
1.1534 combinedArcMap(DigraphArcMap& arc_map, DigraphNodeMap& node_map) {
1.1535 @@ -3394,9 +3579,11 @@
1.1536
1.1537 };
1.1538
1.1539 - /// \brief Just gives back a node splitter
1.1540 + /// \brief Returns a (read-only) SplitNodes adaptor
1.1541 ///
1.1542 - /// Just gives back a node splitter
1.1543 + /// This function just returns a (read-only) \ref SplitNodes adaptor.
1.1544 + /// \ingroup graph_adaptors
1.1545 + /// \relates SplitNodes
1.1546 template<typename Digraph>
1.1547 SplitNodes<Digraph>
1.1548 splitNodes(const Digraph& digraph) {