diff -r d8475431bbbb -r 8e85e6bbefdf lemon/bits/erasable_graph_extender.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lemon/bits/erasable_graph_extender.h Mon May 23 04:48:14 2005 +0000 @@ -0,0 +1,84 @@ +// -*- c++ -*- + +#ifndef LEMON_ERASABLE_GRAPH_EXTENDER_H +#define LEMON_ERASABLE_GRAPH_EXTENDER_H + +#include + +#include + + +namespace lemon { + + template + class ErasableGraphExtender : public _Base { + public: + + typedef ErasableGraphExtender Graph; + typedef _Base Parent; + + typedef typename Parent::Node Node; + typedef typename Parent::Edge Edge; + + void erase(const Node& node) { + Edge edge; + Parent::firstOut(edge, node); + while (edge != INVALID ) { + erase(edge); + Parent::firstOut(edge, node); + } + + Parent::firstIn(edge, node); + while (edge != INVALID ) { + erase(edge); + Parent::firstIn(edge, node); + } + + Parent::getNotifier(Node()).erase(node); + Parent::erase(node); + } + + void erase(const Edge& edge) { + Parent::getNotifier(Edge()).erase(edge); + Parent::erase(edge); + } + + }; + + template + class ErasableUndirGraphExtender : public _Base { + public: + + typedef ErasableUndirGraphExtender Graph; + typedef _Base Parent; + + typedef typename Parent::Node Node; + typedef typename Parent::UndirEdge UndirEdge; + typedef typename Parent::Edge Edge; + + void erase(const Node& node) { + Edge edge; + Parent::firstOut(edge, node); + while (edge != INVALID ) { + erase(edge); + Parent::firstOut(edge, node); + } + + Parent::getNotifier(Node()).erase(node); + Parent::erase(node); + } + + void erase(const UndirEdge& uedge) { + std::vector edges; + edges.push_back(Edge(uedge,true)); + edges.push_back(Edge(uedge,false)); + Parent::getNotifier(Edge()).erase(edges); + Parent::getNotifier(UndirEdge()).erase(uedge); + Parent::erase(uedge); + } + + }; + +} + +#endif