yasmine
event_template.hpp
Go to the documentation of this file.
1 // //
3 // This file is part of the Seadex yasmine ecosystem (http://yasmine.seadex.de). //
4 // Copyright (C) 2016-2017 Seadex GmbH //
5 // //
6 // Licensing information is available in the folder "license" which is part of this distribution. //
7 // The same information is available on the www @ http://yasmine.seadex.de/Licenses.html. //
8 // //
10 
11 
12 #ifndef EVENT_TEMPLATE_D5281A8F_E064_45B5_B1E6_0C5B91DCD932
13 #define EVENT_TEMPLATE_D5281A8F_E064_45B5_B1E6_0C5B91DCD932
14 
15 
16 #include "essentials/compatibility/compatibility.hpp"
17 
18 #include "specialized_event.hpp"
19 
20 
21 #if defined( SX_CPP03_BOOST ) || ( defined(_MSC_VER) && _MSC_VER <=1800 )
22  #define Y_AUX_DEFAULT_EVENT_PRIORITY DEFAULT_EVENT_PRIORITY
23 #else
24  #define Y_AUX_DEFAULT_EVENT_PRIORITY sxy::DEFAULT_EVENT_PRIORITY
25 #endif
26 
27 
28 #ifndef SX_NO_VARIADIC_MACRO
29 
30 #define Y_EVENT_EXPAND( x ) x
31 
32 #define Y_EVENT_CAT( A, B ) A ## B
33 #define Y_EVENT_SELECT( NAME, NUM ) Y_EVENT_CAT( NAME ## _, NUM )
34 
35 #define Y_EVENT_GET_COUNT( _ONE, _TWO, _THREE, _FOUR, _FIVE, _SIX, _SEVEN, _EIGHT, _NINE, _TEN, _ELEVEN, _TWELVE, _THIRTEEN, _FOURTEEN, _FIFTEEN, _SIXTEEN, _EIGHTEEN, _NINETEEN, _TWENTY, _TWENTY_ONE, _TWENTY_TWO, COUNT, ... ) COUNT
36 #define Y_EVENT_VA_SIZE( ... ) Y_EVENT_EXPAND( Y_EVENT_GET_COUNT( __VA_ARGS__, 10, 10, 9, 9, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 0, 0, -1, -1, -2, -2 ) )
37 
38 #define Y_VA_SELECT( NAME, _level, ... ) Y_EVENT_EXPAND( Y_EVENT_SELECT( NAME, Y_EVENT_VA_SIZE(__VA_ARGS__) )( _level, __VA_ARGS__) )
39 #define Y_VA_SELECT_PRIORITY( NAME, _level, _level_2, ... ) Y_EVENT_EXPAND( Y_EVENT_SELECT( NAME, Y_EVENT_VA_SIZE(__VA_ARGS__) )( _level, _level_2, __VA_ARGS__) )
40 
43 #define Y_EVENT_CREATE( _class_name, ... ) Y_EVENT_EXPAND( Y_VA_SELECT( Y_EVENT_PARAM, _class_name, __VA_ARGS__ ) )
44 
45 #define Y_EVENT_PARAM_0( _class_name, _event_id ) Y_EVENT_WITH_ID( _class_name, _event_id )
46 #define Y_EVENT_PARAM_1( _class_name, _event_id, _parameter_type1, _getter_name1 ) Y_EVENT_1PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _event_id )
47 #define Y_EVENT_PARAM_2( _class_name, _event_id, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2 ) Y_EVENT_2PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _event_id )
48 #define Y_EVENT_PARAM_3( _class_name, _event_id, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3 ) Y_EVENT_3PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _event_id )
49 #define Y_EVENT_PARAM_4( _class_name, _event_id, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4 ) Y_EVENT_4PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _event_id )
50 #define Y_EVENT_PARAM_5( _class_name, _event_id, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5 ) Y_EVENT_5PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _event_id )
51 #define Y_EVENT_PARAM_6( _class_name, _event_id, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6 ) Y_EVENT_6PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _event_id )
52 #define Y_EVENT_PARAM_7( _class_name, _event_id, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7 ) Y_EVENT_7PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _event_id )
53 #define Y_EVENT_PARAM_8( _class_name, _event_id, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8 ) Y_EVENT_8PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8, _event_id )
54 #define Y_EVENT_PARAM_9( _class_name, _event_id, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8, _parameter_type9, _getter_name9 ) Y_EVENT_9PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8, _parameter_type9, _getter_name9, _event_id )
55 #define Y_EVENT_PARAM_10( _class_name, _event_id, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8, _parameter_type9, _getter_name9, _parameter_type10, _getter_name10 ) Y_EVENT_10PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8, _parameter_type9, _getter_name9, _parameter_type10, _getter_name10, _event_id )
56 
57 
60 #define Y_EVENT_WITH_PRIORITY_CREATE( _class_name, _event_id, ... ) Y_EVENT_EXPAND( Y_VA_SELECT_PRIORITY( Y_EVENT_PARAM_PRIORITY, _class_name, _event_id, __VA_ARGS__ ) )
61 
62 #define Y_EVENT_PARAM_PRIORITY_0( _class_name, _event_id, _event_priority ) Y_EVENT_WITH_ID_PRIORITY( _class_name, _event_id, _event_priority )
63 #define Y_EVENT_PARAM_PRIORITY_1( _class_name, _event_id, _event_priority, _parameter_type1, _getter_name1 ) Y_EVENT_1PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _event_id, _event_priority )
64 #define Y_EVENT_PARAM_PRIORITY_2( _class_name, _event_id, _event_priority, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2 ) Y_EVENT_2PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _event_id, _event_priority )
65 #define Y_EVENT_PARAM_PRIORITY_3( _class_name, _event_id, _event_priority, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3 ) Y_EVENT_3PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _event_id, _event_priority )
66 #define Y_EVENT_PARAM_PRIORITY_4( _class_name, _event_id, _event_priority, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4 ) Y_EVENT_4PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _event_id, _event_priority )
67 #define Y_EVENT_PARAM_PRIORITY_5( _class_name, _event_id, _event_priority, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5 ) Y_EVENT_5PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _event_id, _event_priority )
68 #define Y_EVENT_PARAM_PRIORITY_6( _class_name, _event_id, _event_priority, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6 ) Y_EVENT_6PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _event_id, _event_priority )
69 #define Y_EVENT_PARAM_PRIORITY_7( _class_name, _event_id, _event_priority, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7 ) Y_EVENT_7PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _event_id, _event_priority )
70 #define Y_EVENT_PARAM_PRIORITY_8( _class_name, _event_id, _event_priority, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8 ) Y_EVENT_8PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8, _event_id, _event_priority )
71 #define Y_EVENT_PARAM_PRIORITY_9( _class_name, _event_id, _event_priority, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8, _parameter_type9, _getter_name9 ) Y_EVENT_9PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8, _parameter_type9, _getter_name9, _event_id, _event_priority )
72 #define Y_EVENT_PARAM_PRIORITY_10( _class_name, _event_id, _event_priority, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8, _parameter_type9, _getter_name9, _parameter_type10, _getter_name10 ) Y_EVENT_10PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8, _parameter_type9, _getter_name9, _parameter_type10, _getter_name10, _event_id, _event_priority )
73 
74 #endif
75 
76 
77 
78 
83 #define Y_EVENT_WITH_ID_PRIORITY( _class_name, _event_id, _event_priority ) \
84 class _class_name: public sxy::specialized_event< _class_name, _event_id, _event_priority > { \
85 public: \
86  explicit _class_name() \
87  : sxy::specialized_event< _class_name, _event_id, _event_priority >( #_class_name ) \
88  { \
89  } \
90 \
91 \
92  virtual ~_class_name() SX_NOEXCEPT SX_OVERRIDE \
93  { \
94  } \
95 \
96 \
97  SX_NO_COPY( _class_name )\
98 \
99 \
100 };
101 
102 
106 #define Y_EVENT_WITH_ID( _class_name, _event_id ) Y_EVENT_WITH_ID_PRIORITY( _class_name, _event_id, Y_AUX_DEFAULT_EVENT_PRIORITY )
107 
108 
115 #define Y_EVENT_1PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _event_id, _event_priority ) \
116 class _class_name: public sxy::specialized_event< _class_name, _event_id, _event_priority > { \
117 public: \
118  typedef sxe::remove_reference<sxe::remove_const<_parameter_type1>::type>::type _param_type1;\
119  explicit _class_name( const _param_type1& _p1 ) \
120  : sxy::specialized_event< _class_name, _event_id, _event_priority >( #_class_name ), \
121  p1_( _p1 ) \
122  { \
123  } \
124 \
125 \
126  virtual ~_class_name() SX_NOEXCEPT SX_OVERRIDE \
127  { \
128  } \
129 \
130 \
131 SX_NO_COPY(_class_name)\
132 \
133 \
134  const _param_type1& _getter_name1() const \
135  { \
136  return( p1_ ); \
137  } \
138 \
139 \
140 private: \
141  const _param_type1 p1_; \
142 };
143 
144 
150 #define Y_EVENT_1PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _event_id ) Y_EVENT_1PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _event_id, Y_AUX_DEFAULT_EVENT_PRIORITY )
151 
152 
161 #define Y_EVENT_2PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _event_id, _event_priority ) \
162 class _class_name: public sxy::specialized_event< _class_name, _event_id, _event_priority > { \
163 public: \
164  typedef sxe::remove_reference<sxe::remove_const<_parameter_type1>::type>::type _param_type1;\
165  typedef sxe::remove_reference<sxe::remove_const<_parameter_type2>::type>::type _param_type2;\
166  explicit _class_name( const _param_type1& _p1, const _param_type2& _p2 ) \
167  : sxy::specialized_event< _class_name, _event_id, _event_priority >( #_class_name ), \
168  p1_( _p1 ), \
169  p2_( _p2 ) \
170  { \
171  } \
172 \
173 \
174  virtual ~_class_name() SX_NOEXCEPT SX_OVERRIDE \
175  { \
176  } \
177 \
178 \
179  SX_NO_COPY(_class_name)\
180 \
181 \
182  const _param_type1& _getter_name1() const \
183  { \
184  return( p1_ ); \
185  } \
186 \
187 \
188  const _param_type2& _getter_name2() const \
189  { \
190  return( p2_ ); \
191  } \
192 \
193 \
194 private: \
195  const _param_type1 p1_; \
196  const _param_type2 p2_; \
197 };
198 
199 
207 #define Y_EVENT_2PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _event_id ) Y_EVENT_2PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _event_id, Y_AUX_DEFAULT_EVENT_PRIORITY )
208 
209 
220 #define Y_EVENT_3PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _event_id, _event_priority ) \
221 class _class_name: public sxy::specialized_event< _class_name, _event_id, _event_priority > { \
222 public: \
223  typedef sxe::remove_reference<sxe::remove_const<_parameter_type1>::type>::type _param_type1;\
224  typedef sxe::remove_reference<sxe::remove_const<_parameter_type2>::type>::type _param_type2;\
225  typedef sxe::remove_reference<sxe::remove_const<_parameter_type3>::type>::type _param_type3;\
226  explicit _class_name( const _param_type1& _p1, const _param_type2& _p2, const _param_type3& _p3 ) \
227  : sxy::specialized_event< _class_name, _event_id, _event_priority >( #_class_name ), \
228  p1_( _p1 ), \
229  p2_( _p2 ), \
230  p3_( _p3 ) \
231  { \
232  } \
233 \
234 \
235  virtual ~_class_name() SX_NOEXCEPT SX_OVERRIDE \
236  { \
237  } \
238 \
239 \
240  SX_NO_COPY(_class_name)\
241 \
242 \
243  const _param_type1& _getter_name1() const \
244  { \
245  return( p1_ ); \
246  } \
247 \
248 \
249  const _param_type2& _getter_name2() const \
250  { \
251  return( p2_ ); \
252  } \
253 \
254 \
255  const _param_type3& _getter_name3() const \
256  { \
257  return( p3_ ); \
258  } \
259 \
260 \
261 private: \
262  const _param_type1 p1_; \
263  const _param_type2 p2_; \
264  const _param_type3 p3_; \
265 };
266 
267 
277 #define Y_EVENT_3PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _event_id ) Y_EVENT_3PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _event_id, Y_AUX_DEFAULT_EVENT_PRIORITY )
278 
279 
292 #define Y_EVENT_4PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _event_id, _event_priority ) \
293 class _class_name: public sxy::specialized_event< _class_name, _event_id, _event_priority > { \
294 public: \
295  typedef sxe::remove_reference<sxe::remove_const<_parameter_type1>::type>::type _param_type1;\
296  typedef sxe::remove_reference<sxe::remove_const<_parameter_type2>::type>::type _param_type2;\
297  typedef sxe::remove_reference<sxe::remove_const<_parameter_type3>::type>::type _param_type3;\
298  typedef sxe::remove_reference<sxe::remove_const<_parameter_type4>::type>::type _param_type4;\
299  explicit _class_name( const _param_type1& _p1, const _param_type2& _p2, const _param_type3& _p3, const _param_type4& _p4 ) \
300  : sxy::specialized_event< _class_name, _event_id, _event_priority >( #_class_name ), \
301  p1_( _p1 ), \
302  p2_( _p2 ), \
303  p3_( _p3 ), \
304  p4_( _p4 ) \
305  { \
306  } \
307 \
308 \
309  virtual ~_class_name() SX_NOEXCEPT SX_OVERRIDE \
310  { \
311  } \
312 \
313 \
314  SX_NO_COPY(_class_name)\
315 \
316 \
317  const _param_type1& _getter_name1() const \
318  { \
319  return( p1_ ); \
320  } \
321 \
322 \
323  const _param_type2& _getter_name2() const \
324  { \
325  return( p2_ ); \
326  } \
327 \
328 \
329  const _param_type3& _getter_name3() const \
330  { \
331  return( p3_ ); \
332  } \
333 \
334 \
335  const _param_type4& _getter_name4() const \
336  { \
337  return( p4_ ); \
338  } \
339 \
340 \
341 private: \
342  const _param_type1 p1_; \
343  const _param_type2 p2_; \
344  const _param_type3 p3_; \
345  const _param_type4 p4_; \
346 };
347 
348 
360 #define Y_EVENT_4PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _event_id ) Y_EVENT_4PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _event_id, Y_AUX_DEFAULT_EVENT_PRIORITY )
361 
362 
377 #define Y_EVENT_5PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _event_id, _event_priority ) \
378 class _class_name: public sxy::specialized_event< _class_name, _event_id, _event_priority > { \
379 public: \
380  typedef sxe::remove_reference<sxe::remove_const<_parameter_type1>::type>::type _param_type1;\
381  typedef sxe::remove_reference<sxe::remove_const<_parameter_type2>::type>::type _param_type2;\
382  typedef sxe::remove_reference<sxe::remove_const<_parameter_type3>::type>::type _param_type3;\
383  typedef sxe::remove_reference<sxe::remove_const<_parameter_type4>::type>::type _param_type4;\
384  typedef sxe::remove_reference<sxe::remove_const<_parameter_type5>::type>::type _param_type5;\
385  explicit _class_name( const _param_type1& _p1, const _param_type2& _p2, const _param_type3& _p3, const _param_type4& _p4, const _param_type5& _p5 ) \
386  : sxy::specialized_event< _class_name, _event_id, _event_priority >( #_class_name ), \
387  p1_( _p1 ), \
388  p2_( _p2 ), \
389  p3_( _p3 ), \
390  p4_( _p4 ), \
391  p5_( _p5 ) \
392  { \
393  } \
394 \
395 \
396  virtual ~_class_name() SX_NOEXCEPT SX_OVERRIDE \
397  { \
398  } \
399 \
400 \
401  SX_NO_COPY(_class_name)\
402 \
403 \
404  const _param_type1& _getter_name1() const \
405  { \
406  return( p1_ ); \
407  } \
408 \
409 \
410  const _param_type2& _getter_name2() const \
411  { \
412  return( p2_ ); \
413  } \
414 \
415 \
416  const _param_type3& _getter_name3() const \
417  { \
418  return( p3_ ); \
419  } \
420 \
421 \
422  const _param_type4& _getter_name4() const \
423  { \
424  return( p4_ ); \
425  } \
426 \
427 \
428  const _param_type5& _getter_name5() const \
429  { \
430  return( p5_ ); \
431  } \
432 \
433 \
434 private: \
435  const _param_type1 p1_; \
436  const _param_type2 p2_; \
437  const _param_type3 p3_; \
438  const _param_type4 p4_; \
439  const _param_type5 p5_; \
440 };
441 
442 
456 #define Y_EVENT_5PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _event_id ) Y_EVENT_5PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _event_id, Y_AUX_DEFAULT_EVENT_PRIORITY )
457 
458 
475 #define Y_EVENT_6PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _event_id, _event_priority ) \
476 class _class_name: public sxy::specialized_event< _class_name, _event_id, _event_priority > { \
477 public: \
478  typedef sxe::remove_reference<sxe::remove_const<_parameter_type1>::type>::type _param_type1;\
479  typedef sxe::remove_reference<sxe::remove_const<_parameter_type2>::type>::type _param_type2;\
480  typedef sxe::remove_reference<sxe::remove_const<_parameter_type3>::type>::type _param_type3;\
481  typedef sxe::remove_reference<sxe::remove_const<_parameter_type4>::type>::type _param_type4;\
482  typedef sxe::remove_reference<sxe::remove_const<_parameter_type5>::type>::type _param_type5;\
483  typedef sxe::remove_reference<sxe::remove_const<_parameter_type6>::type>::type _param_type6;\
484  explicit _class_name( const _param_type1& _p1, const _param_type2& _p2, const _param_type3& _p3, const _param_type4& _p4, const _param_type5& _p5, const _param_type6& _p6 ) \
485  : sxy::specialized_event< _class_name, _event_id, _event_priority >( #_class_name ), \
486  p1_( _p1 ), \
487  p2_( _p2 ), \
488  p3_( _p3 ), \
489  p4_( _p4 ), \
490  p5_( _p5 ), \
491  p6_( _p6 ) \
492  { \
493  } \
494 \
495 \
496  virtual ~_class_name() SX_NOEXCEPT SX_OVERRIDE \
497  { \
498  } \
499 \
500 \
501  SX_NO_COPY(_class_name)\
502 \
503 \
504  const _param_type1& _getter_name1() const \
505  { \
506  return( p1_ ); \
507  } \
508 \
509 \
510  const _param_type2& _getter_name2() const \
511  { \
512  return( p2_ ); \
513  } \
514 \
515 \
516  const _param_type3& _getter_name3() const \
517  { \
518  return( p3_ ); \
519  } \
520 \
521 \
522  const _param_type4& _getter_name4() const \
523  { \
524  return( p4_ ); \
525  } \
526 \
527 \
528  const _param_type5& _getter_name5() const \
529  { \
530  return( p5_ ); \
531  } \
532 \
533 \
534  const _parameter_type6& _getter_name6() const \
535  { \
536  return( p6_ ); \
537  } \
538 \
539 \
540 private: \
541  const _param_type1 p1_; \
542  const _param_type2 p2_; \
543  const _param_type3 p3_; \
544  const _param_type4 p4_; \
545  const _param_type5 p5_; \
546  const _param_type6 p6_; \
547 };
548 
549 
565 #define Y_EVENT_6PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _event_id ) Y_EVENT_6PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _event_id, Y_AUX_DEFAULT_EVENT_PRIORITY )
566 
567 
586 #define Y_EVENT_7PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _event_id, _event_priority ) \
587 class _class_name: public sxy::specialized_event< _class_name, _event_id, _event_priority > { \
588 public: \
589  typedef sxe::remove_reference<sxe::remove_const<_parameter_type1>::type>::type _param_type1;\
590  typedef sxe::remove_reference<sxe::remove_const<_parameter_type2>::type>::type _param_type2;\
591  typedef sxe::remove_reference<sxe::remove_const<_parameter_type3>::type>::type _param_type3;\
592  typedef sxe::remove_reference<sxe::remove_const<_parameter_type4>::type>::type _param_type4;\
593  typedef sxe::remove_reference<sxe::remove_const<_parameter_type5>::type>::type _param_type5;\
594  typedef sxe::remove_reference<sxe::remove_const<_parameter_type6>::type>::type _param_type6;\
595  typedef sxe::remove_reference<sxe::remove_const<_parameter_type7>::type>::type _param_type7;\
596  explicit _class_name( const _param_type1& _p1, const _param_type2& _p2, const _param_type3& _p3, const _param_type4& _p4, const _param_type5& _p5, const _param_type6& _p6, const _param_type7& _p7 ) \
597  : sxy::specialized_event< _class_name, _event_id, _event_priority >( #_class_name ), \
598  p1_( _p1 ), \
599  p2_( _p2 ), \
600  p3_( _p3 ), \
601  p4_( _p4 ), \
602  p5_( _p5 ), \
603  p6_( _p6 ), \
604  p7_( _p7 ) \
605  { \
606  } \
607 \
608 \
609  virtual ~_class_name() SX_NOEXCEPT SX_OVERRIDE \
610  { \
611  } \
612 \
613 \
614  SX_NO_COPY(_class_name)\
615 \
616 \
617  const _param_type1& _getter_name1() const \
618  { \
619  return( p1_ ); \
620  } \
621 \
622 \
623  const _param_type2& _getter_name2() const \
624  { \
625  return( p2_ ); \
626  } \
627 \
628 \
629  const _param_type3& _getter_name3() const \
630  { \
631  return( p3_ ); \
632  } \
633 \
634 \
635  const _param_type4& _getter_name4() const \
636  { \
637  return( p4_ ); \
638  } \
639 \
640 \
641  const _param_type5& _getter_name5() const \
642  { \
643  return( p5_ ); \
644  } \
645 \
646 \
647  const _param_type6& _getter_name6() const \
648  { \
649  return( p6_ ); \
650  } \
651 \
652 \
653  const _param_type7& _getter_name7() const \
654  { \
655  return( p7_ ); \
656  } \
657 \
658 \
659 private: \
660  const _param_type1 p1_; \
661  const _param_type2 p2_; \
662  const _param_type3 p3_; \
663  const _param_type4 p4_; \
664  const _param_type5 p5_; \
665  const _param_type6 p6_; \
666  const _param_type7 p7_; \
667 };
668 
669 
687 #define Y_EVENT_7PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _event_id ) Y_EVENT_7PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _event_id, Y_AUX_DEFAULT_EVENT_PRIORITY )
688 
689 
710 #define Y_EVENT_8PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8, _event_id, _event_priority ) \
711 class _class_name: public sxy::specialized_event< _class_name, _event_id, _event_priority > { \
712 public: \
713  typedef sxe::remove_reference<sxe::remove_const<_parameter_type1>::type>::type _param_type1;\
714  typedef sxe::remove_reference<sxe::remove_const<_parameter_type2>::type>::type _param_type2;\
715  typedef sxe::remove_reference<sxe::remove_const<_parameter_type3>::type>::type _param_type3;\
716  typedef sxe::remove_reference<sxe::remove_const<_parameter_type4>::type>::type _param_type4;\
717  typedef sxe::remove_reference<sxe::remove_const<_parameter_type5>::type>::type _param_type5;\
718  typedef sxe::remove_reference<sxe::remove_const<_parameter_type6>::type>::type _param_type6;\
719  typedef sxe::remove_reference<sxe::remove_const<_parameter_type7>::type>::type _param_type7;\
720  typedef sxe::remove_reference<sxe::remove_const<_parameter_type8>::type>::type _param_type8;\
721  explicit _class_name( const _param_type1& _p1, const _param_type2& _p2, const _param_type3& _p3, const _param_type4& _p4, const _param_type5& _p5, const _param_type6& _p6, const _param_type7& _p7, const _param_type8& _p8 ) \
722  : sxy::specialized_event< _class_name, _event_id, _event_priority >( #_class_name ), \
723  p1_( _p1 ), \
724  p2_( _p2 ), \
725  p3_( _p3 ), \
726  p4_( _p4 ), \
727  p5_( _p5 ), \
728  p6_( _p6 ), \
729  p7_( _p7 ), \
730  p8_( _p8 ) \
731  { \
732  } \
733 \
734 \
735  virtual ~_class_name() SX_NOEXCEPT SX_OVERRIDE \
736  { \
737  } \
738 \
739 \
740  SX_NO_COPY(_class_name)\
741 \
742 \
743  const _param_type1& _getter_name1() const \
744  { \
745  return( p1_ ); \
746  } \
747 \
748 \
749  const _param_type2& _getter_name2() const \
750  { \
751  return( p2_ ); \
752  } \
753 \
754 \
755  const _param_type3& _getter_name3() const \
756  { \
757  return( p3_ ); \
758  } \
759 \
760 \
761  const _param_type4& _getter_name4() const \
762  { \
763  return( p4_ ); \
764  } \
765 \
766 \
767  const _param_type5& _getter_name5() const \
768  { \
769  return( p5_ ); \
770  } \
771 \
772 \
773  const _param_type6& _getter_name6() const \
774  { \
775  return( p6_ ); \
776  } \
777 \
778 \
779  const _param_type7& _getter_name7() const \
780  { \
781  return( p7_ ); \
782  } \
783 \
784 \
785  const _param_type8& _getter_name8() const \
786  { \
787  return( p8_ ); \
788  } \
789 \
790 \
791 private: \
792  const _param_type1 p1_; \
793  const _param_type2 p2_; \
794  const _param_type3 p3_; \
795  const _param_type4 p4_; \
796  const _param_type5 p5_; \
797  const _param_type6 p6_; \
798  const _param_type7 p7_; \
799  const _param_type8 p8_; \
800 };
801 
802 
822 #define Y_EVENT_8PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8, _event_id ) Y_EVENT_8PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8, _event_id, Y_AUX_DEFAULT_EVENT_PRIORITY )
823 
824 
825 
848 #define Y_EVENT_9PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8, _parameter_type9, _getter_name9, _event_id, _event_priority ) \
849 class _class_name: public sxy::specialized_event< _class_name, _event_id, _event_priority > { \
850 public: \
851  typedef sxe::remove_reference<sxe::remove_const<_parameter_type1>::type>::type _param_type1;\
852  typedef sxe::remove_reference<sxe::remove_const<_parameter_type2>::type>::type _param_type2;\
853  typedef sxe::remove_reference<sxe::remove_const<_parameter_type3>::type>::type _param_type3;\
854  typedef sxe::remove_reference<sxe::remove_const<_parameter_type4>::type>::type _param_type4;\
855  typedef sxe::remove_reference<sxe::remove_const<_parameter_type5>::type>::type _param_type5;\
856  typedef sxe::remove_reference<sxe::remove_const<_parameter_type6>::type>::type _param_type6;\
857  typedef sxe::remove_reference<sxe::remove_const<_parameter_type7>::type>::type _param_type7;\
858  typedef sxe::remove_reference<sxe::remove_const<_parameter_type8>::type>::type _param_type8;\
859  typedef sxe::remove_reference<sxe::remove_const<_parameter_type9>::type>::type _param_type9;\
860  explicit _class_name( const _param_type1& _p1, const _param_type2& _p2, const _param_type3& _p3, const _param_type4& _p4, const _param_type5& _p5, const _param_type6& _p6, const _param_type7& _p7, const _param_type8& _p8, const _param_type9& _p9 ) \
861  : sxy::specialized_event< _class_name, _event_id, _event_priority >( #_class_name ), \
862  p1_( _p1 ), \
863  p2_( _p2 ), \
864  p3_( _p3 ), \
865  p4_( _p4 ), \
866  p5_( _p5 ), \
867  p6_( _p6 ), \
868  p7_( _p7 ), \
869  p8_( _p8 ), \
870  p9_( _p9 ) \
871  { \
872  } \
873 \
874 \
875  virtual ~_class_name() SX_NOEXCEPT SX_OVERRIDE \
876  { \
877  } \
878 \
879 \
880  SX_NO_COPY(_class_name)\
881 \
882 \
883  const _param_type1& _getter_name1() const \
884  { \
885  return( p1_ ); \
886  } \
887 \
888 \
889  const _param_type2& _getter_name2() const \
890  { \
891  return( p2_ ); \
892  } \
893 \
894 \
895  const _param_type3& _getter_name3() const \
896  { \
897  return( p3_ ); \
898  } \
899 \
900 \
901  const _param_type4& _getter_name4() const \
902  { \
903  return( p4_ ); \
904  } \
905 \
906 \
907  const _param_type5& _getter_name5() const \
908  { \
909  return( p5_ ); \
910  } \
911 \
912 \
913  const _param_type6& _getter_name6() const \
914  { \
915  return( p6_ ); \
916  } \
917 \
918 \
919  const _param_type7& _getter_name7() const \
920  { \
921  return( p7_ ); \
922  } \
923 \
924 \
925 const _param_type8& _getter_name8() const \
926  { \
927  return( p8_ ); \
928  } \
929 \
930 \
931  const _param_type9& _getter_name9() const \
932  { \
933  return( p9_ ); \
934  } \
935 \
936 \
937 private: \
938  const _param_type1 p1_; \
939  const _param_type2 p2_; \
940  const _param_type3 p3_; \
941  const _param_type4 p4_; \
942  const _param_type5 p5_; \
943  const _param_type6 p6_; \
944  const _param_type7 p7_; \
945  const _param_type8 p8_; \
946  const _param_type9 p9_; \
947 };
948 
949 
971 #define Y_EVENT_9PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8, _parameter_type9, _getter_name9, _event_id ) Y_EVENT_9PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8, _parameter_type9, _getter_name9, _event_id, Y_AUX_DEFAULT_EVENT_PRIORITY )
972 
973 
974 
999 #define Y_EVENT_10PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8, _parameter_type9, _getter_name9, _parameter_type10, _getter_name10, _event_id, _event_priority ) \
1000 class _class_name: public sxy::specialized_event< _class_name, _event_id, _event_priority > { \
1001 public: \
1002  typedef sxe::remove_reference<sxe::remove_const<_parameter_type1>::type>::type _param_type1;\
1003  typedef sxe::remove_reference<sxe::remove_const<_parameter_type2>::type>::type _param_type2;\
1004  typedef sxe::remove_reference<sxe::remove_const<_parameter_type3>::type>::type _param_type3;\
1005  typedef sxe::remove_reference<sxe::remove_const<_parameter_type4>::type>::type _param_type4;\
1006  typedef sxe::remove_reference<sxe::remove_const<_parameter_type5>::type>::type _param_type5;\
1007  typedef sxe::remove_reference<sxe::remove_const<_parameter_type6>::type>::type _param_type6;\
1008  typedef sxe::remove_reference<sxe::remove_const<_parameter_type7>::type>::type _param_type7;\
1009  typedef sxe::remove_reference<sxe::remove_const<_parameter_type8>::type>::type _param_type8;\
1010  typedef sxe::remove_reference<sxe::remove_const<_parameter_type9>::type>::type _param_type9;\
1011  typedef sxe::remove_reference<sxe::remove_const<_parameter_type10>::type>::type _param_type10;\
1012  explicit _class_name( const _param_type1& _p1, const _param_type2& _p2, const _param_type3& _p3, const _param_type4& _p4, const _param_type5& _p5, const _param_type6& _p6, const _param_type7& _p7, const _param_type8& _p8, const _param_type9& _p9, const _param_type10& _p10 ) \
1013  : sxy::specialized_event< _class_name, _event_id, _event_priority >( #_class_name ), \
1014  p1_( _p1 ), \
1015  p2_( _p2 ), \
1016  p3_( _p3 ), \
1017  p4_( _p4 ), \
1018  p5_( _p5 ), \
1019  p6_( _p6 ), \
1020  p7_( _p7 ), \
1021  p8_( _p8 ), \
1022  p9_( _p9 ), \
1023  p10_( _p10 ) \
1024  { \
1025  } \
1026 \
1027 \
1028  virtual ~_class_name() SX_NOEXCEPT SX_OVERRIDE \
1029  { \
1030  } \
1031 \
1032 \
1033  SX_NO_COPY(_class_name)\
1034 \
1035 \
1036  const _param_type1& _getter_name1() const \
1037  { \
1038  return( p1_ ); \
1039  } \
1040 \
1041 \
1042  const _param_type2& _getter_name2() const \
1043  { \
1044  return( p2_ ); \
1045  } \
1046 \
1047 \
1048  const _param_type3& _getter_name3() const \
1049  { \
1050  return( p3_ ); \
1051  } \
1052 \
1053 \
1054  const _param_type4& _getter_name4() const \
1055  { \
1056  return( p4_ ); \
1057  } \
1058 \
1059 \
1060  const _param_type5& _getter_name5() const \
1061  { \
1062  return( p5_ ); \
1063  } \
1064 \
1065 \
1066  const _param_type6& _getter_name6() const \
1067  { \
1068  return( p6_ ); \
1069  } \
1070 \
1071 \
1072  const _param_type7& _getter_name7() const \
1073  { \
1074  return( p7_ ); \
1075  } \
1076 \
1077 \
1078  const _param_type8& _getter_name8() const \
1079  { \
1080  return( p8_ ); \
1081  } \
1082 \
1083 \
1084  const _param_type9& _getter_name9() const \
1085  { \
1086  return( p9_ ); \
1087  } \
1088 \
1089 \
1090  const _param_type10& _getter_name10() const \
1091  { \
1092  return( p10_ ); \
1093  } \
1094 \
1095 \
1096 private: \
1097  const _param_type1 p1_; \
1098  const _param_type2 p2_; \
1099  const _param_type3 p3_; \
1100  const _param_type4 p4_; \
1101  const _param_type5 p5_; \
1102  const _param_type6 p6_; \
1103  const _param_type7 p7_; \
1104  const _param_type8 p8_; \
1105  const _param_type9 p9_; \
1106  const _param_type10 p10_; \
1107 };
1108 
1109 
1133 #define Y_EVENT_10PARAM_WITH_ID( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8, _parameter_type9, _getter_name9, _parameter_type10, _getter_name10, _event_id ) Y_EVENT_10PARAM_WITH_ID_PRIORITY( _class_name, _parameter_type1, _getter_name1, _parameter_type2, _getter_name2, _parameter_type3, _getter_name3, _parameter_type4, _getter_name4, _parameter_type5, _getter_name5, _parameter_type6, _getter_name6, _parameter_type7, _getter_name7, _parameter_type8, _getter_name8, _parameter_type9, _getter_name9, _parameter_type10, _getter_name10, _event_id, Y_AUX_DEFAULT_EVENT_PRIORITY )
1134 
1135 
1136 #endif