1.1 --- a/lemon/concepts/graph_components.h Sun Jul 13 16:46:56 2008 +0100
1.2 +++ b/lemon/concepts/graph_components.h Sun Jul 13 19:51:02 2008 +0100
1.3 @@ -1,6 +1,6 @@
1.4 -/* -*- C++ -*-
1.5 +/* -*- mode: C++; indent-tabs-mode: nil; -*-
1.6 *
1.7 - * This file is a part of LEMON, a generic C++ optimization library
1.8 + * This file is a part of LEMON, a generic C++ optimization library.
1.9 *
1.10 * Copyright (C) 2003-2008
1.11 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
1.12 @@ -49,7 +49,7 @@
1.13 class GraphItem {
1.14 public:
1.15 /// \brief Default constructor.
1.16 - ///
1.17 + ///
1.18 /// \warning The default constructor is not required to set
1.19 /// the item to some well-defined value. So you should consider it
1.20 /// as uninitialized.
1.21 @@ -66,7 +66,7 @@
1.22 GraphItem(Invalid) {}
1.23 /// \brief Assign operator for nodes.
1.24 ///
1.25 - /// The nodes are assignable.
1.26 + /// The nodes are assignable.
1.27 ///
1.28 GraphItem& operator=(GraphItem const&) { return *this; }
1.29 /// \brief Equality operator.
1.30 @@ -92,27 +92,27 @@
1.31
1.32 template<typename _GraphItem>
1.33 struct Constraints {
1.34 - void constraints() {
1.35 - _GraphItem i1;
1.36 - _GraphItem i2 = i1;
1.37 - _GraphItem i3 = INVALID;
1.38 -
1.39 - i1 = i2 = i3;
1.40 + void constraints() {
1.41 + _GraphItem i1;
1.42 + _GraphItem i2 = i1;
1.43 + _GraphItem i3 = INVALID;
1.44
1.45 - bool b;
1.46 - // b = (ia == ib) && (ia != ib) && (ia < ib);
1.47 - b = (ia == ib) && (ia != ib);
1.48 - b = (ia == INVALID) && (ib != INVALID);
1.49 + i1 = i2 = i3;
1.50 +
1.51 + bool b;
1.52 + // b = (ia == ib) && (ia != ib) && (ia < ib);
1.53 + b = (ia == ib) && (ia != ib);
1.54 + b = (ia == INVALID) && (ib != INVALID);
1.55 b = (ia < ib);
1.56 - }
1.57 + }
1.58
1.59 - const _GraphItem &ia;
1.60 - const _GraphItem &ib;
1.61 + const _GraphItem &ia;
1.62 + const _GraphItem &ib;
1.63 };
1.64 };
1.65
1.66 /// \brief An empty base directed graph class.
1.67 - ///
1.68 + ///
1.69 /// This class provides the minimal set of features needed for a
1.70 /// directed graph structure. All digraph concepts have to be
1.71 /// conform to this base directed graph. It just provides types
1.72 @@ -122,16 +122,16 @@
1.73 public:
1.74
1.75 typedef BaseDigraphComponent Digraph;
1.76 -
1.77 +
1.78 /// \brief Node class of the digraph.
1.79 ///
1.80 - /// This class represents the Nodes of the digraph.
1.81 + /// This class represents the Nodes of the digraph.
1.82 ///
1.83 typedef GraphItem<'n'> Node;
1.84
1.85 /// \brief Arc class of the digraph.
1.86 ///
1.87 - /// This class represents the Arcs of the digraph.
1.88 + /// This class represents the Arcs of the digraph.
1.89 ///
1.90 typedef GraphItem<'e'> Arc;
1.91
1.92 @@ -156,27 +156,27 @@
1.93
1.94 template <typename _Digraph>
1.95 struct Constraints {
1.96 - typedef typename _Digraph::Node Node;
1.97 - typedef typename _Digraph::Arc Arc;
1.98 -
1.99 - void constraints() {
1.100 - checkConcept<GraphItem<'n'>, Node>();
1.101 - checkConcept<GraphItem<'a'>, Arc>();
1.102 - {
1.103 - Node n;
1.104 - Arc e(INVALID);
1.105 - n = digraph.source(e);
1.106 - n = digraph.target(e);
1.107 + typedef typename _Digraph::Node Node;
1.108 + typedef typename _Digraph::Arc Arc;
1.109 +
1.110 + void constraints() {
1.111 + checkConcept<GraphItem<'n'>, Node>();
1.112 + checkConcept<GraphItem<'a'>, Arc>();
1.113 + {
1.114 + Node n;
1.115 + Arc e(INVALID);
1.116 + n = digraph.source(e);
1.117 + n = digraph.target(e);
1.118 n = digraph.oppositeNode(n, e);
1.119 - }
1.120 - }
1.121 -
1.122 - const _Digraph& digraph;
1.123 + }
1.124 + }
1.125 +
1.126 + const _Digraph& digraph;
1.127 };
1.128 };
1.129
1.130 /// \brief An empty base undirected graph class.
1.131 - ///
1.132 + ///
1.133 /// This class provides the minimal set of features needed for an
1.134 /// undirected graph structure. All undirected graph concepts have
1.135 /// to be conform to this base graph. It just provides types for
1.136 @@ -199,7 +199,7 @@
1.137 public:
1.138 typedef GraphItem<'u'> Parent;
1.139 /// \brief Default constructor.
1.140 - ///
1.141 + ///
1.142 /// \warning The default constructor is not required to set
1.143 /// the item to some well-defined value. So you should consider it
1.144 /// as uninitialized.
1.145 @@ -217,12 +217,12 @@
1.146 /// \brief Converter from arc to edge.
1.147 ///
1.148 /// Besides the core graph item functionality each arc should
1.149 - /// be convertible to the represented edge.
1.150 + /// be convertible to the represented edge.
1.151 Edge(const Arc&) {}
1.152 /// \brief Assign arc to edge.
1.153 ///
1.154 /// Besides the core graph item functionality each arc should
1.155 - /// be convertible to the represented edge.
1.156 + /// be convertible to the represented edge.
1.157 Edge& operator=(const Arc&) { return *this; }
1.158 };
1.159
1.160 @@ -237,13 +237,13 @@
1.161 ///
1.162 /// Returns the directed arc from its direction and the
1.163 /// represented edge.
1.164 - Arc direct(const Edge&, bool) const { return INVALID;}
1.165 + Arc direct(const Edge&, bool) const { return INVALID;}
1.166
1.167 /// \brief Returns the directed arc.
1.168 ///
1.169 /// Returns the directed arc from its source and the
1.170 /// represented edge.
1.171 - Arc direct(const Edge&, const Node&) const { return INVALID;}
1.172 + Arc direct(const Edge&, const Node&) const { return INVALID;}
1.173
1.174 /// \brief Returns the opposite arc.
1.175 ///
1.176 @@ -260,38 +260,38 @@
1.177 ///
1.178 /// Gives back the other ending of an edge.
1.179 Node v(const Edge&) const { return INVALID;}
1.180 -
1.181 +
1.182 template <typename _Graph>
1.183 struct Constraints {
1.184 - typedef typename _Graph::Node Node;
1.185 - typedef typename _Graph::Arc Arc;
1.186 - typedef typename _Graph::Edge Edge;
1.187 -
1.188 - void constraints() {
1.189 + typedef typename _Graph::Node Node;
1.190 + typedef typename _Graph::Arc Arc;
1.191 + typedef typename _Graph::Edge Edge;
1.192 +
1.193 + void constraints() {
1.194 checkConcept<BaseDigraphComponent, _Graph>();
1.195 - checkConcept<GraphItem<'u'>, Edge>();
1.196 - {
1.197 - Node n;
1.198 - Edge ue(INVALID);
1.199 + checkConcept<GraphItem<'u'>, Edge>();
1.200 + {
1.201 + Node n;
1.202 + Edge ue(INVALID);
1.203 Arc e;
1.204 - n = graph.u(ue);
1.205 - n = graph.v(ue);
1.206 + n = graph.u(ue);
1.207 + n = graph.v(ue);
1.208 e = graph.direct(ue, true);
1.209 e = graph.direct(ue, n);
1.210 e = graph.oppositeArc(e);
1.211 ue = e;
1.212 bool d = graph.direction(e);
1.213 ignore_unused_variable_warning(d);
1.214 - }
1.215 - }
1.216 -
1.217 - const _Graph& graph;
1.218 + }
1.219 + }
1.220 +
1.221 + const _Graph& graph;
1.222 };
1.223
1.224 };
1.225
1.226 /// \brief An empty idable base digraph class.
1.227 - ///
1.228 + ///
1.229 /// This class provides beside the core digraph features
1.230 /// core id functions for the digraph structure.
1.231 /// The most of the base digraphs should be conform to this concept.
1.232 @@ -304,9 +304,9 @@
1.233 typedef typename Base::Node Node;
1.234 typedef typename Base::Arc Arc;
1.235
1.236 - /// \brief Gives back an unique integer id for the Node.
1.237 + /// \brief Gives back an unique integer id for the Node.
1.238 ///
1.239 - /// Gives back an unique integer id for the Node.
1.240 + /// Gives back an unique integer id for the Node.
1.241 ///
1.242 int id(const Node&) const { return -1;}
1.243
1.244 @@ -314,12 +314,12 @@
1.245 ///
1.246 /// Gives back the node by the unique id.
1.247 /// If the digraph does not contain node with the given id
1.248 - /// then the result of the function is undetermined.
1.249 + /// then the result of the function is undetermined.
1.250 Node nodeFromId(int) const { return INVALID;}
1.251
1.252 - /// \brief Gives back an unique integer id for the Arc.
1.253 + /// \brief Gives back an unique integer id for the Arc.
1.254 ///
1.255 - /// Gives back an unique integer id for the Arc.
1.256 + /// Gives back an unique integer id for the Arc.
1.257 ///
1.258 int id(const Arc&) const { return -1;}
1.259
1.260 @@ -327,7 +327,7 @@
1.261 ///
1.262 /// Gives back the arc by the unique id.
1.263 /// If the digraph does not contain arc with the given id
1.264 - /// then the result of the function is undetermined.
1.265 + /// then the result of the function is undetermined.
1.266 Arc arcFromId(int) const { return INVALID;}
1.267
1.268 /// \brief Gives back an integer greater or equal to the maximum
1.269 @@ -347,29 +347,29 @@
1.270 template <typename _Digraph>
1.271 struct Constraints {
1.272
1.273 - void constraints() {
1.274 - checkConcept<Base, _Digraph >();
1.275 - typename _Digraph::Node node;
1.276 - int nid = digraph.id(node);
1.277 - nid = digraph.id(node);
1.278 - node = digraph.nodeFromId(nid);
1.279 - typename _Digraph::Arc arc;
1.280 - int eid = digraph.id(arc);
1.281 - eid = digraph.id(arc);
1.282 - arc = digraph.arcFromId(eid);
1.283 + void constraints() {
1.284 + checkConcept<Base, _Digraph >();
1.285 + typename _Digraph::Node node;
1.286 + int nid = digraph.id(node);
1.287 + nid = digraph.id(node);
1.288 + node = digraph.nodeFromId(nid);
1.289 + typename _Digraph::Arc arc;
1.290 + int eid = digraph.id(arc);
1.291 + eid = digraph.id(arc);
1.292 + arc = digraph.arcFromId(eid);
1.293
1.294 - nid = digraph.maxNodeId();
1.295 - ignore_unused_variable_warning(nid);
1.296 - eid = digraph.maxArcId();
1.297 - ignore_unused_variable_warning(eid);
1.298 - }
1.299 + nid = digraph.maxNodeId();
1.300 + ignore_unused_variable_warning(nid);
1.301 + eid = digraph.maxArcId();
1.302 + ignore_unused_variable_warning(eid);
1.303 + }
1.304
1.305 - const _Digraph& digraph;
1.306 + const _Digraph& digraph;
1.307 };
1.308 };
1.309
1.310 /// \brief An empty idable base undirected graph class.
1.311 - ///
1.312 + ///
1.313 /// This class provides beside the core undirected graph features
1.314 /// core id functions for the undirected graph structure. The
1.315 /// most of the base undirected graphs should be conform to this
1.316 @@ -383,9 +383,9 @@
1.317
1.318 using IDableDigraphComponent<_Base>::id;
1.319
1.320 - /// \brief Gives back an unique integer id for the Edge.
1.321 + /// \brief Gives back an unique integer id for the Edge.
1.322 ///
1.323 - /// Gives back an unique integer id for the Edge.
1.324 + /// Gives back an unique integer id for the Edge.
1.325 ///
1.326 int id(const Edge&) const { return -1;}
1.327
1.328 @@ -406,18 +406,18 @@
1.329 template <typename _Graph>
1.330 struct Constraints {
1.331
1.332 - void constraints() {
1.333 - checkConcept<Base, _Graph >();
1.334 - checkConcept<IDableDigraphComponent<Base>, _Graph >();
1.335 - typename _Graph::Edge edge;
1.336 - int ueid = graph.id(edge);
1.337 - ueid = graph.id(edge);
1.338 - edge = graph.edgeFromId(ueid);
1.339 - ueid = graph.maxEdgeId();
1.340 - ignore_unused_variable_warning(ueid);
1.341 - }
1.342 + void constraints() {
1.343 + checkConcept<Base, _Graph >();
1.344 + checkConcept<IDableDigraphComponent<Base>, _Graph >();
1.345 + typename _Graph::Edge edge;
1.346 + int ueid = graph.id(edge);
1.347 + ueid = graph.id(edge);
1.348 + edge = graph.edgeFromId(ueid);
1.349 + ueid = graph.maxEdgeId();
1.350 + ignore_unused_variable_warning(ueid);
1.351 + }
1.352
1.353 - const _Graph& graph;
1.354 + const _Graph& graph;
1.355 };
1.356 };
1.357
1.358 @@ -450,52 +450,52 @@
1.359 GraphItemIt(Invalid) {}
1.360 /// \brief Assign operator for items.
1.361 ///
1.362 - /// The items are assignable.
1.363 + /// The items are assignable.
1.364 ///
1.365 - GraphItemIt& operator=(const GraphItemIt&) { return *this; }
1.366 + GraphItemIt& operator=(const GraphItemIt&) { return *this; }
1.367 /// \brief Next item.
1.368 - ///
1.369 + ///
1.370 /// Assign the iterator to the next item.
1.371 ///
1.372 GraphItemIt& operator++() { return *this; }
1.373 /// \brief Equality operator
1.374 - ///
1.375 + ///
1.376 /// Two iterators are equal if and only if they point to the
1.377 /// same object or both are invalid.
1.378 bool operator==(const GraphItemIt&) const { return true;}
1.379 /// \brief Inequality operator
1.380 - ///
1.381 + ///
1.382 /// \sa operator==(Node n)
1.383 ///
1.384 bool operator!=(const GraphItemIt&) const { return true;}
1.385 -
1.386 +
1.387 template<typename _GraphItemIt>
1.388 struct Constraints {
1.389 - void constraints() {
1.390 - _GraphItemIt it1(g);
1.391 - _GraphItemIt it2;
1.392 + void constraints() {
1.393 + _GraphItemIt it1(g);
1.394 + _GraphItemIt it2;
1.395
1.396 - it2 = ++it1;
1.397 - ++it2 = it1;
1.398 - ++(++it1);
1.399 + it2 = ++it1;
1.400 + ++it2 = it1;
1.401 + ++(++it1);
1.402
1.403 - _Item bi = it1;
1.404 - bi = it2;
1.405 - }
1.406 - _Graph& g;
1.407 + _Item bi = it1;
1.408 + bi = it2;
1.409 + }
1.410 + _Graph& g;
1.411 };
1.412 };
1.413
1.414 /// \brief Skeleton class for graph InArcIt and OutArcIt
1.415 ///
1.416 /// \note Because InArcIt and OutArcIt may not inherit from the same
1.417 - /// base class, the _selector is a additional template parameter. For
1.418 - /// InArcIt you should instantiate it with character 'i' and for
1.419 + /// base class, the _selector is a additional template parameter. For
1.420 + /// InArcIt you should instantiate it with character 'i' and for
1.421 /// OutArcIt with 'o'.
1.422 template <typename _Graph,
1.423 - typename _Item = typename _Graph::Arc,
1.424 - typename _Base = typename _Graph::Node,
1.425 - char _selector = '0'>
1.426 + typename _Item = typename _Graph::Arc,
1.427 + typename _Base = typename _Graph::Node,
1.428 + char _selector = '0'>
1.429 class GraphIncIt : public _Item {
1.430 public:
1.431 /// \brief Default constructor.
1.432 @@ -508,10 +508,10 @@
1.433 /// Copy constructor.
1.434 ///
1.435 GraphIncIt(GraphIncIt const& gi) : _Item(gi) {}
1.436 - /// \brief Sets the iterator to the first arc incoming into or outgoing
1.437 + /// \brief Sets the iterator to the first arc incoming into or outgoing
1.438 /// from the node.
1.439 ///
1.440 - /// Sets the iterator to the first arc incoming into or outgoing
1.441 + /// Sets the iterator to the first arc incoming into or outgoing
1.442 /// from the node.
1.443 ///
1.444 explicit GraphIncIt(const _Graph&, const _Base&) {}
1.445 @@ -522,9 +522,9 @@
1.446 GraphIncIt(Invalid) {}
1.447 /// \brief Assign operator for iterators.
1.448 ///
1.449 - /// The iterators are assignable.
1.450 + /// The iterators are assignable.
1.451 ///
1.452 - GraphIncIt& operator=(GraphIncIt const&) { return *this; }
1.453 + GraphIncIt& operator=(GraphIncIt const&) { return *this; }
1.454 /// \brief Next item.
1.455 ///
1.456 /// Assign the iterator to the next item.
1.457 @@ -545,23 +545,23 @@
1.458
1.459 template <typename _GraphIncIt>
1.460 struct Constraints {
1.461 - void constraints() {
1.462 - checkConcept<GraphItem<_selector>, _GraphIncIt>();
1.463 - _GraphIncIt it1(graph, node);
1.464 - _GraphIncIt it2;
1.465 + void constraints() {
1.466 + checkConcept<GraphItem<_selector>, _GraphIncIt>();
1.467 + _GraphIncIt it1(graph, node);
1.468 + _GraphIncIt it2;
1.469
1.470 - it2 = ++it1;
1.471 - ++it2 = it1;
1.472 - ++(++it1);
1.473 - _Item e = it1;
1.474 - e = it2;
1.475 + it2 = ++it1;
1.476 + ++it2 = it1;
1.477 + ++(++it1);
1.478 + _Item e = it1;
1.479 + e = it2;
1.480
1.481 - }
1.482 + }
1.483
1.484 - _Item arc;
1.485 - _Base node;
1.486 - _Graph graph;
1.487 - _GraphIncIt it;
1.488 + _Item arc;
1.489 + _Base node;
1.490 + _Graph graph;
1.491 + _GraphIncIt it;
1.492 };
1.493 };
1.494
1.495 @@ -575,7 +575,7 @@
1.496 class IterableDigraphComponent : public _Base {
1.497
1.498 public:
1.499 -
1.500 +
1.501 typedef _Base Base;
1.502 typedef typename Base::Node Node;
1.503 typedef typename Base::Arc Arc;
1.504 @@ -583,33 +583,33 @@
1.505 typedef IterableDigraphComponent Digraph;
1.506
1.507 /// \name Base iteration
1.508 - ///
1.509 + ///
1.510 /// This interface provides functions for iteration on digraph items
1.511 ///
1.512 - /// @{
1.513 + /// @{
1.514
1.515 /// \brief Gives back the first node in the iterating order.
1.516 - ///
1.517 + ///
1.518 /// Gives back the first node in the iterating order.
1.519 - ///
1.520 + ///
1.521 void first(Node&) const {}
1.522
1.523 /// \brief Gives back the next node in the iterating order.
1.524 ///
1.525 /// Gives back the next node in the iterating order.
1.526 - ///
1.527 + ///
1.528 void next(Node&) const {}
1.529
1.530 /// \brief Gives back the first arc in the iterating order.
1.531 ///
1.532 /// Gives back the first arc in the iterating order.
1.533 - ///
1.534 + ///
1.535 void first(Arc&) const {}
1.536
1.537 /// \brief Gives back the next arc in the iterating order.
1.538 ///
1.539 /// Gives back the next arc in the iterating order.
1.540 - ///
1.541 + ///
1.542 void next(Arc&) const {}
1.543
1.544
1.545 @@ -617,7 +617,7 @@
1.546 /// node.
1.547 ///
1.548 /// Gives back the first of the arcs point to the given node.
1.549 - ///
1.550 + ///
1.551 void firstIn(Arc&, const Node&) const {}
1.552
1.553 /// \brief Gives back the next of the arcs points to the given
1.554 @@ -629,22 +629,22 @@
1.555
1.556 /// \brief Gives back the first of the arcs start from the
1.557 /// given node.
1.558 - ///
1.559 + ///
1.560 /// Gives back the first of the arcs start from the given node.
1.561 - ///
1.562 + ///
1.563 void firstOut(Arc&, const Node&) const {}
1.564
1.565 /// \brief Gives back the next of the arcs start from the given
1.566 /// node.
1.567 ///
1.568 /// Gives back the next of the arcs start from the given node.
1.569 - ///
1.570 + ///
1.571 void nextOut(Arc&) const {}
1.572
1.573 /// @}
1.574
1.575 /// \name Class based iteration
1.576 - ///
1.577 + ///
1.578 /// This interface provides functions for iteration on digraph items
1.579 ///
1.580 /// @{
1.581 @@ -699,13 +699,13 @@
1.582
1.583 /// @}
1.584
1.585 - template <typename _Digraph>
1.586 + template <typename _Digraph>
1.587 struct Constraints {
1.588 - void constraints() {
1.589 - checkConcept<Base, _Digraph>();
1.590 + void constraints() {
1.591 + checkConcept<Base, _Digraph>();
1.592
1.593 {
1.594 - typename _Digraph::Node node(INVALID);
1.595 + typename _Digraph::Node node(INVALID);
1.596 typename _Digraph::Arc arc(INVALID);
1.597 {
1.598 digraph.first(node);
1.599 @@ -723,16 +723,16 @@
1.600 digraph.firstOut(arc, node);
1.601 digraph.nextOut(arc);
1.602 }
1.603 - }
1.604 + }
1.605
1.606 {
1.607 checkConcept<GraphItemIt<_Digraph, typename _Digraph::Arc>,
1.608 typename _Digraph::ArcIt >();
1.609 checkConcept<GraphItemIt<_Digraph, typename _Digraph::Node>,
1.610 typename _Digraph::NodeIt >();
1.611 - checkConcept<GraphIncIt<_Digraph, typename _Digraph::Arc,
1.612 + checkConcept<GraphIncIt<_Digraph, typename _Digraph::Arc,
1.613 typename _Digraph::Node, 'i'>, typename _Digraph::InArcIt>();
1.614 - checkConcept<GraphIncIt<_Digraph, typename _Digraph::Arc,
1.615 + checkConcept<GraphIncIt<_Digraph, typename _Digraph::Arc,
1.616 typename _Digraph::Node, 'o'>, typename _Digraph::OutArcIt>();
1.617
1.618 typename _Digraph::Node n;
1.619 @@ -745,9 +745,9 @@
1.620 ignore_unused_variable_warning(n);
1.621 }
1.622 }
1.623 -
1.624 - const _Digraph& digraph;
1.625 -
1.626 +
1.627 + const _Digraph& digraph;
1.628 +
1.629 };
1.630 };
1.631
1.632 @@ -765,13 +765,13 @@
1.633 typedef typename Base::Arc Arc;
1.634 typedef typename Base::Edge Edge;
1.635
1.636 -
1.637 +
1.638 typedef IterableGraphComponent Graph;
1.639
1.640 /// \name Base iteration
1.641 - ///
1.642 + ///
1.643 /// This interface provides functions for iteration on graph items
1.644 - /// @{
1.645 + /// @{
1.646
1.647 using IterableDigraphComponent<_Base>::first;
1.648 using IterableDigraphComponent<_Base>::next;
1.649 @@ -780,14 +780,14 @@
1.650 /// order.
1.651 ///
1.652 /// Gives back the first edge in the iterating order.
1.653 - ///
1.654 + ///
1.655 void first(Edge&) const {}
1.656
1.657 /// \brief Gives back the next edge in the iterating
1.658 /// order.
1.659 ///
1.660 /// Gives back the next edge in the iterating order.
1.661 - ///
1.662 + ///
1.663 void next(Edge&) const {}
1.664
1.665
1.666 @@ -814,7 +814,7 @@
1.667 /// @}
1.668
1.669 /// \name Class based iteration
1.670 - ///
1.671 + ///
1.672 /// This interface provides functions for iteration on graph items
1.673 ///
1.674 /// @{
1.675 @@ -841,10 +841,10 @@
1.676
1.677 /// @}
1.678
1.679 - template <typename _Graph>
1.680 + template <typename _Graph>
1.681 struct Constraints {
1.682 - void constraints() {
1.683 - checkConcept<IterableDigraphComponent<Base>, _Graph>();
1.684 + void constraints() {
1.685 + checkConcept<IterableDigraphComponent<Base>, _Graph>();
1.686
1.687 {
1.688 typename _Graph::Node node(INVALID);
1.689 @@ -858,29 +858,29 @@
1.690 graph.firstInc(edge, dir, node);
1.691 graph.nextInc(edge, dir);
1.692 }
1.693 -
1.694 - }
1.695 -
1.696 +
1.697 + }
1.698 +
1.699 {
1.700 checkConcept<GraphItemIt<_Graph, typename _Graph::Edge>,
1.701 typename _Graph::EdgeIt >();
1.702 - checkConcept<GraphIncIt<_Graph, typename _Graph::Edge,
1.703 + checkConcept<GraphIncIt<_Graph, typename _Graph::Edge,
1.704 typename _Graph::Node, 'u'>, typename _Graph::IncEdgeIt>();
1.705 -
1.706 +
1.707 typename _Graph::Node n;
1.708 typename _Graph::IncEdgeIt ueit(INVALID);
1.709 n = graph.baseNode(ueit);
1.710 n = graph.runningNode(ueit);
1.711 }
1.712 }
1.713 -
1.714 - const _Graph& graph;
1.715 -
1.716 +
1.717 + const _Graph& graph;
1.718 +
1.719 };
1.720 };
1.721
1.722 /// \brief An empty alteration notifier digraph class.
1.723 - ///
1.724 + ///
1.725 /// This class provides beside the core digraph features alteration
1.726 /// notifier interface for the digraph structure. This implements
1.727 /// an observer-notifier pattern for each digraph item. More
1.728 @@ -897,48 +897,48 @@
1.729
1.730
1.731 /// The node observer registry.
1.732 - typedef AlterationNotifier<AlterableDigraphComponent, Node>
1.733 + typedef AlterationNotifier<AlterableDigraphComponent, Node>
1.734 NodeNotifier;
1.735 /// The arc observer registry.
1.736 - typedef AlterationNotifier<AlterableDigraphComponent, Arc>
1.737 + typedef AlterationNotifier<AlterableDigraphComponent, Arc>
1.738 ArcNotifier;
1.739 -
1.740 +
1.741 /// \brief Gives back the node alteration notifier.
1.742 ///
1.743 /// Gives back the node alteration notifier.
1.744 NodeNotifier& notifier(Node) const {
1.745 - return NodeNotifier();
1.746 + return NodeNotifier();
1.747 }
1.748 -
1.749 +
1.750 /// \brief Gives back the arc alteration notifier.
1.751 ///
1.752 /// Gives back the arc alteration notifier.
1.753 ArcNotifier& notifier(Arc) const {
1.754 - return ArcNotifier();
1.755 + return ArcNotifier();
1.756 }
1.757
1.758 - template <typename _Digraph>
1.759 + template <typename _Digraph>
1.760 struct Constraints {
1.761 - void constraints() {
1.762 - checkConcept<Base, _Digraph>();
1.763 - typename _Digraph::NodeNotifier& nn
1.764 + void constraints() {
1.765 + checkConcept<Base, _Digraph>();
1.766 + typename _Digraph::NodeNotifier& nn
1.767 = digraph.notifier(typename _Digraph::Node());
1.768
1.769 - typename _Digraph::ArcNotifier& en
1.770 + typename _Digraph::ArcNotifier& en
1.771 = digraph.notifier(typename _Digraph::Arc());
1.772 -
1.773 +
1.774 ignore_unused_variable_warning(nn);
1.775 ignore_unused_variable_warning(en);
1.776 - }
1.777 -
1.778 - const _Digraph& digraph;
1.779 -
1.780 + }
1.781 +
1.782 + const _Digraph& digraph;
1.783 +
1.784 };
1.785 -
1.786 +
1.787 };
1.788
1.789 /// \brief An empty alteration notifier undirected graph class.
1.790 - ///
1.791 + ///
1.792 /// This class provides beside the core graph features alteration
1.793 /// notifier interface for the graph structure. This implements
1.794 /// an observer-notifier pattern for each graph item. More
1.795 @@ -954,33 +954,33 @@
1.796
1.797
1.798 /// The arc observer registry.
1.799 - typedef AlterationNotifier<AlterableGraphComponent, Edge>
1.800 + typedef AlterationNotifier<AlterableGraphComponent, Edge>
1.801 EdgeNotifier;
1.802 -
1.803 +
1.804 /// \brief Gives back the arc alteration notifier.
1.805 ///
1.806 /// Gives back the arc alteration notifier.
1.807 EdgeNotifier& notifier(Edge) const {
1.808 - return EdgeNotifier();
1.809 + return EdgeNotifier();
1.810 }
1.811
1.812 - template <typename _Graph>
1.813 + template <typename _Graph>
1.814 struct Constraints {
1.815 - void constraints() {
1.816 - checkConcept<AlterableGraphComponent<Base>, _Graph>();
1.817 - typename _Graph::EdgeNotifier& uen
1.818 + void constraints() {
1.819 + checkConcept<AlterableGraphComponent<Base>, _Graph>();
1.820 + typename _Graph::EdgeNotifier& uen
1.821 = graph.notifier(typename _Graph::Edge());
1.822 ignore_unused_variable_warning(uen);
1.823 - }
1.824 -
1.825 - const _Graph& graph;
1.826 -
1.827 + }
1.828 +
1.829 + const _Graph& graph;
1.830 +
1.831 };
1.832 -
1.833 +
1.834 };
1.835
1.836 /// \brief Class describing the concept of graph maps
1.837 - ///
1.838 + ///
1.839 /// This class describes the common interface of the graph maps
1.840 /// (NodeMap, ArcMap), that is \ref maps-page "maps" which can be used to
1.841 /// associate data to graph descriptors (nodes or arcs).
1.842 @@ -1009,39 +1009,39 @@
1.843 ///
1.844 /// Copy Constructor.
1.845 GraphMap(const GraphMap&) : Parent() {}
1.846 -
1.847 +
1.848 /// \brief Assign operator.
1.849 ///
1.850 /// Assign operator. It does not mofify the underlying graph,
1.851 /// it just iterates on the current item set and set the map
1.852 - /// with the value returned by the assigned map.
1.853 + /// with the value returned by the assigned map.
1.854 template <typename CMap>
1.855 - GraphMap& operator=(const CMap&) {
1.856 + GraphMap& operator=(const CMap&) {
1.857 checkConcept<ReadMap<Key, Value>, CMap>();
1.858 return *this;
1.859 }
1.860
1.861 template<typename _Map>
1.862 struct Constraints {
1.863 - void constraints() {
1.864 - checkConcept<ReadWriteMap<Key, Value>, _Map >();
1.865 - // Construction with a graph parameter
1.866 - _Map a(g);
1.867 - // Constructor with a graph and a default value parameter
1.868 - _Map a2(g,t);
1.869 - // Copy constructor.
1.870 - _Map b(c);
1.871 -
1.872 + void constraints() {
1.873 + checkConcept<ReadWriteMap<Key, Value>, _Map >();
1.874 + // Construction with a graph parameter
1.875 + _Map a(g);
1.876 + // Constructor with a graph and a default value parameter
1.877 + _Map a2(g,t);
1.878 + // Copy constructor.
1.879 + _Map b(c);
1.880 +
1.881 ReadMap<Key, Value> cmap;
1.882 b = cmap;
1.883
1.884 - ignore_unused_variable_warning(a2);
1.885 - ignore_unused_variable_warning(b);
1.886 - }
1.887 + ignore_unused_variable_warning(a2);
1.888 + ignore_unused_variable_warning(b);
1.889 + }
1.890
1.891 - const _Map &c;
1.892 - const Graph &g;
1.893 - const typename GraphMap::Value &t;
1.894 + const _Map &c;
1.895 + const Graph &g;
1.896 + const typename GraphMap::Value &t;
1.897 };
1.898
1.899 };
1.900 @@ -1070,28 +1070,28 @@
1.901 public:
1.902 typedef GraphMap<MappableDigraphComponent, Node, _Value> Parent;
1.903
1.904 - /// \brief Construct a new map.
1.905 - ///
1.906 - /// Construct a new map for the digraph.
1.907 - explicit NodeMap(const MappableDigraphComponent& digraph)
1.908 + /// \brief Construct a new map.
1.909 + ///
1.910 + /// Construct a new map for the digraph.
1.911 + explicit NodeMap(const MappableDigraphComponent& digraph)
1.912 : Parent(digraph) {}
1.913
1.914 - /// \brief Construct a new map with default value.
1.915 - ///
1.916 - /// Construct a new map for the digraph and initalise the values.
1.917 - NodeMap(const MappableDigraphComponent& digraph, const _Value& value)
1.918 + /// \brief Construct a new map with default value.
1.919 + ///
1.920 + /// Construct a new map for the digraph and initalise the values.
1.921 + NodeMap(const MappableDigraphComponent& digraph, const _Value& value)
1.922 : Parent(digraph, value) {}
1.923
1.924 - /// \brief Copy constructor.
1.925 - ///
1.926 - /// Copy Constructor.
1.927 - NodeMap(const NodeMap& nm) : Parent(nm) {}
1.928 + /// \brief Copy constructor.
1.929 + ///
1.930 + /// Copy Constructor.
1.931 + NodeMap(const NodeMap& nm) : Parent(nm) {}
1.932
1.933 - /// \brief Assign operator.
1.934 - ///
1.935 - /// Assign operator.
1.936 + /// \brief Assign operator.
1.937 + ///
1.938 + /// Assign operator.
1.939 template <typename CMap>
1.940 - NodeMap& operator=(const CMap&) {
1.941 + NodeMap& operator=(const CMap&) {
1.942 checkConcept<ReadMap<Node, _Value>, CMap>();
1.943 return *this;
1.944 }
1.945 @@ -1107,28 +1107,28 @@
1.946 public:
1.947 typedef GraphMap<MappableDigraphComponent, Arc, _Value> Parent;
1.948
1.949 - /// \brief Construct a new map.
1.950 - ///
1.951 - /// Construct a new map for the digraph.
1.952 - explicit ArcMap(const MappableDigraphComponent& digraph)
1.953 + /// \brief Construct a new map.
1.954 + ///
1.955 + /// Construct a new map for the digraph.
1.956 + explicit ArcMap(const MappableDigraphComponent& digraph)
1.957 : Parent(digraph) {}
1.958
1.959 - /// \brief Construct a new map with default value.
1.960 - ///
1.961 - /// Construct a new map for the digraph and initalise the values.
1.962 - ArcMap(const MappableDigraphComponent& digraph, const _Value& value)
1.963 + /// \brief Construct a new map with default value.
1.964 + ///
1.965 + /// Construct a new map for the digraph and initalise the values.
1.966 + ArcMap(const MappableDigraphComponent& digraph, const _Value& value)
1.967 : Parent(digraph, value) {}
1.968
1.969 - /// \brief Copy constructor.
1.970 - ///
1.971 - /// Copy Constructor.
1.972 - ArcMap(const ArcMap& nm) : Parent(nm) {}
1.973 + /// \brief Copy constructor.
1.974 + ///
1.975 + /// Copy Constructor.
1.976 + ArcMap(const ArcMap& nm) : Parent(nm) {}
1.977
1.978 - /// \brief Assign operator.
1.979 - ///
1.980 - /// Assign operator.
1.981 + /// \brief Assign operator.
1.982 + ///
1.983 + /// Assign operator.
1.984 template <typename CMap>
1.985 - ArcMap& operator=(const CMap&) {
1.986 + ArcMap& operator=(const CMap&) {
1.987 checkConcept<ReadMap<Arc, _Value>, CMap>();
1.988 return *this;
1.989 }
1.990 @@ -1139,44 +1139,44 @@
1.991 template <typename _Digraph>
1.992 struct Constraints {
1.993
1.994 - struct Dummy {
1.995 - int value;
1.996 - Dummy() : value(0) {}
1.997 - Dummy(int _v) : value(_v) {}
1.998 - };
1.999 + struct Dummy {
1.1000 + int value;
1.1001 + Dummy() : value(0) {}
1.1002 + Dummy(int _v) : value(_v) {}
1.1003 + };
1.1004
1.1005 - void constraints() {
1.1006 - checkConcept<Base, _Digraph>();
1.1007 - { // int map test
1.1008 - typedef typename _Digraph::template NodeMap<int> IntNodeMap;
1.1009 - checkConcept<GraphMap<_Digraph, typename _Digraph::Node, int>,
1.1010 - IntNodeMap >();
1.1011 - } { // bool map test
1.1012 - typedef typename _Digraph::template NodeMap<bool> BoolNodeMap;
1.1013 - checkConcept<GraphMap<_Digraph, typename _Digraph::Node, bool>,
1.1014 - BoolNodeMap >();
1.1015 - } { // Dummy map test
1.1016 - typedef typename _Digraph::template NodeMap<Dummy> DummyNodeMap;
1.1017 - checkConcept<GraphMap<_Digraph, typename _Digraph::Node, Dummy>,
1.1018 - DummyNodeMap >();
1.1019 - }
1.1020 + void constraints() {
1.1021 + checkConcept<Base, _Digraph>();
1.1022 + { // int map test
1.1023 + typedef typename _Digraph::template NodeMap<int> IntNodeMap;
1.1024 + checkConcept<GraphMap<_Digraph, typename _Digraph::Node, int>,
1.1025 + IntNodeMap >();
1.1026 + } { // bool map test
1.1027 + typedef typename _Digraph::template NodeMap<bool> BoolNodeMap;
1.1028 + checkConcept<GraphMap<_Digraph, typename _Digraph::Node, bool>,
1.1029 + BoolNodeMap >();
1.1030 + } { // Dummy map test
1.1031 + typedef typename _Digraph::template NodeMap<Dummy> DummyNodeMap;
1.1032 + checkConcept<GraphMap<_Digraph, typename _Digraph::Node, Dummy>,
1.1033 + DummyNodeMap >();
1.1034 + }
1.1035
1.1036 - { // int map test
1.1037 - typedef typename _Digraph::template ArcMap<int> IntArcMap;
1.1038 - checkConcept<GraphMap<_Digraph, typename _Digraph::Arc, int>,
1.1039 - IntArcMap >();
1.1040 - } { // bool map test
1.1041 - typedef typename _Digraph::template ArcMap<bool> BoolArcMap;
1.1042 - checkConcept<GraphMap<_Digraph, typename _Digraph::Arc, bool>,
1.1043 - BoolArcMap >();
1.1044 - } { // Dummy map test
1.1045 - typedef typename _Digraph::template ArcMap<Dummy> DummyArcMap;
1.1046 - checkConcept<GraphMap<_Digraph, typename _Digraph::Arc, Dummy>,
1.1047 - DummyArcMap >();
1.1048 - }
1.1049 - }
1.1050 + { // int map test
1.1051 + typedef typename _Digraph::template ArcMap<int> IntArcMap;
1.1052 + checkConcept<GraphMap<_Digraph, typename _Digraph::Arc, int>,
1.1053 + IntArcMap >();
1.1054 + } { // bool map test
1.1055 + typedef typename _Digraph::template ArcMap<bool> BoolArcMap;
1.1056 + checkConcept<GraphMap<_Digraph, typename _Digraph::Arc, bool>,
1.1057 + BoolArcMap >();
1.1058 + } { // Dummy map test
1.1059 + typedef typename _Digraph::template ArcMap<Dummy> DummyArcMap;
1.1060 + checkConcept<GraphMap<_Digraph, typename _Digraph::Arc, Dummy>,
1.1061 + DummyArcMap >();
1.1062 + }
1.1063 + }
1.1064
1.1065 - _Digraph& digraph;
1.1066 + _Digraph& digraph;
1.1067 };
1.1068 };
1.1069
1.1070 @@ -1199,32 +1199,32 @@
1.1071 /// ReadWrite map of the edges.
1.1072 ///
1.1073 template <typename _Value>
1.1074 - class EdgeMap : public GraphMap<Graph, Edge, _Value> {
1.1075 + class EdgeMap : public GraphMap<Graph, Edge, _Value> {
1.1076 public:
1.1077 typedef GraphMap<MappableGraphComponent, Edge, _Value> Parent;
1.1078
1.1079 - /// \brief Construct a new map.
1.1080 - ///
1.1081 - /// Construct a new map for the graph.
1.1082 - explicit EdgeMap(const MappableGraphComponent& graph)
1.1083 + /// \brief Construct a new map.
1.1084 + ///
1.1085 + /// Construct a new map for the graph.
1.1086 + explicit EdgeMap(const MappableGraphComponent& graph)
1.1087 : Parent(graph) {}
1.1088
1.1089 - /// \brief Construct a new map with default value.
1.1090 - ///
1.1091 - /// Construct a new map for the graph and initalise the values.
1.1092 - EdgeMap(const MappableGraphComponent& graph, const _Value& value)
1.1093 + /// \brief Construct a new map with default value.
1.1094 + ///
1.1095 + /// Construct a new map for the graph and initalise the values.
1.1096 + EdgeMap(const MappableGraphComponent& graph, const _Value& value)
1.1097 : Parent(graph, value) {}
1.1098
1.1099 - /// \brief Copy constructor.
1.1100 - ///
1.1101 - /// Copy Constructor.
1.1102 - EdgeMap(const EdgeMap& nm) : Parent(nm) {}
1.1103 + /// \brief Copy constructor.
1.1104 + ///
1.1105 + /// Copy Constructor.
1.1106 + EdgeMap(const EdgeMap& nm) : Parent(nm) {}
1.1107
1.1108 - /// \brief Assign operator.
1.1109 - ///
1.1110 - /// Assign operator.
1.1111 + /// \brief Assign operator.
1.1112 + ///
1.1113 + /// Assign operator.
1.1114 template <typename CMap>
1.1115 - EdgeMap& operator=(const CMap&) {
1.1116 + EdgeMap& operator=(const CMap&) {
1.1117 checkConcept<ReadMap<Edge, _Value>, CMap>();
1.1118 return *this;
1.1119 }
1.1120 @@ -1235,31 +1235,31 @@
1.1121 template <typename _Graph>
1.1122 struct Constraints {
1.1123
1.1124 - struct Dummy {
1.1125 - int value;
1.1126 - Dummy() : value(0) {}
1.1127 - Dummy(int _v) : value(_v) {}
1.1128 - };
1.1129 + struct Dummy {
1.1130 + int value;
1.1131 + Dummy() : value(0) {}
1.1132 + Dummy(int _v) : value(_v) {}
1.1133 + };
1.1134
1.1135 - void constraints() {
1.1136 - checkConcept<MappableGraphComponent<Base>, _Graph>();
1.1137 + void constraints() {
1.1138 + checkConcept<MappableGraphComponent<Base>, _Graph>();
1.1139
1.1140 - { // int map test
1.1141 - typedef typename _Graph::template EdgeMap<int> IntEdgeMap;
1.1142 - checkConcept<GraphMap<_Graph, typename _Graph::Edge, int>,
1.1143 - IntEdgeMap >();
1.1144 - } { // bool map test
1.1145 - typedef typename _Graph::template EdgeMap<bool> BoolEdgeMap;
1.1146 - checkConcept<GraphMap<_Graph, typename _Graph::Edge, bool>,
1.1147 - BoolEdgeMap >();
1.1148 - } { // Dummy map test
1.1149 - typedef typename _Graph::template EdgeMap<Dummy> DummyEdgeMap;
1.1150 - checkConcept<GraphMap<_Graph, typename _Graph::Edge, Dummy>,
1.1151 - DummyEdgeMap >();
1.1152 - }
1.1153 - }
1.1154 + { // int map test
1.1155 + typedef typename _Graph::template EdgeMap<int> IntEdgeMap;
1.1156 + checkConcept<GraphMap<_Graph, typename _Graph::Edge, int>,
1.1157 + IntEdgeMap >();
1.1158 + } { // bool map test
1.1159 + typedef typename _Graph::template EdgeMap<bool> BoolEdgeMap;
1.1160 + checkConcept<GraphMap<_Graph, typename _Graph::Edge, bool>,
1.1161 + BoolEdgeMap >();
1.1162 + } { // Dummy map test
1.1163 + typedef typename _Graph::template EdgeMap<Dummy> DummyEdgeMap;
1.1164 + checkConcept<GraphMap<_Graph, typename _Graph::Edge, Dummy>,
1.1165 + DummyEdgeMap >();
1.1166 + }
1.1167 + }
1.1168
1.1169 - _Graph& graph;
1.1170 + _Graph& graph;
1.1171 };
1.1172 };
1.1173
1.1174 @@ -1282,28 +1282,28 @@
1.1175 /// Adds a new node to the digraph.
1.1176 ///
1.1177 Node addNode() {
1.1178 - return INVALID;
1.1179 + return INVALID;
1.1180 }
1.1181 -
1.1182 +
1.1183 /// \brief Adds a new arc connects the given two nodes.
1.1184 ///
1.1185 /// Adds a new arc connects the the given two nodes.
1.1186 Arc addArc(const Node&, const Node&) {
1.1187 - return INVALID;
1.1188 + return INVALID;
1.1189 }
1.1190
1.1191 template <typename _Digraph>
1.1192 struct Constraints {
1.1193 - void constraints() {
1.1194 + void constraints() {
1.1195 checkConcept<Base, _Digraph>();
1.1196 - typename _Digraph::Node node_a, node_b;
1.1197 - node_a = digraph.addNode();
1.1198 - node_b = digraph.addNode();
1.1199 - typename _Digraph::Arc arc;
1.1200 - arc = digraph.addArc(node_a, node_b);
1.1201 - }
1.1202 + typename _Digraph::Node node_a, node_b;
1.1203 + node_a = digraph.addNode();
1.1204 + node_b = digraph.addNode();
1.1205 + typename _Digraph::Arc arc;
1.1206 + arc = digraph.addArc(node_a, node_b);
1.1207 + }
1.1208
1.1209 - _Digraph& digraph;
1.1210 + _Digraph& digraph;
1.1211 };
1.1212 };
1.1213
1.1214 @@ -1327,33 +1327,33 @@
1.1215 /// Adds a new node to the graph.
1.1216 ///
1.1217 Node addNode() {
1.1218 - return INVALID;
1.1219 + return INVALID;
1.1220 }
1.1221 -
1.1222 +
1.1223 /// \brief Adds a new arc connects the given two nodes.
1.1224 ///
1.1225 /// Adds a new arc connects the the given two nodes.
1.1226 Edge addArc(const Node&, const Node&) {
1.1227 - return INVALID;
1.1228 + return INVALID;
1.1229 }
1.1230
1.1231 template <typename _Graph>
1.1232 struct Constraints {
1.1233 - void constraints() {
1.1234 - checkConcept<Base, _Graph>();
1.1235 - typename _Graph::Node node_a, node_b;
1.1236 - node_a = graph.addNode();
1.1237 - node_b = graph.addNode();
1.1238 - typename _Graph::Edge edge;
1.1239 - edge = graph.addEdge(node_a, node_b);
1.1240 - }
1.1241 + void constraints() {
1.1242 + checkConcept<Base, _Graph>();
1.1243 + typename _Graph::Node node_a, node_b;
1.1244 + node_a = graph.addNode();
1.1245 + node_b = graph.addNode();
1.1246 + typename _Graph::Edge edge;
1.1247 + edge = graph.addEdge(node_a, node_b);
1.1248 + }
1.1249
1.1250 - _Graph& graph;
1.1251 + _Graph& graph;
1.1252 };
1.1253 };
1.1254
1.1255 /// \brief An empty erasable digraph class.
1.1256 - ///
1.1257 + ///
1.1258 /// This class provides beside the core digraph features core erase
1.1259 /// functions for the digraph structure. The main difference between
1.1260 /// the base and this interface is that the digraph alterations
1.1261 @@ -1368,9 +1368,9 @@
1.1262
1.1263 /// \brief Erase a node from the digraph.
1.1264 ///
1.1265 - /// Erase a node from the digraph. This function should
1.1266 + /// Erase a node from the digraph. This function should
1.1267 /// erase all arcs connecting to the node.
1.1268 - void erase(const Node&) {}
1.1269 + void erase(const Node&) {}
1.1270
1.1271 /// \brief Erase an arc from the digraph.
1.1272 ///
1.1273 @@ -1380,20 +1380,20 @@
1.1274
1.1275 template <typename _Digraph>
1.1276 struct Constraints {
1.1277 - void constraints() {
1.1278 + void constraints() {
1.1279 checkConcept<Base, _Digraph>();
1.1280 - typename _Digraph::Node node;
1.1281 - digraph.erase(node);
1.1282 - typename _Digraph::Arc arc;
1.1283 - digraph.erase(arc);
1.1284 - }
1.1285 + typename _Digraph::Node node;
1.1286 + digraph.erase(node);
1.1287 + typename _Digraph::Arc arc;
1.1288 + digraph.erase(arc);
1.1289 + }
1.1290
1.1291 - _Digraph& digraph;
1.1292 + _Digraph& digraph;
1.1293 };
1.1294 };
1.1295
1.1296 /// \brief An empty erasable base undirected graph class.
1.1297 - ///
1.1298 + ///
1.1299 /// This class provides beside the core undirected graph features
1.1300 /// core erase functions for the undirceted graph structure. The
1.1301 /// main difference between the base and this interface is that
1.1302 @@ -1410,7 +1410,7 @@
1.1303 ///
1.1304 /// Erase a node from the graph. This function should erase
1.1305 /// arcs connecting to the node.
1.1306 - void erase(const Node&) {}
1.1307 + void erase(const Node&) {}
1.1308
1.1309 /// \brief Erase an arc from the graph.
1.1310 ///
1.1311 @@ -1420,15 +1420,15 @@
1.1312
1.1313 template <typename _Graph>
1.1314 struct Constraints {
1.1315 - void constraints() {
1.1316 + void constraints() {
1.1317 checkConcept<Base, _Graph>();
1.1318 - typename _Graph::Node node;
1.1319 - graph.erase(node);
1.1320 - typename _Graph::Edge edge;
1.1321 - graph.erase(edge);
1.1322 - }
1.1323 + typename _Graph::Node node;
1.1324 + graph.erase(node);
1.1325 + typename _Graph::Edge edge;
1.1326 + graph.erase(edge);
1.1327 + }
1.1328
1.1329 - _Graph& graph;
1.1330 + _Graph& graph;
1.1331 };
1.1332 };
1.1333
1.1334 @@ -1448,16 +1448,16 @@
1.1335 ///
1.1336 /// Erase all nodes and arcs from the digraph.
1.1337 ///
1.1338 - void clear() {}
1.1339 + void clear() {}
1.1340
1.1341 template <typename _Digraph>
1.1342 struct Constraints {
1.1343 - void constraints() {
1.1344 + void constraints() {
1.1345 checkConcept<Base, _Digraph>();
1.1346 - digraph.clear();
1.1347 - }
1.1348 + digraph.clear();
1.1349 + }
1.1350
1.1351 - _Digraph digraph;
1.1352 + _Digraph digraph;
1.1353 };
1.1354 };
1.1355
1.1356 @@ -1475,11 +1475,11 @@
1.1357
1.1358 template <typename _Graph>
1.1359 struct Constraints {
1.1360 - void constraints() {
1.1361 + void constraints() {
1.1362 checkConcept<ClearableGraphComponent<Base>, _Graph>();
1.1363 - }
1.1364 + }
1.1365
1.1366 - _Graph graph;
1.1367 + _Graph graph;
1.1368 };
1.1369 };
1.1370