COIN-OR::LEMON - Graph Library

source: lemon-0.x/src/lemon/erasable_graph_extender.h @ 1304:c9c2e90b2342

Last change on this file since 1304:c9c2e90b2342 was 1039:bd01c5a3f989, checked in by Balazs Dezso, 19 years ago

AlterationObserverRegistry? -> AlterationNotifier?
2 step

File size: 1.7 KB
Line 
1// -*- c++ -*-
2
3#ifndef LEMON_ERASABLE_GRAPH_EXTENDER_H
4#define LEMON_ERASABLE_GRAPH_EXTENDER_H
5
6#include <lemon/invalid.h>
7
8
9namespace lemon {
10
11  template <typename _Base>
12  class ErasableGraphExtender : public _Base {
13  public:
14
15    typedef ErasableGraphExtender Graph;
16    typedef _Base Parent;
17
18    typedef typename Parent::Node Node;
19    typedef typename Parent::Edge Edge;
20
21    void erase(const Node& node) {
22      Edge edge;
23      Parent::firstOut(edge, node);
24      while (edge != INVALID ) {
25        erase(edge);
26        Parent::firstOut(edge, node);
27      }
28
29      Parent::firstIn(edge, node);
30      while (edge != INVALID ) {
31        erase(edge);
32        Parent::firstIn(edge, node);
33      }
34
35      Parent::getNotifier(Node()).erase(node);
36      Parent::erase(node);
37    }
38   
39    void erase(const Edge& edge) {
40      Parent::getNotifier(Edge()).erase(edge);
41      Parent::erase(edge);
42    }
43
44  };
45
46  template <typename _Base>
47  class ErasableUndirGraphExtender : public _Base {
48  public:
49
50    typedef ErasableUndirGraphExtender Graph;
51    typedef _Base Parent;
52
53    typedef typename Parent::Node Node;
54    typedef typename Parent::UndirEdge UndirEdge;
55    typedef typename Parent::Edge Edge;
56
57    void erase(const Node& node) {
58      Edge edge;
59      Parent::firstOut(edge, node);
60      while (edge != INVALID ) {
61        erase(edge);
62        Parent::firstOut(edge, node);
63      }
64
65      Parent::getNotifier(Node()).erase(node);
66      Parent::erase(node);
67    }
68   
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);
73      Parent::erase(uedge);
74    }
75
76  };
77
78}
79
80#endif
Note: See TracBrowser for help on using the repository browser.