]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // Boost.Signals library |
2 | ||
3 | // Copyright Douglas Gregor 2001-2006. Use, modification and | |
4 | // distribution is subject to the Boost Software License, Version | |
5 | // 1.0. (See accompanying file LICENSE_1_0.txt or copy at | |
6 | // http://www.boost.org/LICENSE_1_0.txt) | |
7 | ||
8 | // For more information, see http://www.boost.org/libs/signals | |
9 | ||
10 | #ifndef BOOST_SIGNAL_HPP | |
11 | #define BOOST_SIGNAL_HPP | |
12 | ||
13 | #ifndef BOOST_SIGNALS_NO_DEPRECATION_WARNING | |
14 | # if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__) | |
15 | # pragma message ("Warning: Boost.Signals is no longer being maintained and is now deprecated. Please switch to Boost.Signals2. To disable this warning message, define BOOST_SIGNALS_NO_DEPRECATION_WARNING.") | |
16 | # elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__) | |
17 | # warning "Boost.Signals is no longer being maintained and is now deprecated. Please switch to Boost.Signals2. To disable this warning message, define BOOST_SIGNALS_NO_DEPRECATION_WARNING." | |
18 | # endif | |
19 | #endif | |
20 | ||
21 | #ifndef BOOST_SIGNALS_MAX_ARGS | |
22 | # define BOOST_SIGNALS_MAX_ARGS 10 | |
23 | #endif | |
24 | ||
25 | #include <boost/config.hpp> | |
26 | #include <boost/type_traits/function_traits.hpp> | |
27 | #include <boost/signals/signal0.hpp> | |
28 | #include <boost/signals/signal1.hpp> | |
29 | #include <boost/signals/signal2.hpp> | |
30 | #include <boost/signals/signal3.hpp> | |
31 | #include <boost/signals/signal4.hpp> | |
32 | #include <boost/signals/signal5.hpp> | |
33 | #include <boost/signals/signal6.hpp> | |
34 | #include <boost/signals/signal7.hpp> | |
35 | #include <boost/signals/signal8.hpp> | |
36 | #include <boost/signals/signal9.hpp> | |
37 | #include <boost/signals/signal10.hpp> | |
38 | #include <boost/function.hpp> | |
39 | ||
40 | #ifdef BOOST_HAS_ABI_HEADERS | |
41 | # include BOOST_ABI_PREFIX | |
42 | #endif | |
43 | ||
44 | namespace boost { | |
45 | #ifndef BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX | |
46 | namespace BOOST_SIGNALS_NAMESPACE { | |
47 | namespace detail { | |
48 | template<int Arity, | |
49 | typename Signature, | |
50 | typename Combiner, | |
51 | typename Group, | |
52 | typename GroupCompare, | |
53 | typename SlotFunction> | |
54 | class real_get_signal_impl; | |
55 | ||
56 | template<typename Signature, | |
57 | typename Combiner, | |
58 | typename Group, | |
59 | typename GroupCompare, | |
60 | typename SlotFunction> | |
61 | class real_get_signal_impl<0, Signature, Combiner, Group, GroupCompare, | |
62 | SlotFunction> | |
63 | { | |
64 | typedef function_traits<Signature> traits; | |
65 | ||
66 | public: | |
67 | typedef signal0<typename traits::result_type, | |
68 | Combiner, | |
69 | Group, | |
70 | GroupCompare, | |
71 | SlotFunction> type; | |
72 | }; | |
73 | ||
74 | template<typename Signature, | |
75 | typename Combiner, | |
76 | typename Group, | |
77 | typename GroupCompare, | |
78 | typename SlotFunction> | |
79 | class real_get_signal_impl<1, Signature, Combiner, Group, GroupCompare, | |
80 | SlotFunction> | |
81 | { | |
82 | typedef function_traits<Signature> traits; | |
83 | ||
84 | public: | |
85 | typedef signal1<typename traits::result_type, | |
86 | typename traits::arg1_type, | |
87 | Combiner, | |
88 | Group, | |
89 | GroupCompare, | |
90 | SlotFunction> type; | |
91 | }; | |
92 | ||
93 | template<typename Signature, | |
94 | typename Combiner, | |
95 | typename Group, | |
96 | typename GroupCompare, | |
97 | typename SlotFunction> | |
98 | class real_get_signal_impl<2, Signature, Combiner, Group, GroupCompare, | |
99 | SlotFunction> | |
100 | { | |
101 | typedef function_traits<Signature> traits; | |
102 | ||
103 | public: | |
104 | typedef signal2<typename traits::result_type, | |
105 | typename traits::arg1_type, | |
106 | typename traits::arg2_type, | |
107 | Combiner, | |
108 | Group, | |
109 | GroupCompare, | |
110 | SlotFunction> type; | |
111 | }; | |
112 | ||
113 | template<typename Signature, | |
114 | typename Combiner, | |
115 | typename Group, | |
116 | typename GroupCompare, | |
117 | typename SlotFunction> | |
118 | class real_get_signal_impl<3, Signature, Combiner, Group, GroupCompare, | |
119 | SlotFunction> | |
120 | { | |
121 | typedef function_traits<Signature> traits; | |
122 | ||
123 | public: | |
124 | typedef signal3<typename traits::result_type, | |
125 | typename traits::arg1_type, | |
126 | typename traits::arg2_type, | |
127 | typename traits::arg3_type, | |
128 | Combiner, | |
129 | Group, | |
130 | GroupCompare, | |
131 | SlotFunction> type; | |
132 | }; | |
133 | ||
134 | template<typename Signature, | |
135 | typename Combiner, | |
136 | typename Group, | |
137 | typename GroupCompare, | |
138 | typename SlotFunction> | |
139 | class real_get_signal_impl<4, Signature, Combiner, Group, GroupCompare, | |
140 | SlotFunction> | |
141 | { | |
142 | typedef function_traits<Signature> traits; | |
143 | ||
144 | public: | |
145 | typedef signal4<typename traits::result_type, | |
146 | typename traits::arg1_type, | |
147 | typename traits::arg2_type, | |
148 | typename traits::arg3_type, | |
149 | typename traits::arg4_type, | |
150 | Combiner, | |
151 | Group, | |
152 | GroupCompare, | |
153 | SlotFunction> type; | |
154 | }; | |
155 | ||
156 | template<typename Signature, | |
157 | typename Combiner, | |
158 | typename Group, | |
159 | typename GroupCompare, | |
160 | typename SlotFunction> | |
161 | class real_get_signal_impl<5, Signature, Combiner, Group, GroupCompare, | |
162 | SlotFunction> | |
163 | { | |
164 | typedef function_traits<Signature> traits; | |
165 | ||
166 | public: | |
167 | typedef signal5<typename traits::result_type, | |
168 | typename traits::arg1_type, | |
169 | typename traits::arg2_type, | |
170 | typename traits::arg3_type, | |
171 | typename traits::arg4_type, | |
172 | typename traits::arg5_type, | |
173 | Combiner, | |
174 | Group, | |
175 | GroupCompare, | |
176 | SlotFunction> type; | |
177 | }; | |
178 | ||
179 | template<typename Signature, | |
180 | typename Combiner, | |
181 | typename Group, | |
182 | typename GroupCompare, | |
183 | typename SlotFunction> | |
184 | class real_get_signal_impl<6, Signature, Combiner, Group, GroupCompare, | |
185 | SlotFunction> | |
186 | { | |
187 | typedef function_traits<Signature> traits; | |
188 | ||
189 | public: | |
190 | typedef signal6<typename traits::result_type, | |
191 | typename traits::arg1_type, | |
192 | typename traits::arg2_type, | |
193 | typename traits::arg3_type, | |
194 | typename traits::arg4_type, | |
195 | typename traits::arg5_type, | |
196 | typename traits::arg6_type, | |
197 | Combiner, | |
198 | Group, | |
199 | GroupCompare, | |
200 | SlotFunction> type; | |
201 | }; | |
202 | ||
203 | template<typename Signature, | |
204 | typename Combiner, | |
205 | typename Group, | |
206 | typename GroupCompare, | |
207 | typename SlotFunction> | |
208 | class real_get_signal_impl<7, Signature, Combiner, Group, GroupCompare, | |
209 | SlotFunction> | |
210 | { | |
211 | typedef function_traits<Signature> traits; | |
212 | ||
213 | public: | |
214 | typedef signal7<typename traits::result_type, | |
215 | typename traits::arg1_type, | |
216 | typename traits::arg2_type, | |
217 | typename traits::arg3_type, | |
218 | typename traits::arg4_type, | |
219 | typename traits::arg5_type, | |
220 | typename traits::arg6_type, | |
221 | typename traits::arg7_type, | |
222 | Combiner, | |
223 | Group, | |
224 | GroupCompare, | |
225 | SlotFunction> type; | |
226 | }; | |
227 | ||
228 | template<typename Signature, | |
229 | typename Combiner, | |
230 | typename Group, | |
231 | typename GroupCompare, | |
232 | typename SlotFunction> | |
233 | class real_get_signal_impl<8, Signature, Combiner, Group, GroupCompare, | |
234 | SlotFunction> | |
235 | { | |
236 | typedef function_traits<Signature> traits; | |
237 | ||
238 | public: | |
239 | typedef signal8<typename traits::result_type, | |
240 | typename traits::arg1_type, | |
241 | typename traits::arg2_type, | |
242 | typename traits::arg3_type, | |
243 | typename traits::arg4_type, | |
244 | typename traits::arg5_type, | |
245 | typename traits::arg6_type, | |
246 | typename traits::arg7_type, | |
247 | typename traits::arg8_type, | |
248 | Combiner, | |
249 | Group, | |
250 | GroupCompare, | |
251 | SlotFunction> type; | |
252 | }; | |
253 | ||
254 | template<typename Signature, | |
255 | typename Combiner, | |
256 | typename Group, | |
257 | typename GroupCompare, | |
258 | typename SlotFunction> | |
259 | class real_get_signal_impl<9, Signature, Combiner, Group, GroupCompare, | |
260 | SlotFunction> | |
261 | { | |
262 | typedef function_traits<Signature> traits; | |
263 | ||
264 | public: | |
265 | typedef signal9<typename traits::result_type, | |
266 | typename traits::arg1_type, | |
267 | typename traits::arg2_type, | |
268 | typename traits::arg3_type, | |
269 | typename traits::arg4_type, | |
270 | typename traits::arg5_type, | |
271 | typename traits::arg6_type, | |
272 | typename traits::arg7_type, | |
273 | typename traits::arg8_type, | |
274 | typename traits::arg9_type, | |
275 | Combiner, | |
276 | Group, | |
277 | GroupCompare, | |
278 | SlotFunction> type; | |
279 | }; | |
280 | ||
281 | template<typename Signature, | |
282 | typename Combiner, | |
283 | typename Group, | |
284 | typename GroupCompare, | |
285 | typename SlotFunction> | |
286 | class real_get_signal_impl<10, Signature, Combiner, Group, GroupCompare, | |
287 | SlotFunction> | |
288 | { | |
289 | typedef function_traits<Signature> traits; | |
290 | ||
291 | public: | |
292 | typedef signal10<typename traits::result_type, | |
293 | typename traits::arg1_type, | |
294 | typename traits::arg2_type, | |
295 | typename traits::arg3_type, | |
296 | typename traits::arg4_type, | |
297 | typename traits::arg5_type, | |
298 | typename traits::arg6_type, | |
299 | typename traits::arg7_type, | |
300 | typename traits::arg8_type, | |
301 | typename traits::arg9_type, | |
302 | typename traits::arg10_type, | |
303 | Combiner, | |
304 | Group, | |
305 | GroupCompare, | |
306 | SlotFunction> type; | |
307 | }; | |
308 | ||
309 | template<typename Signature, | |
310 | typename Combiner, | |
311 | typename Group, | |
312 | typename GroupCompare, | |
313 | typename SlotFunction> | |
314 | struct get_signal_impl : | |
315 | public real_get_signal_impl<(function_traits<Signature>::arity), | |
316 | Signature, | |
317 | Combiner, | |
318 | Group, | |
319 | GroupCompare, | |
320 | SlotFunction> | |
321 | { | |
322 | }; | |
323 | ||
324 | } // end namespace detail | |
325 | } // end namespace BOOST_SIGNALS_NAMESPACE | |
326 | ||
327 | // Very lightweight wrapper around the signalN classes that allows signals to | |
328 | // be created where the number of arguments does not need to be part of the | |
329 | // class name. | |
330 | template< | |
331 | typename Signature, // function type R (T1, T2, ..., TN) | |
332 | typename Combiner = last_value<typename function_traits<Signature>::result_type>, | |
333 | typename Group = int, | |
334 | typename GroupCompare = std::less<Group>, | |
335 | typename SlotFunction = function<Signature> | |
336 | > | |
337 | class signal : | |
338 | public BOOST_SIGNALS_NAMESPACE::detail::get_signal_impl<Signature, | |
339 | Combiner, | |
340 | Group, | |
341 | GroupCompare, | |
342 | SlotFunction>::type | |
343 | { | |
344 | typedef typename BOOST_SIGNALS_NAMESPACE::detail::get_signal_impl< | |
345 | Signature, | |
346 | Combiner, | |
347 | Group, | |
348 | GroupCompare, | |
349 | SlotFunction>::type base_type; | |
350 | ||
351 | public: | |
352 | explicit signal(const Combiner& combiner = Combiner(), | |
353 | const GroupCompare& group_compare = GroupCompare()) : | |
354 | base_type(combiner, group_compare) | |
355 | { | |
356 | } | |
357 | }; | |
358 | #endif // ndef BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX | |
359 | ||
360 | } // end namespace boost | |
361 | ||
362 | #ifdef BOOST_HAS_ABI_HEADERS | |
363 | # include BOOST_ABI_SUFFIX | |
364 | #endif | |
365 | ||
366 | #endif // BOOST_SIGNAL_HPP |