3 #ifndef LEMON_EXTENDABLE_GRAPH_EXTENDER_H
4 #define LEMON_EXTENDABLE_GRAPH_EXTENDER_H
8 template <typename _Base>
9 class ExtendableGraphExtender : public _Base {
12 typedef ExtendableGraphExtender Graph;
15 typedef typename Parent::Node Node;
16 typedef typename Parent::Edge Edge;
19 Node node = Parent::addNode();
20 Parent::getNotifier(Node()).add(node);
24 Edge addEdge(const Node& from, const Node& to) {
25 Edge edge = Parent::addEdge(from, to);
26 Parent::getNotifier(Edge()).add(edge);
32 template <typename _Base>
33 class ExtendableUndirGraphExtender : public _Base {
36 typedef ExtendableUndirGraphExtender Graph;
39 typedef typename Parent::Node Node;
40 typedef typename Parent::Edge Edge;
41 typedef typename Parent::UndirEdge UndirEdge;
44 Node node = Parent::addNode();
45 Parent::getNotifier(Node()).add(node);
49 UndirEdge addEdge(const Node& from, const Node& to) {
50 UndirEdge uedge = Parent::addEdge(from, to);
51 Parent::getNotifier(UndirEdge()).add(uedge);
53 std::vector<Edge> edges;
54 edges.push_back(Parent::direct(uedge, true));
55 edges.push_back(Parent::direct(uedge, false));
56 Parent::getNotifier(Edge()).add(edges);
64 template <typename _Base>
65 class ExtendableUndirBipartiteGraphExtender : public _Base {
69 typedef ExtendableUndirBipartiteGraphExtender Graph;
71 typedef typename Parent::Node Node;
72 typedef typename Parent::LowerNode LowerNode;
73 typedef typename Parent::UpperNode UpperNode;
74 typedef typename Parent::Edge Edge;
75 typedef typename Parent::UndirEdge UndirEdge;
78 Node node = Parent::addUpperNode();
79 Parent::getNotifier(UpperNode()).add(node);
80 Parent::getNotifier(Node()).add(node);
85 Node node = Parent::addLowerNode();
86 Parent::getNotifier(LowerNode()).add(node);
87 Parent::getNotifier(Node()).add(node);
91 UndirEdge addEdge(const Node& source, const Node& target) {
92 UndirEdge undiredge = Parent::addEdge(source, target);
93 Parent::getNotifier(UndirEdge()).add(undiredge);
95 std::vector<Edge> edges;
96 edges.push_back(Parent::direct(undiredge, true));
97 edges.push_back(Parent::direct(undiredge, false));
98 Parent::getNotifier(Edge()).add(edges);