klao@946: // -*- c++ -*- klao@946: klao@946: #ifndef LEMON_ERASABLE_GRAPH_EXTENDER_H klao@946: #define LEMON_ERASABLE_GRAPH_EXTENDER_H klao@946: klao@946: #include klao@946: klao@946: klao@946: namespace lemon { klao@946: klao@946: template klao@946: class ErasableGraphExtender : public _Base { klao@946: public: klao@946: klao@946: typedef ErasableGraphExtender Graph; klao@946: typedef _Base Parent; klao@946: klao@946: typedef typename Parent::Node Node; klao@946: typedef typename Parent::Edge Edge; klao@946: klao@946: void erase(const Node& node) { klao@946: Edge edge; klao@946: Parent::firstOut(edge, node); klao@946: while (edge != INVALID ) { klao@946: erase(edge); klao@946: Parent::firstOut(edge, node); klao@946: } klao@946: klao@946: Parent::firstIn(edge, node); klao@946: while (edge != INVALID ) { klao@946: erase(edge); klao@946: Parent::firstIn(edge, node); klao@946: } klao@946: klao@946: Parent::getNodeObserverRegistry().erase(node); klao@946: Parent::erase(node); klao@946: } klao@946: klao@946: void erase(const Edge& edge) { klao@946: Parent::getEdgeObserverRegistry().erase(edge); klao@946: Parent::erase(edge); klao@946: } klao@946: klao@946: }; klao@946: klao@946: } klao@946: klao@946: #endif