27 |
27 |
28 namespace lemon { |
28 namespace lemon { |
29 template <typename _Graph, typename _Item> |
29 template <typename _Graph, typename _Item> |
30 class ItemSetTraits {}; |
30 class ItemSetTraits {}; |
31 |
31 |
|
32 |
|
33 template <typename Graph, typename Enable = void> |
|
34 struct NodeNotifierIndicator { |
|
35 typedef InvalidType Type; |
|
36 }; |
|
37 template <typename Graph> |
|
38 struct NodeNotifierIndicator< |
|
39 Graph, |
|
40 typename enable_if<typename Graph::NodeNotifier::Notifier, void>::type |
|
41 > { |
|
42 typedef typename Graph::NodeNotifier Type; |
|
43 }; |
|
44 |
32 template <typename _Graph> |
45 template <typename _Graph> |
33 class ItemSetTraits<_Graph, typename _Graph::Node> { |
46 class ItemSetTraits<_Graph, typename _Graph::Node> { |
34 public: |
47 public: |
35 |
48 |
36 typedef _Graph Graph; |
49 typedef _Graph Graph; |
37 |
50 |
38 typedef typename Graph::Node Item; |
51 typedef typename Graph::Node Item; |
39 typedef typename Graph::NodeIt ItemIt; |
52 typedef typename Graph::NodeIt ItemIt; |
40 |
53 |
|
54 typedef typename NodeNotifierIndicator<Graph>::Type ItemNotifier; |
|
55 |
41 template <typename _Value> |
56 template <typename _Value> |
42 class Map : public Graph::template NodeMap<_Value> { |
57 class Map : public Graph::template NodeMap<_Value> { |
43 public: |
58 public: |
44 typedef typename Graph::template NodeMap<_Value> Parent; |
59 typedef typename Graph::template NodeMap<_Value> Parent; |
45 typedef typename Parent::Value Value; |
60 typedef typename Parent::Value Value; |
46 |
61 |
47 Map(const Graph& _graph) : Parent(_graph) {} |
62 Map(const Graph& _graph) : Parent(_graph) {} |
48 Map(const Graph& _graph, const Value& _value) |
63 Map(const Graph& _graph, const Value& _value) |
49 : Parent(_graph, _value) {} |
64 : Parent(_graph, _value) {} |
50 }; |
65 |
51 |
66 }; |
|
67 |
|
68 }; |
|
69 |
|
70 template <typename Graph, typename Enable = void> |
|
71 struct EdgeNotifierIndicator { |
|
72 typedef InvalidType Type; |
|
73 }; |
|
74 template <typename Graph> |
|
75 struct EdgeNotifierIndicator< |
|
76 Graph, |
|
77 typename enable_if<typename Graph::EdgeNotifier::Notifier, void>::type |
|
78 > { |
|
79 typedef typename Graph::EdgeNotifier Type; |
52 }; |
80 }; |
53 |
81 |
54 template <typename _Graph> |
82 template <typename _Graph> |
55 class ItemSetTraits<_Graph, typename _Graph::Edge> { |
83 class ItemSetTraits<_Graph, typename _Graph::Edge> { |
56 public: |
84 public: |
58 typedef _Graph Graph; |
86 typedef _Graph Graph; |
59 |
87 |
60 typedef typename Graph::Edge Item; |
88 typedef typename Graph::Edge Item; |
61 typedef typename Graph::EdgeIt ItemIt; |
89 typedef typename Graph::EdgeIt ItemIt; |
62 |
90 |
|
91 typedef typename EdgeNotifierIndicator<Graph>::Type ItemNotifier; |
|
92 |
63 template <typename _Value> |
93 template <typename _Value> |
64 class Map : public Graph::template EdgeMap<_Value> { |
94 class Map : public Graph::template EdgeMap<_Value> { |
65 public: |
95 public: |
66 typedef typename Graph::template EdgeMap<_Value> Parent; |
96 typedef typename Graph::template EdgeMap<_Value> Parent; |
67 typedef typename Parent::Value Value; |
97 typedef typename Parent::Value Value; |
69 Map(const Graph& _graph) : Parent(_graph) {} |
99 Map(const Graph& _graph) : Parent(_graph) {} |
70 Map(const Graph& _graph, const Value& _value) |
100 Map(const Graph& _graph, const Value& _value) |
71 : Parent(_graph, _value) {} |
101 : Parent(_graph, _value) {} |
72 }; |
102 }; |
73 |
103 |
|
104 }; |
|
105 |
|
106 template <typename Graph, typename Enable = void> |
|
107 struct UEdgeNotifierIndicator { |
|
108 typedef InvalidType Type; |
|
109 }; |
|
110 template <typename Graph> |
|
111 struct UEdgeNotifierIndicator< |
|
112 Graph, |
|
113 typename enable_if<typename Graph::UEdgeNotifier::Notifier, void>::type |
|
114 > { |
|
115 typedef typename Graph::UEdgeNotifier Type; |
74 }; |
116 }; |
75 |
117 |
76 template <typename _Graph> |
118 template <typename _Graph> |
77 class ItemSetTraits<_Graph, typename _Graph::UEdge> { |
119 class ItemSetTraits<_Graph, typename _Graph::UEdge> { |
78 public: |
120 public: |
80 typedef _Graph Graph; |
122 typedef _Graph Graph; |
81 |
123 |
82 typedef typename Graph::UEdge Item; |
124 typedef typename Graph::UEdge Item; |
83 typedef typename Graph::UEdgeIt ItemIt; |
125 typedef typename Graph::UEdgeIt ItemIt; |
84 |
126 |
|
127 typedef typename UEdgeNotifierIndicator<Graph>::Type ItemNotifier; |
|
128 |
85 template <typename _Value> |
129 template <typename _Value> |
86 class Map : public Graph::template UEdgeMap<_Value> { |
130 class Map : public Graph::template UEdgeMap<_Value> { |
87 public: |
131 public: |
88 typedef typename Graph::template UEdgeMap<_Value> Parent; |
132 typedef typename Graph::template UEdgeMap<_Value> Parent; |
89 typedef typename Parent::Value Value; |
133 typedef typename Parent::Value Value; |
93 : Parent(_graph, _value) {} |
137 : Parent(_graph, _value) {} |
94 }; |
138 }; |
95 |
139 |
96 }; |
140 }; |
97 |
141 |
|
142 template <typename Graph, typename Enable = void> |
|
143 struct ANodeNotifierIndicator { |
|
144 typedef InvalidType Type; |
|
145 }; |
|
146 template <typename Graph> |
|
147 struct ANodeNotifierIndicator< |
|
148 Graph, |
|
149 typename enable_if<typename Graph::ANodeNotifier::Notifier, void>::type |
|
150 > { |
|
151 typedef typename Graph::ANodeNotifier Type; |
|
152 }; |
98 |
153 |
99 template <typename _Graph> |
154 template <typename _Graph> |
100 class ItemSetTraits<_Graph, typename _Graph::ANode> { |
155 class ItemSetTraits<_Graph, typename _Graph::ANode> { |
101 public: |
156 public: |
102 |
157 |
103 typedef _Graph Graph; |
158 typedef _Graph Graph; |
104 |
159 |
105 typedef typename Graph::ANode Item; |
160 typedef typename Graph::ANode Item; |
106 typedef typename Graph::ANodeIt ItemIt; |
161 typedef typename Graph::ANodeIt ItemIt; |
107 |
162 |
|
163 typedef typename ANodeNotifierIndicator<Graph>::Type ItemNotifier; |
|
164 |
108 template <typename _Value> |
165 template <typename _Value> |
109 class Map : public Graph::template ANodeMap<_Value> { |
166 class Map : public Graph::template ANodeMap<_Value> { |
110 public: |
167 public: |
111 typedef typename Graph::template ANodeMap<_Value> Parent; |
168 typedef typename Graph::template ANodeMap<_Value> Parent; |
112 typedef typename Parent::Value Value; |
169 typedef typename Parent::Value Value; |
114 Map(const Graph& _graph) : Parent(_graph) {} |
171 Map(const Graph& _graph) : Parent(_graph) {} |
115 Map(const Graph& _graph, const Value& _value) |
172 Map(const Graph& _graph, const Value& _value) |
116 : Parent(_graph, _value) {} |
173 : Parent(_graph, _value) {} |
117 }; |
174 }; |
118 |
175 |
|
176 }; |
|
177 |
|
178 template <typename Graph, typename Enable = void> |
|
179 struct BNodeNotifierIndicator { |
|
180 typedef InvalidType Type; |
|
181 }; |
|
182 template <typename Graph> |
|
183 struct BNodeNotifierIndicator< |
|
184 Graph, |
|
185 typename enable_if<typename Graph::BNodeNotifier::Notifier, void>::type |
|
186 > { |
|
187 typedef typename Graph::BNodeNotifier Type; |
119 }; |
188 }; |
120 |
189 |
121 template <typename _Graph> |
190 template <typename _Graph> |
122 class ItemSetTraits<_Graph, typename _Graph::BNode> { |
191 class ItemSetTraits<_Graph, typename _Graph::BNode> { |
123 public: |
192 public: |
124 |
193 |
125 typedef _Graph Graph; |
194 typedef _Graph Graph; |
126 |
195 |
127 typedef typename Graph::BNode Item; |
196 typedef typename Graph::BNode Item; |
128 typedef typename Graph::BNodeIt ItemIt; |
197 typedef typename Graph::BNodeIt ItemIt; |
|
198 |
|
199 typedef typename BNodeNotifierIndicator<Graph>::Type ItemNotifier; |
129 |
200 |
130 template <typename _Value> |
201 template <typename _Value> |
131 class Map : public Graph::template BNodeMap<_Value> { |
202 class Map : public Graph::template BNodeMap<_Value> { |
132 public: |
203 public: |
133 typedef typename Graph::template BNodeMap<_Value> Parent; |
204 typedef typename Graph::template BNodeMap<_Value> Parent; |