Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/boost/signal.hpp @ 56

Last change on this file since 56 was 29, checked in by landauf, 16 years ago

updated boost from 1_33_1 to 1_34_1

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