1.1 --- a/src/lemon/skeletons/sym_graph.h Thu Nov 04 18:52:31 2004 +0000
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,653 +0,0 @@
1.4 -/* -*- C++ -*-
1.5 - * src/lemon/skeletons/graph.h - Part of LEMON, a generic C++ optimization library
1.6 - *
1.7 - * Copyright (C) 2004 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
1.8 - * (Egervary Combinatorial Optimization Research Group, EGRES).
1.9 - *
1.10 - * Permission to use, modify and distribute this software is granted
1.11 - * provided that this copyright notice appears in all copies. For
1.12 - * precise terms see the accompanying LICENSE file.
1.13 - *
1.14 - * This software is provided "AS IS" with no warranty of any kind,
1.15 - * express or implied, and with no claim as to its suitability for any
1.16 - * purpose.
1.17 - *
1.18 - */
1.19 -
1.20 -#ifndef LEMON_SKELETON_SYM_GRAPH_H
1.21 -#define LEMON_SKELETON_SYM_GRAPH_H
1.22 -
1.23 -///\ingroup skeletons
1.24 -///\file
1.25 -///\brief Declaration of SymGraph.
1.26 -
1.27 -#include <lemon/invalid.h>
1.28 -#include <lemon/skeletons/graph.h>
1.29 -#include <lemon/skeletons/maps.h>
1.30 -
1.31 -namespace lemon {
1.32 - namespace skeleton {
1.33 -
1.34 - /// \addtogroup skeletons
1.35 - /// @{
1.36 -
1.37 - /// An empty static graph class.
1.38 -
1.39 - /// This class provides all the common features of a symmetric
1.40 - /// graph structure, however completely without implementations and
1.41 - /// real data structures behind the interface.
1.42 - /// All graph algorithms should compile with this class, but it will not
1.43 - /// run properly, of course.
1.44 - ///
1.45 - /// It can be used for checking the interface compatibility,
1.46 - /// or it can serve as a skeleton of a new symmetric graph structure.
1.47 - ///
1.48 - /// Also, you will find here the full documentation of a certain graph
1.49 - /// feature, the documentation of a real symmetric graph imlementation
1.50 - /// like @ref SymListGraph or
1.51 - /// @ref lemon::SymSmartGraph will just refer to this structure.
1.52 - class StaticSymGraph
1.53 - {
1.54 - public:
1.55 - /// Defalult constructor.
1.56 -
1.57 - /// Defalult constructor.
1.58 - ///
1.59 - StaticSymGraph() { }
1.60 - ///Copy consructor.
1.61 -
1.62 -// ///\todo It is not clear, what we expect from a copy constructor.
1.63 -// ///E.g. How to assign the nodes/edges to each other? What about maps?
1.64 -// StaticGraph(const StaticGraph& g) { }
1.65 -
1.66 - /// The base type of node iterators,
1.67 - /// or in other words, the trivial node iterator.
1.68 -
1.69 - /// This is the base type of each node iterator,
1.70 - /// thus each kind of node iterator converts to this.
1.71 - /// More precisely each kind of node iterator should be inherited
1.72 - /// from the trivial node iterator.
1.73 - class Node {
1.74 - public:
1.75 - /// Default constructor
1.76 -
1.77 - /// @warning The default constructor sets the iterator
1.78 - /// to an undefined value.
1.79 - Node() { }
1.80 - /// Copy constructor.
1.81 -
1.82 - /// Copy constructor.
1.83 - ///
1.84 - Node(const Node&) { }
1.85 -
1.86 - /// Invalid constructor \& conversion.
1.87 -
1.88 - /// This constructor initializes the iterator to be invalid.
1.89 - /// \sa Invalid for more details.
1.90 - Node(Invalid) { }
1.91 - /// Equality operator
1.92 -
1.93 - /// Two iterators are equal if and only if they point to the
1.94 - /// same object or both are invalid.
1.95 - bool operator==(Node) const { return true; }
1.96 -
1.97 - /// Inequality operator
1.98 -
1.99 - /// \sa operator==(Node n)
1.100 - ///
1.101 - bool operator!=(Node) const { return true; }
1.102 -
1.103 - ///Comparison operator.
1.104 -
1.105 - ///This is a strict ordering between the nodes.
1.106 - ///
1.107 - ///This ordering can be different from the order in which NodeIt
1.108 - ///goes through the nodes.
1.109 - ///\todo Possibly we don't need it.
1.110 - bool operator<(Node) const { return true; }
1.111 - };
1.112 -
1.113 - /// This iterator goes through each node.
1.114 -
1.115 - /// This iterator goes through each node.
1.116 - /// Its usage is quite simple, for example you can count the number
1.117 - /// of nodes in graph \c g of type \c Graph like this:
1.118 - /// \code
1.119 - /// int count=0;
1.120 - /// for (Graph::NodeIt n(g); n!=INVALID; ++n) ++count;
1.121 - /// \endcode
1.122 - class NodeIt : public Node {
1.123 - public:
1.124 - /// Default constructor
1.125 -
1.126 - /// @warning The default constructor sets the iterator
1.127 - /// to an undefined value.
1.128 - NodeIt() { }
1.129 - /// Copy constructor.
1.130 -
1.131 - /// Copy constructor.
1.132 - ///
1.133 - NodeIt(const NodeIt&) { }
1.134 - /// Invalid constructor \& conversion.
1.135 -
1.136 - /// Initialize the iterator to be invalid.
1.137 - /// \sa Invalid for more details.
1.138 - NodeIt(Invalid) { }
1.139 - /// Sets the iterator to the first node.
1.140 -
1.141 - /// Sets the iterator to the first node of \c g.
1.142 - ///
1.143 - NodeIt(const StaticSymGraph& g) { }
1.144 - /// Node -> NodeIt conversion.
1.145 -
1.146 - /// Sets the iterator to the node of \c g pointed by the trivial
1.147 - /// iterator n.
1.148 - /// This feature necessitates that each time we
1.149 - /// iterate the edge-set, the iteration order is the same.
1.150 - NodeIt(const StaticSymGraph& g, const Node& n) { }
1.151 - /// Next node.
1.152 -
1.153 - /// Assign the iterator to the next node.
1.154 - ///
1.155 - NodeIt& operator++() { return *this; }
1.156 - };
1.157 -
1.158 -
1.159 - /// The base type of the symmetric edge iterators.
1.160 -
1.161 - /// The base type of the symmetric edge iterators.
1.162 - ///
1.163 - class SymEdge {
1.164 - public:
1.165 - /// Default constructor
1.166 -
1.167 - /// @warning The default constructor sets the iterator
1.168 - /// to an undefined value.
1.169 - SymEdge() { }
1.170 - /// Copy constructor.
1.171 -
1.172 - /// Copy constructor.
1.173 - ///
1.174 - SymEdge(const SymEdge&) { }
1.175 - /// Initialize the iterator to be invalid.
1.176 -
1.177 - /// Initialize the iterator to be invalid.
1.178 - ///
1.179 - SymEdge(Invalid) { }
1.180 - /// Equality operator
1.181 -
1.182 - /// Two iterators are equal if and only if they point to the
1.183 - /// same object or both are invalid.
1.184 - bool operator==(SymEdge) const { return true; }
1.185 - /// Inequality operator
1.186 -
1.187 - /// \sa operator==(Node n)
1.188 - ///
1.189 - bool operator!=(SymEdge) const { return true; }
1.190 - ///Comparison operator.
1.191 -
1.192 - ///This is a strict ordering between the nodes.
1.193 - ///
1.194 - ///This ordering can be different from the order in which NodeIt
1.195 - ///goes through the nodes.
1.196 - ///\todo Possibly we don't need it.
1.197 - bool operator<(SymEdge) const { return true; }
1.198 - };
1.199 -
1.200 -
1.201 - /// The base type of the edge iterators.
1.202 -
1.203 - /// The base type of the edge iterators.
1.204 - ///
1.205 - class Edge : public SymEdge {
1.206 - public:
1.207 - /// Default constructor
1.208 -
1.209 - /// @warning The default constructor sets the iterator
1.210 - /// to an undefined value.
1.211 - Edge() { }
1.212 - /// Copy constructor.
1.213 -
1.214 - /// Copy constructor.
1.215 - ///
1.216 - Edge(const Edge&) { }
1.217 - /// Initialize the iterator to be invalid.
1.218 -
1.219 - /// Initialize the iterator to be invalid.
1.220 - ///
1.221 - Edge(Invalid) { }
1.222 - /// Equality operator
1.223 -
1.224 - /// Two iterators are equal if and only if they point to the
1.225 - /// same object or both are invalid.
1.226 - bool operator==(Edge) const { return true; }
1.227 - /// Inequality operator
1.228 -
1.229 - /// \sa operator==(Node n)
1.230 - ///
1.231 - bool operator!=(Edge) const { return true; }
1.232 - ///Comparison operator.
1.233 -
1.234 - ///This is a strict ordering between the nodes.
1.235 - ///
1.236 - ///This ordering can be different from the order in which NodeIt
1.237 - ///goes through the nodes.
1.238 - ///\todo Possibly we don't need it.
1.239 - bool operator<(Edge) const { return true; }
1.240 - };
1.241 -
1.242 - /// This iterator goes trough the outgoing edges of a node.
1.243 -
1.244 - /// This iterator goes trough the \e outgoing edges of a certain node
1.245 - /// of a graph.
1.246 - /// Its usage is quite simple, for example you can count the number
1.247 - /// of outgoing edges of a node \c n
1.248 - /// in graph \c g of type \c Graph as follows.
1.249 - /// \code
1.250 - /// int count=0;
1.251 - /// for (Graph::OutEdgeIt e(g, n); e!=INVALID; ++e) ++count;
1.252 - /// \endcode
1.253 -
1.254 - class OutEdgeIt : public Edge {
1.255 - public:
1.256 - /// Default constructor
1.257 -
1.258 - /// @warning The default constructor sets the iterator
1.259 - /// to an undefined value.
1.260 - OutEdgeIt() { }
1.261 - /// Copy constructor.
1.262 -
1.263 - /// Copy constructor.
1.264 - ///
1.265 - OutEdgeIt(const OutEdgeIt&) { }
1.266 - /// Initialize the iterator to be invalid.
1.267 -
1.268 - /// Initialize the iterator to be invalid.
1.269 - ///
1.270 - OutEdgeIt(Invalid) { }
1.271 - /// This constructor sets the iterator to first outgoing edge.
1.272 -
1.273 - /// This constructor set the iterator to the first outgoing edge of
1.274 - /// node
1.275 - ///@param n the node
1.276 - ///@param g the graph
1.277 - OutEdgeIt(const StaticSymGraph& g, const Node& n) { }
1.278 - /// Edge -> OutEdgeIt conversion
1.279 -
1.280 - /// Sets the iterator to the value of the trivial iterator \c e.
1.281 - /// This feature necessitates that each time we
1.282 - /// iterate the edge-set, the iteration order is the same.
1.283 - OutEdgeIt(const StaticSymGraph& g, const Edge& e) { }
1.284 - ///Next outgoing edge
1.285 -
1.286 - /// Assign the iterator to the next
1.287 - /// outgoing edge of the corresponding node.
1.288 - OutEdgeIt& operator++() { return *this; }
1.289 - };
1.290 -
1.291 - /// This iterator goes trough the incoming edges of a node.
1.292 -
1.293 - /// This iterator goes trough the \e incoming edges of a certain node
1.294 - /// of a graph.
1.295 - /// Its usage is quite simple, for example you can count the number
1.296 - /// of outgoing edges of a node \c n
1.297 - /// in graph \c g of type \c Graph as follows.
1.298 - /// \code
1.299 - /// int count=0;
1.300 - /// for(Graph::InEdgeIt e(g, n); e!=INVALID; ++e) ++count;
1.301 - /// \endcode
1.302 -
1.303 - class InEdgeIt : public Edge {
1.304 - public:
1.305 - /// Default constructor
1.306 -
1.307 - /// @warning The default constructor sets the iterator
1.308 - /// to an undefined value.
1.309 - InEdgeIt() { }
1.310 - /// Copy constructor.
1.311 -
1.312 - /// Copy constructor.
1.313 - ///
1.314 - InEdgeIt(const InEdgeIt&) { }
1.315 - /// Initialize the iterator to be invalid.
1.316 -
1.317 - /// Initialize the iterator to be invalid.
1.318 - ///
1.319 - InEdgeIt(Invalid) { }
1.320 - /// This constructor sets the iterator to first incoming edge.
1.321 -
1.322 - /// This constructor set the iterator to the first incoming edge of
1.323 - /// node
1.324 - ///@param n the node
1.325 - ///@param g the graph
1.326 - InEdgeIt(const StaticSymGraph& g, const Node& n) { }
1.327 - /// Edge -> InEdgeIt conversion
1.328 -
1.329 - /// Sets the iterator to the value of the trivial iterator \c e.
1.330 - /// This feature necessitates that each time we
1.331 - /// iterate the edge-set, the iteration order is the same.
1.332 - InEdgeIt(const StaticSymGraph& g, const Edge& n) { }
1.333 - /// Next incoming edge
1.334 -
1.335 - /// Assign the iterator to the next inedge of the corresponding node.
1.336 - ///
1.337 - InEdgeIt& operator++() { return *this; }
1.338 - };
1.339 - /// This iterator goes through each symmetric edge.
1.340 -
1.341 - /// This iterator goes through each symmetric edge of a graph.
1.342 - /// Its usage is quite simple, for example you can count the number
1.343 - /// of symmetric edges in a graph \c g of type \c Graph as follows:
1.344 - /// \code
1.345 - /// int count=0;
1.346 - /// for(Graph::SymEdgeIt e(g); e!=INVALID; ++e) ++count;
1.347 - /// \endcode
1.348 - class SymEdgeIt : public SymEdge {
1.349 - public:
1.350 - /// Default constructor
1.351 -
1.352 - /// @warning The default constructor sets the iterator
1.353 - /// to an undefined value.
1.354 - SymEdgeIt() { }
1.355 - /// Copy constructor.
1.356 -
1.357 - /// Copy constructor.
1.358 - ///
1.359 - SymEdgeIt(const SymEdgeIt&) { }
1.360 - /// Initialize the iterator to be invalid.
1.361 -
1.362 - /// Initialize the iterator to be invalid.
1.363 - ///
1.364 - SymEdgeIt(Invalid) { }
1.365 - /// This constructor sets the iterator to first edge.
1.366 -
1.367 - /// This constructor set the iterator to the first edge of
1.368 - /// node
1.369 - ///@param g the graph
1.370 - SymEdgeIt(const StaticSymGraph& g) { }
1.371 - /// Edge -> EdgeIt conversion
1.372 -
1.373 - /// Sets the iterator to the value of the trivial iterator \c e.
1.374 - /// This feature necessitates that each time we
1.375 - /// iterate the edge-set, the iteration order is the same.
1.376 - SymEdgeIt(const StaticSymGraph&, const SymEdge&) { }
1.377 - ///Next edge
1.378 -
1.379 - /// Assign the iterator to the next
1.380 - /// edge of the corresponding node.
1.381 - SymEdgeIt& operator++() { return *this; }
1.382 - };
1.383 - /// This iterator goes through each edge.
1.384 -
1.385 - /// This iterator goes through each edge of a graph.
1.386 - /// Its usage is quite simple, for example you can count the number
1.387 - /// of edges in a graph \c g of type \c Graph as follows:
1.388 - /// \code
1.389 - /// int count=0;
1.390 - /// for(Graph::EdgeIt e(g); e!=INVALID; ++e) ++count;
1.391 - /// \endcode
1.392 - class EdgeIt : public Edge {
1.393 - public:
1.394 - /// Default constructor
1.395 -
1.396 - /// @warning The default constructor sets the iterator
1.397 - /// to an undefined value.
1.398 - EdgeIt() { }
1.399 - /// Copy constructor.
1.400 -
1.401 - /// Copy constructor.
1.402 - ///
1.403 - EdgeIt(const EdgeIt&) { }
1.404 - /// Initialize the iterator to be invalid.
1.405 -
1.406 - /// Initialize the iterator to be invalid.
1.407 - ///
1.408 - EdgeIt(Invalid) { }
1.409 - /// This constructor sets the iterator to first edge.
1.410 -
1.411 - /// This constructor set the iterator to the first edge of
1.412 - /// node
1.413 - ///@param g the graph
1.414 - EdgeIt(const StaticSymGraph& g) { }
1.415 - /// Edge -> EdgeIt conversion
1.416 -
1.417 - /// Sets the iterator to the value of the trivial iterator \c e.
1.418 - /// This feature necessitates that each time we
1.419 - /// iterate the edge-set, the iteration order is the same.
1.420 - EdgeIt(const StaticSymGraph&, const Edge&) { }
1.421 - ///Next edge
1.422 -
1.423 - /// Assign the iterator to the next
1.424 - /// edge of the corresponding node.
1.425 - EdgeIt& operator++() { return *this; }
1.426 - };
1.427 -
1.428 - /// First node of the graph.
1.429 -
1.430 - /// \retval i the first node.
1.431 - /// \return the first node.
1.432 - ///
1.433 - NodeIt& first(NodeIt& i) const { return i; }
1.434 -
1.435 - /// The first incoming edge.
1.436 -
1.437 - /// The first incoming edge.
1.438 - ///
1.439 - InEdgeIt& first(InEdgeIt &i, Node) const { return i; }
1.440 - /// The first outgoing edge.
1.441 -
1.442 - /// The first outgoing edge.
1.443 - ///
1.444 - OutEdgeIt& first(OutEdgeIt& i, Node) const { return i; }
1.445 - /// The first edge of the Graph.
1.446 -
1.447 - /// The first edge of the Graph.
1.448 - ///
1.449 - EdgeIt& first(EdgeIt& i) const { return i; }
1.450 - /// The first symmetric edge of the Graph.
1.451 -
1.452 - /// The first symmetric edge of the Graph.
1.453 - ///
1.454 - SymEdgeIt& first(SymEdgeIt& i) const { return i; }
1.455 -
1.456 - ///Gives back the head node of an edge.
1.457 -
1.458 - ///Gives back the head node of an edge.
1.459 - ///
1.460 - Node head(Edge) const { return INVALID; }
1.461 - ///Gives back the tail node of an edge.
1.462 -
1.463 - ///Gives back the tail node of an edge.
1.464 - ///
1.465 - Node tail(Edge) const { return INVALID; }
1.466 -
1.467 - ///Gives back the first node of an symmetric edge.
1.468 -
1.469 - ///Gives back the first node of an symmetric edge.
1.470 - ///
1.471 - Node head(SymEdge) const { return INVALID; }
1.472 - ///Gives back the second node of an symmetric edge.
1.473 -
1.474 - ///Gives back the second node of an symmetric edge.
1.475 - ///
1.476 - Node tail(SymEdge) const { return INVALID; }
1.477 - ///Gives back the \e id of a node.
1.478 -
1.479 - ///\warning Not all graph structures provide this feature.
1.480 - ///
1.481 - ///\todo Should each graph provide \c id?
1.482 - int id(const Node&) const { return 0; }
1.483 - ///Gives back the \e id of an edge.
1.484 -
1.485 - ///\warning Not all graph structures provide this feature.
1.486 - ///
1.487 - ///\todo Should each graph provide \c id?
1.488 - int id(const Edge&) const { return 0; }
1.489 -
1.490 - ///\warning Not all graph structures provide this feature.
1.491 - ///
1.492 - ///\todo Should each graph provide \c id?
1.493 - int id(const SymEdge&) const { return 0; }
1.494 -
1.495 - ///\e
1.496 -
1.497 - ///\todo Should it be in the concept?
1.498 - ///
1.499 - int nodeNum() const { return 0; }
1.500 - ///\e
1.501 -
1.502 - ///\todo Should it be in the concept?
1.503 - ///
1.504 - int edgeNum() const { return 0; }
1.505 -
1.506 - ///\todo Should it be in the concept?
1.507 - ///
1.508 - int symEdgeNum() const { return 0; }
1.509 -
1.510 -
1.511 - /// Gives back the forward directed edge of the symmetric edge.
1.512 - Edge forward(SymEdge) const {return INVALID;}
1.513 -
1.514 - /// Gives back the backward directed edge of the symmetric edge.
1.515 - Edge backward(SymEdge) const {return INVALID;};
1.516 -
1.517 - /// Gives back the opposite of the edge.
1.518 - Edge opposite(Edge) const {return INVALID;}
1.519 -
1.520 - ///Reference map of the nodes to type \c T.
1.521 - /// \ingroup skeletons
1.522 - ///Reference map of the nodes to type \c T.
1.523 - /// \sa Reference
1.524 - /// \warning Making maps that can handle bool type (NodeMap<bool>)
1.525 - /// needs some extra attention!
1.526 - template<class T> class NodeMap : public ReferenceMap< Node, T >
1.527 - {
1.528 - public:
1.529 -
1.530 - ///\e
1.531 - NodeMap(const StaticSymGraph&) { }
1.532 - ///\e
1.533 - NodeMap(const StaticSymGraph&, T) { }
1.534 -
1.535 - ///Copy constructor
1.536 - template<typename TT> NodeMap(const NodeMap<TT>&) { }
1.537 - ///Assignment operator
1.538 - template<typename TT> NodeMap& operator=(const NodeMap<TT>&)
1.539 - { return *this; }
1.540 - };
1.541 -
1.542 - ///Reference map of the edges to type \c T.
1.543 -
1.544 - /// \ingroup skeletons
1.545 - ///Reference map of the edges to type \c T.
1.546 - /// \sa Reference
1.547 - /// \warning Making maps that can handle bool type (EdgeMap<bool>)
1.548 - /// needs some extra attention!
1.549 - template<class T> class EdgeMap
1.550 - : public ReferenceMap<Edge,T>
1.551 - {
1.552 - public:
1.553 -
1.554 - ///\e
1.555 - EdgeMap(const StaticSymGraph&) { }
1.556 - ///\e
1.557 - EdgeMap(const StaticSymGraph&, T) { }
1.558 -
1.559 - ///Copy constructor
1.560 - template<typename TT> EdgeMap(const EdgeMap<TT>&) { }
1.561 - ///Assignment operator
1.562 - template<typename TT> EdgeMap &operator=(const EdgeMap<TT>&)
1.563 - { return *this; }
1.564 - };
1.565 -
1.566 - ///Reference map of the edges to type \c T.
1.567 -
1.568 - /// \ingroup skeletons
1.569 - ///Reference map of the symmetric edges to type \c T.
1.570 - /// \sa Reference
1.571 - /// \warning Making maps that can handle bool type (EdgeMap<bool>)
1.572 - /// needs some extra attention!
1.573 - template<class T> class SymEdgeMap
1.574 - : public ReferenceMap<SymEdge,T>
1.575 - {
1.576 - public:
1.577 -
1.578 - ///\e
1.579 - SymEdgeMap(const StaticSymGraph&) { }
1.580 - ///\e
1.581 - SymEdgeMap(const StaticSymGraph&, T) { }
1.582 -
1.583 - ///Copy constructor
1.584 - template<typename TT> SymEdgeMap(const SymEdgeMap<TT>&) { }
1.585 - ///Assignment operator
1.586 - template<typename TT> SymEdgeMap &operator=(const SymEdgeMap<TT>&)
1.587 - { return *this; }
1.588 - };
1.589 - };
1.590 -
1.591 -
1.592 -
1.593 - /// An empty non-static graph class.
1.594 -
1.595 - /// This class provides everything that \ref StaticGraph
1.596 - /// with additional functionality which enables to build a
1.597 - /// graph from scratch.
1.598 - class ExtendableSymGraph : public StaticSymGraph
1.599 - {
1.600 - public:
1.601 - /// Defalult constructor.
1.602 -
1.603 - /// Defalult constructor.
1.604 - ///
1.605 - ExtendableSymGraph() { }
1.606 - ///Add a new node to the graph.
1.607 -
1.608 - /// \return the new node.
1.609 - ///
1.610 - Node addNode() { return INVALID; }
1.611 - ///Add a new edge to the graph.
1.612 -
1.613 - ///Add a new symmetric edge to the graph with tail node \c t
1.614 - ///and head node \c h.
1.615 - ///\return the new edge.
1.616 - SymEdge addEdge(Node h, Node t) { return INVALID; }
1.617 -
1.618 - /// Resets the graph.
1.619 -
1.620 - /// This function deletes all edges and nodes of the graph.
1.621 - /// It also frees the memory allocated to store them.
1.622 - /// \todo It might belong to \ref ErasableGraph.
1.623 - void clear() { }
1.624 - };
1.625 -
1.626 - /// An empty erasable graph class.
1.627 -
1.628 - /// This class is an extension of \ref ExtendableGraph. It also makes it
1.629 - /// possible to erase edges or nodes.
1.630 - class ErasableSymGraph : public ExtendableSymGraph
1.631 - {
1.632 - public:
1.633 - /// Defalult constructor.
1.634 -
1.635 - /// Defalult constructor.
1.636 - ///
1.637 - ErasableSymGraph() { }
1.638 - /// Deletes a node.
1.639 -
1.640 - /// Deletes node \c n node.
1.641 - ///
1.642 - void erase(Node n) { }
1.643 - /// Deletes an edge.
1.644 -
1.645 - /// Deletes edge \c e edge.
1.646 - ///
1.647 - void erase(SymEdge e) { }
1.648 - };
1.649 -
1.650 - // @}
1.651 - } //namespace skeleton
1.652 -} //namespace lemon
1.653 -
1.654 -
1.655 -
1.656 -#endif // LEMON_SKELETON_GRAPH_H