3 * This file is a part of LEMON, a generic C++ optimization library
5 * Copyright (C) 2003-2006
6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
7 * (Egervary Research Group on Combinatorial Optimization, EGRES).
9 * Permission to use, modify and distribute this software is granted
10 * provided that this copyright notice appears in all copies. For
11 * precise terms see the accompanying LICENSE file.
13 * This software is provided "AS IS" with no warranty of any kind,
14 * express or implied, and with no claim as to its suitability for any
19 #ifndef LEMON_CLEARABLE_GRAPH_EXTENDER_H
20 #define LEMON_CLEARABLE_GRAPH_EXTENDER_H
22 #include <lemon/invalid.h>
27 template <typename _Base>
28 class ClearableGraphExtender : public _Base {
31 typedef ClearableGraphExtender Graph;
33 typedef typename Parent::Node Node;
34 typedef typename Parent::Edge Edge;
37 Parent::getNotifier(Node()).clear();
38 Parent::getNotifier(Edge()).clear();
44 template <typename _Base>
45 class ClearableEdgeSetExtender : public _Base {
48 typedef ClearableEdgeSetExtender Graph;
50 typedef typename Parent::Node Node;
51 typedef typename Parent::Edge Edge;
54 Parent::getNotifier(Edge()).clear();
60 template <typename _Base>
61 class ClearableUGraphExtender : public _Base {
64 typedef ClearableUGraphExtender Graph;
66 typedef typename Parent::Node Node;
67 typedef typename Parent::UEdge UEdge;
68 typedef typename Parent::Edge Edge;
71 Parent::getNotifier(Node()).clear();
72 Parent::getNotifier(UEdge()).clear();
73 Parent::getNotifier(Edge()).clear();
78 template <typename _Base>
79 class ClearableUEdgeSetExtender : public _Base {
82 typedef ClearableUEdgeSetExtender Graph;
84 typedef typename Parent::Node Node;
85 typedef typename Parent::UEdge UEdge;
86 typedef typename Parent::Edge Edge;
89 Parent::getNotifier(UEdge()).clear();
90 Parent::getNotifier(Edge()).clear();
97 template <typename _Base>
98 class ClearableBpUGraphExtender : public _Base {
101 typedef _Base Parent;
102 typedef ClearableBpUGraphExtender Graph;
104 typedef typename Parent::Node Node;
105 typedef typename Parent::BNode BNode;
106 typedef typename Parent::ANode ANode;
107 typedef typename Parent::Edge Edge;
108 typedef typename Parent::UEdge UEdge;
111 Parent::getNotifier(Edge()).clear();
112 Parent::getNotifier(UEdge()).clear();
113 Parent::getNotifier(Node()).clear();
114 Parent::getNotifier(BNode()).clear();
115 Parent::getNotifier(ANode()).clear();