]> git.sesse.net Git - casparcg/blob - dependencies64/boost/boost/signal.hpp
Merge pull request #374 from hummelstrand/readme-2.1.0-update
[casparcg] / dependencies64 / boost / boost / signal.hpp
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