Adding GraphEdgeSet and GraphNodeSet classes to graph_utils.h.
3 #ifndef LEMON_ERASABLE_GRAPH_EXTENDER_H
4 #define LEMON_ERASABLE_GRAPH_EXTENDER_H
6 #include <lemon/invalid.h>
11 template <typename _Base>
12 class ErasableGraphExtender : public _Base {
15 typedef ErasableGraphExtender Graph;
18 typedef typename Parent::Node Node;
19 typedef typename Parent::Edge Edge;
21 void erase(const Node& node) {
23 Parent::firstOut(edge, node);
24 while (edge != INVALID ) {
26 Parent::firstOut(edge, node);
29 Parent::firstIn(edge, node);
30 while (edge != INVALID ) {
32 Parent::firstIn(edge, node);
35 Parent::getNotifier(Node()).erase(node);
39 void erase(const Edge& edge) {
40 Parent::getNotifier(Edge()).erase(edge);
46 template <typename _Base>
47 class ErasableUndirGraphExtender : public _Base {
50 typedef ErasableUndirGraphExtender Graph;
53 typedef typename Parent::Node Node;
54 typedef typename Parent::UndirEdge UndirEdge;
55 typedef typename Parent::Edge Edge;
57 void erase(const Node& node) {
59 Parent::firstOut(edge, node);
60 while (edge != INVALID ) {
62 Parent::firstOut(edge, node);
65 Parent::getNotifier(Node()).erase(node);
69 void erase(const UndirEdge& uedge) {
70 Parent::getNotifier(Edge()).erase(Edge(uedge,true));
71 Parent::getNotifier(Edge()).erase(Edge(uedge,false));
72 Parent::getNotifier(UndirEdge()).erase(uedge);