the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
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