Ocean
Callback.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) Meta Platforms, Inc. and affiliates.
3  *
4  * This source code is licensed under the MIT license found in the
5  * LICENSE file in the root directory of this source tree.
6  */
7 
8 #ifndef META_OCEAN_BASE_CALLBACK_H
9 #define META_OCEAN_BASE_CALLBACK_H
10 
11 #include "ocean/base/Base.h"
12 #include "ocean/base/Lock.h"
13 
14 #include <vector>
15 
16 namespace Ocean
17 {
18 
19 /**
20  * Definition of a class holding no objects.
21  * This class can do nothing, but can be used as default class types.
22  * @ingroup base
23  */
24 typedef class {} NullClass;
25 
26 // Forward declaration.
27 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19> class Callback;
28 
29 // Forward declaration.
30 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19> class MemberFunction;
31 
32 // Forward declaration.
33 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19> class StaticFunction;
34 
35 // Forward declaration.
36 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19> class MemberFunctionCaller;
37 
38 // Forward declaration.
39 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19> class StaticFunctionCaller;
40 
41 // Forward declaration.
42 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19> class ParameterizedMemberFunction;
43 
44 // Forward declaration.
45 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19> class ParameterizedMemberFunctionConst;
46 
47 // Forward declaration.
48 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19> class ParameterizedStaticFunction;
49 
50 // Forward declaration.
51 template <typename RT> class Caller;
52 
53 /**
54  * This class implements a helper class providing a definition of a member function pointer only.
55  * Because of being a helper class there is no need to use it directly.<br>
56  * The template parameters define the function's owner class type (CT), the return type (RT) and twenty possible function parameters (PT0 - PT19).<br>
57  * @tparam CT Specifies the type of the member object
58  * @tparam RT Specifies the return type of the callback function
59  * @tparam PT0 Specifies the 1st possible function parameter type
60  * @tparam PT1 Specifies the 2nd possible function parameter type
61  * @tparam PT2 Specifies the 3rd possible function parameter type
62  * @tparam PT3 Specifies the 4th possible function parameter type
63  * @tparam PT4 Specifies the 5th possible function parameter type
64  * @tparam PT5 Specifies the 6th possible function parameter type
65  * @tparam PT6 Specifies the 7th possible function parameter type
66  * @tparam PT7 Specifies the 8th possible function parameter type
67  * @tparam PT8 Specifies the 9th possible function parameter type
68  * @tparam PT9 Specifies the 10th possible function parameter type
69  * @tparam PT10 Specifies the 11th possible function parameter type
70  * @tparam PT11 Specifies the 12th possible function parameter type
71  * @tparam PT12 Specifies the 13th possible function parameter type
72  * @tparam PT13 Specifies the 14th possible function parameter type
73  * @tparam PT14 Specifies the 15th possible function parameter type
74  * @tparam PT15 Specifies the 16th possible function parameter type
75  * @tparam PT16 Specifies the 17th possible function parameter type
76  * @tparam PT17 Specifies the 18th possible function parameter type
77  * @tparam PT18 Specifies the 19th possible function parameter type
78  * @tparam PT19 Specifies the 20th possible function parameter type
79  * @ingroup base
80  */
81 template <typename CT, typename RT, typename PT0 = NullClass, typename PT1 = NullClass, typename PT2 = NullClass, typename PT3 = NullClass, typename PT4 = NullClass, typename PT5 = NullClass, typename PT6 = NullClass, typename PT7 = NullClass, typename PT8 = NullClass, typename PT9 = NullClass, typename PT10 = NullClass, typename PT11 = NullClass, typename PT12 = NullClass, typename PT13 = NullClass, typename PT14 = NullClass, typename PT15 = NullClass, typename PT16 = NullClass, typename PT17 = NullClass, typename PT18 = NullClass, typename PT19 = NullClass>
83 {
84  public:
85 
86  /**
87  * Definition of a function pointer with twenty parameters.
88  */
89  typedef RT (CT::*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19);
90 
91  /**
92  * Definition of a const function pointer with twenty parameters.
93  */
94  typedef RT (CT::*TypeConst)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19) const;
95 };
96 
97 /**
98  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
99  * @see MemberFunctionPointerMaker
100  */
101 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18>
102 class MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18>
103 {
104  public:
105 
106  /**
107  * Definition of a function pointer with nineteen parameters.
108  */
109  typedef RT (CT::*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18);
110 
111  /**
112  * Definition of a const function pointer with nineteen parameters.
113  */
114  typedef RT (CT::*TypeConst)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18) const;
115 };
116 
117 /**
118  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
119  * @see MemberFunctionPointerMaker
120  */
121 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17>
122 class MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17>
123 {
124  public:
125 
126  /**
127  * Definition of a function pointer with eighteen parameters.
128  */
129  typedef RT (CT::*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17);
130 
131  /**
132  * Definition of a const function pointer with eighteen parameters.
133  */
134  typedef RT (CT::*TypeConst)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17) const;
135 };
136 
137 /**
138  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
139  * @see MemberFunctionPointerMaker
140  */
141 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16>
142 class MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16>
143 {
144  public:
145 
146  /**
147  * Definition of a function pointer with seventeen parameters.
148  */
149  typedef RT (CT::*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16);
150 
151  /**
152  * Definition of a const function pointer with seventeen parameters.
153  */
154  typedef RT (CT::*TypeConst)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16) const;
155 };
156 
157 /**
158  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
159  * @see MemberFunctionPointerMaker
160  */
161 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15>
162 class MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15>
163 {
164  public:
165 
166  /**
167  * Definition of a function pointer with sixteen parameters.
168  */
169  typedef RT (CT::*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15);
170 
171  /**
172  * Definition of a const function pointer with sixteen parameters.
173  */
174  typedef RT (CT::*TypeConst)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15) const;
175 };
176 
177 /**
178  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
179  * @see MemberFunctionPointerMaker
180  */
181 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14>
182 class MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14>
183 {
184  public:
185 
186  /**
187  * Definition of a function pointer with fifteen parameters.
188  */
189  typedef RT (CT::*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14);
190 
191  /**
192  * Definition of a const function pointer with fifteen parameters.
193  */
194  typedef RT (CT::*TypeConst)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14) const;
195 };
196 
197 /**
198  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
199  * @see MemberFunctionPointerMaker
200  */
201 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13>
202 class MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13>
203 {
204  public:
205 
206  /**
207  * Definition of a function pointer with fourteen parameters.
208  */
209  typedef RT (CT::*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13);
210 
211  /**
212  * Definition of a const function pointer with fourteen parameters.
213  */
214  typedef RT (CT::*TypeConst)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13) const;
215 };
216 
217 /**
218  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
219  * @see MemberFunctionPointerMaker
220  */
221 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12>
222 class MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12>
223 {
224  public:
225 
226  /**
227  * Definition of a function pointer with thirteen parameters.
228  */
229  typedef RT (CT::*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12);
230 
231  /**
232  * Definition of a const function pointer with thirteen parameters.
233  */
234  typedef RT (CT::*TypeConst)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12) const;
235 };
236 
237 /**
238  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
239  * @see MemberFunctionPointerMaker
240  */
241 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11>
242 class MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11>
243 {
244  public:
245 
246  /**
247  * Definition of a function pointer with twelve parameters.
248  */
249  typedef RT (CT::*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11);
250 
251  /**
252  * Definition of a const function pointer with twelve parameters.
253  */
254  typedef RT (CT::*TypeConst)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11) const;
255 };
256 
257 /**
258  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
259  * @see MemberFunctionPointerMaker
260  */
261 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10>
262 class MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10>
263 {
264  public:
265 
266  /**
267  * Definition of a function pointer with eleven parameters.
268  */
269  typedef RT (CT::*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10);
270 
271  /**
272  * Definition of a const function pointer with eleven parameters.
273  */
274  typedef RT (CT::*TypeConst)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10) const;
275 };
276 
277 /**
278  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
279  * @see MemberFunctionPointerMaker
280  */
281 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9>
282 class MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9>
283 {
284  public:
285 
286  /**
287  * Definition of a function pointer with ten parameters.
288  */
289  typedef RT (CT::*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9);
290 
291  /**
292  * Definition of a const function pointer with ten parameters.
293  */
294  typedef RT (CT::*TypeConst)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9) const;
295 };
296 
297 /**
298  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
299  * @see MemberFunctionPointerMaker
300  */
301 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8>
302 class MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, NullClass>
303 {
304  public:
305 
306  /**
307  * Definition of a function pointer with nine parameters.
308  */
309  typedef RT (CT::*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8);
310 
311  /**
312  * Definition of a const function pointer with nine parameters.
313  */
314  typedef RT (CT::*TypeConst)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8) const;
315 };
316 
317 /**
318  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
319  * @see MemberFunctionPointerMaker
320  */
321 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7>
323 {
324  public:
325 
326  /**
327  * Definition of a function pointer with eight parameters.
328  */
329  typedef RT (CT::*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7);
330 
331  /**
332  * Definition of a const function pointer with eight parameters.
333  */
334  typedef RT (CT::*TypeConst)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7) const;
335 };
336 
337 /**
338  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
339  * @see MemberFunctionPointerMaker
340  */
341 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6>
343 {
344  public:
345 
346  /**
347  * Definition of a function pointer with seven parameters.
348  */
349  typedef RT (CT::*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6);
350 
351  /**
352  * Definition of a const function pointer with seven parameters.
353  */
354  typedef RT (CT::*TypeConst)(PT0, PT1, PT2, PT3, PT4, PT5, PT6) const;
355 };
356 
357 /**
358  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
359  * @see MemberFunctionPointerMaker
360  */
361 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5>
363 {
364  public:
365 
366  /**
367  * Definition of a function pointer with six parameters.
368  */
369  typedef RT (CT::*Type)(PT0, PT1, PT2, PT3, PT4, PT5);
370 
371  /**
372  * Definition of a const function pointer with six parameters.
373  */
374  typedef RT (CT::*TypeConst)(PT0, PT1, PT2, PT3, PT4, PT5) const;
375 };
376 
377 /**
378  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
379  * @see MemberFunctionPointerMaker
380  */
381 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4>
383 {
384  public:
385 
386  /**
387  * Definition of a function pointer with five parameters.
388  */
389  typedef RT (CT::*Type)(PT0, PT1, PT2, PT3, PT4);
390 
391  /**
392  * Definition of a const function pointer with five parameters.
393  */
394  typedef RT (CT::*TypeConst)(PT0, PT1, PT2, PT3, PT4) const;
395 };
396 
397 /**
398  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
399  * @see MemberFunctionPointerMaker
400  */
401 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3>
403 {
404  public:
405 
406  /**
407  * Definition of a function pointer with four parameters.
408  */
409  typedef RT (CT::*Type)(PT0, PT1, PT2, PT3);
410 
411  /**
412  * Definition of a const function pointer with four parameters.
413  */
414  typedef RT (CT::*TypeConst)(PT0, PT1, PT2, PT3) const;
415 };
416 
417 /**
418  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
419  * @see MemberFunctionPointerMaker
420  */
421 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2>
423 {
424  public:
425 
426  /**
427  * Definition of a function pointer with three parameters.
428  */
429  typedef RT (CT::*Type)(PT0, PT1, PT2);
430 
431  /**
432  * Definition of a const function pointer with three parameters.
433  */
434  typedef RT (CT::*TypeConst)(PT0, PT1, PT2) const;
435 };
436 
437 /**
438  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
439  * @see MemberFunctionPointerMaker
440  */
441 template <typename CT, typename RT, typename PT0, typename PT1>
443 {
444  public:
445 
446  /**
447  * Definition of a function pointer with two parameters.
448  */
449  typedef RT (CT::*Type)(PT0, PT1);
450 
451  /**
452  * Definition of a const function pointer with two parameters.
453  */
454  typedef RT (CT::*TypeConst)(PT0, PT1) const;
455 };
456 
457 /**
458  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
459  * @see MemberFunctionPointerMaker
460  */
461 template <typename CT, typename RT, typename PT0>
463 {
464  public:
465 
466  /**
467  * Definition of a function pointer with one parameter.
468  */
469  typedef RT (CT::*Type)(PT0);
470 
471  /**
472  * Definition of a const function pointer with one parameter.
473  */
474  typedef RT (CT::*TypeConst)(PT0) const;
475 };
476 
477 /**
478  * This class is a specialization of the original helper class providing a definition of a member function pointer only.
479  * @see MemberFunctionPointerMaker
480  */
481 template <typename CT, typename RT>
483 {
484  public:
485 
486  /**
487  * Definition of a function pointer with no parameter.
488  */
489  typedef RT (CT::*Type)();
490 
491  /**
492  * Definition of a const function pointer with no parameter.
493  */
494  typedef RT (CT::*TypeConst)() const;
495 };
496 
497 /**
498  * This class is a helper class providing a definition of a static function pointer only.
499  * @tparam RT Specifies the return type of the callback function
500  * @tparam PT0 Specifies the 1st possible function parameter type
501  * @tparam PT1 Specifies the 2rd possible function parameter type
502  * @tparam PT2 Specifies the 3rd possible function parameter type
503  * @tparam PT3 Specifies the 4th possible function parameter type
504  * @tparam PT4 Specifies the 5th possible function parameter type
505  * @tparam PT5 Specifies the 6th possible function parameter type
506  * @tparam PT6 Specifies the 7th possible function parameter type
507  * @tparam PT7 Specifies the 8th possible function parameter type
508  * @tparam PT8 Specifies the 9th possible function parameter type
509  * @tparam PT9 Specifies the 10th possible function parameter type
510  * @tparam PT10 Specifies the 11th possible function parameter type
511  * @tparam PT11 Specifies the 12th possible function parameter type
512  * @tparam PT12 Specifies the 13th possible function parameter type
513  * @tparam PT13 Specifies the 14th possible function parameter type
514  * @tparam PT14 Specifies the 15th possible function parameter type
515  * @tparam PT15 Specifies the 16th possible function parameter type
516  * @tparam PT16 Specifies the 17th possible function parameter type
517  * @tparam PT17 Specifies the 18th possible function parameter type
518  * @tparam PT18 Specifies the 19th possible function parameter type
519  * @tparam PT19 Specifies the 20th possible function parameter type
520  * @ingroup base
521  */
522 template <typename RT, typename PT0 = NullClass, typename PT1 = NullClass, typename PT2 = NullClass, typename PT3 = NullClass, typename PT4 = NullClass, typename PT5 = NullClass, typename PT6 = NullClass, typename PT7 = NullClass, typename PT8 = NullClass, typename PT9 = NullClass, typename PT10 = NullClass, typename PT11 = NullClass, typename PT12 = NullClass, typename PT13 = NullClass, typename PT14 = NullClass, typename PT15 = NullClass, typename PT16 = NullClass, typename PT17 = NullClass, typename PT18 = NullClass, typename PT19 = NullClass>
524 {
525  public:
526 
527  /**
528  * Definition of a function pointer with twenty parameters.
529  */
530  typedef RT (*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19);
531 };
532 
533 /**
534  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
535  * @see StaticFunctionPointerMaker
536  */
537 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18>
538 class StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, NullClass>
539 {
540  public:
541 
542  /**
543  * Definition of a function pointer with nineteen parameters.
544  */
545  typedef RT (*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18);
546 };
547 
548 /**
549  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
550  * @see StaticFunctionPointerMaker
551  */
552 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17>
553 class StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, NullClass, NullClass>
554 {
555  public:
556 
557  /**
558  * Definition of a function pointer with eighteen parameters.
559  */
560  typedef RT (*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17);
561 };
562 
563 /**
564  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
565  * @see StaticFunctionPointerMaker
566  */
567 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16>
568 class StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, NullClass, NullClass, NullClass>
569 {
570  public:
571 
572  /**
573  * Definition of a function pointer with seventeen parameters.
574  */
575  typedef RT (*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16);
576 };
577 
578 /**
579  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
580  * @see StaticFunctionPointerMaker
581  */
582 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15>
583 class StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, NullClass, NullClass, NullClass, NullClass>
584 {
585  public:
586 
587  /**
588  * Definition of a function pointer with sixteen parameters.
589  */
590  typedef RT (*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15);
591 };
592 
593 /**
594  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
595  * @see StaticFunctionPointerMaker
596  */
597 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14>
598 class StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, NullClass, NullClass, NullClass, NullClass, NullClass>
599 {
600  public:
601 
602  /**
603  * Definition of a function pointer with fifteen parameters.
604  */
605  typedef RT (*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14);
606 };
607 
608 /**
609  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
610  * @see StaticFunctionPointerMaker
611  */
612 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13>
613 class StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>
614 {
615  public:
616 
617  /**
618  * Definition of a function pointer with fourteen parameters.
619  */
620  typedef RT (*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13);
621 };
622 
623 /**
624  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
625  * @see StaticFunctionPointerMaker
626  */
627 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12>
628 class StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>
629 {
630  public:
631 
632  /**
633  * Definition of a function pointer with thirteen parameters.
634  */
635  typedef RT (*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12);
636 };
637 
638 /**
639  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
640  * @see StaticFunctionPointerMaker
641  */
642 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11>
643 class StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>
644 {
645  public:
646 
647  /**
648  * Definition of a function pointer with twelve parameters.
649  */
650  typedef RT (*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11);
651 };
652 
653 /**
654  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
655  * @see StaticFunctionPointerMaker
656  */
657 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10>
658 class StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>
659 {
660  public:
661 
662  /**
663  * Definition of a function pointer with elven parameters.
664  */
665  typedef RT (*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10);
666 };
667 
668 /**
669  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
670  * @see StaticFunctionPointerMaker
671  */
672 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9>
673 class StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>
674 {
675  public:
676 
677  /**
678  * Definition of a function pointer with ten parameters.
679  */
680  typedef RT (*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9);
681 };
682 
683 /**
684  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
685  * @see StaticFunctionPointerMaker
686  */
687 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8>
689 {
690  public:
691 
692  /**
693  * Definition of a function pointer with nine parameters.
694  */
695  typedef RT (*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8);
696 };
697 
698 /**
699  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
700  * @see StaticFunctionPointerMaker
701  */
702 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7>
704 {
705  public:
706 
707  /**
708  * Definition of a function pointer with eight parameters.
709  */
710  typedef RT (*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7);
711 };
712 
713 /**
714  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
715  * @see StaticFunctionPointerMaker
716  */
717 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6>
719 {
720  public:
721 
722  /**
723  * Definition of a function pointer with seven parameters.
724  */
725  typedef RT (*Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6);
726 };
727 
728 /**
729  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
730  * @see StaticFunctionPointerMaker
731  */
732 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5>
734 {
735  public:
736 
737  /**
738  * Definition of a function pointer with six parameters.
739  */
740  typedef RT (*Type)(PT0, PT1, PT2, PT3, PT4, PT5);
741 };
742 
743 /**
744  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
745  * @see StaticFunctionPointerMaker
746  */
747 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4>
749 {
750  public:
751 
752  /**
753  * Definition of a function pointer with five parameters.
754  */
755  typedef RT (*Type)(PT0, PT1, PT2, PT3, PT4);
756 };
757 
758 /**
759  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
760  * @see StaticFunctionPointerMaker
761  */
762 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3>
764 {
765  public:
766 
767  /**
768  * Definition of a function pointer with four parameters.
769  */
770  typedef RT (*Type)(PT0, PT1, PT2, PT3);
771 };
772 
773 /**
774  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
775  * @see StaticFunctionPointerMaker
776  */
777 template <typename RT, typename PT0, typename PT1, typename PT2>
779 {
780  public:
781 
782  /**
783  * Definition of a function pointer with three parameters.
784  */
785  typedef RT (*Type)(PT0, PT1, PT2);
786 };
787 
788 /**
789  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
790  * @see StaticFunctionPointerMaker
791  */
792 template <typename RT, typename PT0, typename PT1>
794 {
795  public:
796 
797  /**
798  * Definition of a function pointer with two parameters.
799  */
800  typedef RT (*Type)(PT0, PT1);
801 };
802 
803 /**
804  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
805  * @see StaticFunctionPointerMaker
806  */
807 template <typename RT, typename PT0>
809 {
810  public:
811 
812  /**
813  * Definition of a function pointer with one parameter.
814  */
815  typedef RT (*Type)(PT0);
816 };
817 
818 /**
819  * This class is a specialization of the original helper class providing a definition of a static function pointer only.
820  * @see StaticFunctionPointerMaker
821  */
822 template <typename RT>
824 {
825  public:
826 
827  /**
828  * Definition of a function pointer with no parameter.
829  */
830  typedef RT (*Type)();
831 };
832 
833 /**
834  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
835  * @tparam CT Specifies the type of the member object
836  * @tparam RT Specifies the return type of the callback function
837  * @tparam PT0 Specifies the 1st possible function parameter type
838  * @tparam PT1 Specifies the 2rd possible function parameter type
839  * @tparam PT2 Specifies the 3rd possible function parameter type
840  * @tparam PT3 Specifies the 4th possible function parameter type
841  * @tparam PT4 Specifies the 5th possible function parameter type
842  * @tparam PT5 Specifies the 6th possible function parameter type
843  * @tparam PT6 Specifies the 7th possible function parameter type
844  * @tparam PT7 Specifies the 8th possible function parameter type
845  * @tparam PT8 Specifies the 9th possible function parameter type
846  * @tparam PT9 Specifies the 10th possible function parameter type
847  * @tparam PT10 Specifies the 11th possible function parameter type
848  * @tparam PT11 Specifies the 12th possible function parameter type
849  * @tparam PT12 Specifies the 13th possible function parameter type
850  * @tparam PT13 Specifies the 14th possible function parameter type
851  * @tparam PT14 Specifies the 15th possible function parameter type
852  * @tparam PT15 Specifies the 16th possible function parameter type
853  * @tparam PT16 Specifies the 17th possible function parameter type
854  * @tparam PT17 Specifies the 18th possible function parameter type
855  * @tparam PT18 Specifies the 19th possible function parameter type
856  * @tparam PT19 Specifies the 20th possible function parameter type
857  * @ingroup base
858  */
859 template <typename CT, typename RT, typename PT0 = NullClass, typename PT1 = NullClass, typename PT2 = NullClass, typename PT3 = NullClass, typename PT4 = NullClass, typename PT5 = NullClass, typename PT6 = NullClass, typename PT7 = NullClass, typename PT8 = NullClass, typename PT9 = NullClass, typename PT10 = NullClass, typename PT11 = NullClass, typename PT12 = NullClass, typename PT13 = NullClass, typename PT14 = NullClass, typename PT15 = NullClass, typename PT16 = NullClass, typename PT17 = NullClass, typename PT18 = NullClass, typename PT19 = NullClass>
861 {
862  friend class MemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>;
863  friend class ParameterizedMemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>;
864  friend class ParameterizedMemberFunctionConst<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>;
865 
866  protected:
867 
868  /**
869  * Calls a function defined by the function pointer the class object and the function parameters.
870  * @param functionClass Class object holding the member function to call
871  * @param functionPointer Pointer of the member function to call
872  * @param param0 First function parameter
873  * @param param1 Second function parameter
874  * @param param2 Third function parameter
875  * @param param3 Fourth function parameter
876  * @param param4 Fifth function parameter
877  * @param param5 Sixth function parameter
878  * @param param6 Seventh function parameter
879  * @param param7 Eighth function parameter
880  * @param param8 Ninth function parameter
881  * @param param9 10th function parameter
882  * @param param10 11th function parameter
883  * @param param11 12th function parameter
884  * @param param12 13th function parameter
885  * @param param13 14th function parameter
886  * @param param14 15th function parameter
887  * @param param15 16th function parameter
888  * @param param16 17th function parameter
889  * @param param17 18th function parameter
890  * @param param18 19th function parameter
891  * @param param19 20th function parameter
892  * @return Return value
893  */
894  static inline RT call(CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, PT18 param18, PT19 param19);
895 
896  /**
897  * Calls a const function defined by the function pointer the class object and the function parameters.
898  * @param functionClass Class object holding the member function to call
899  * @param functionPointer Pointer of the member function to call
900  * @param param0 First function parameter
901  * @param param1 Second function parameter
902  * @param param2 Third function parameter
903  * @param param3 Fourth function parameter
904  * @param param4 Fifth function parameter
905  * @param param5 Sixth function parameter
906  * @param param6 Seventh function parameter
907  * @param param7 Eighth function parameter
908  * @param param8 Ninth function parameter
909  * @param param9 10th function parameter
910  * @param param10 11th function parameter
911  * @param param11 12th function parameter
912  * @param param12 13th function parameter
913  * @param param13 14th function parameter
914  * @param param14 15th function parameter
915  * @param param15 16th function parameter
916  * @param param16 17th function parameter
917  * @param param17 18th function parameter
918  * @param param18 19th function parameter
919  * @param param19 20th function parameter
920  * @return Return value
921  */
922  static inline RT call(const CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>::TypeConst functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, PT18 param18, PT19 param19);
923 };
924 
925 /**
926  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
927  * @see MemberFunctionCaller.
928  */
929 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18>
930 class MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, NullClass>
931 {
932  friend class MemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, NullClass>;
933  friend class ParameterizedMemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, NullClass>;
934  friend class ParameterizedMemberFunctionConst<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, NullClass>;
935 
936  protected:
937 
938  /**
939  * Calls a function defined by the function pointer the class object and the function parameters.
940  * @param functionClass Class object holding the member function to call
941  * @param functionPointer Pointer of the member function to call
942  * @param param0 First function parameter
943  * @param param1 Second function parameter
944  * @param param2 Third function parameter
945  * @param param3 Fourth function parameter
946  * @param param4 Fifth function parameter
947  * @param param5 Sixth function parameter
948  * @param param6 Seventh function parameter
949  * @param param7 Eighth function parameter
950  * @param param8 Ninth function parameter
951  * @param param9 10th function parameter
952  * @param param10 11th function parameter
953  * @param param11 12th function parameter
954  * @param param12 13th function parameter
955  * @param param13 14th function parameter
956  * @param param14 15th function parameter
957  * @param param15 16th function parameter
958  * @param param16 17th function parameter
959  * @param param17 18th function parameter
960  * @param param18 19th function parameter
961  * @return Return value
962  */
963  static inline RT call(CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, PT18 param18, NullClass);
964 
965  /**
966  * Calls a const function defined by the function pointer the class object and the function parameters.
967  * @param functionClass Class object holding the member function to call
968  * @param functionPointer Pointer of the member function to call
969  * @param param0 First function parameter
970  * @param param1 Second function parameter
971  * @param param2 Third function parameter
972  * @param param3 Fourth function parameter
973  * @param param4 Fifth function parameter
974  * @param param5 Sixth function parameter
975  * @param param6 Seventh function parameter
976  * @param param7 Eighth function parameter
977  * @param param8 Ninth function parameter
978  * @param param9 10th function parameter
979  * @param param10 11th function parameter
980  * @param param11 12th function parameter
981  * @param param12 13th function parameter
982  * @param param13 14th function parameter
983  * @param param14 15th function parameter
984  * @param param15 16th function parameter
985  * @param param16 17th function parameter
986  * @param param17 18th function parameter
987  * @param param18 19th function parameter
988  * @return Return value
989  */
990  static inline RT call(const CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, NullClass>::TypeConst functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, PT18 param18, NullClass);
991 };
992 
993 /**
994  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
995  * @see MemberFunctionCaller.
996  */
997 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17>
998 class MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, NullClass, NullClass>
999 {
1000  friend class MemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, NullClass, NullClass>;
1001  friend class ParameterizedMemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, NullClass, NullClass>;
1002  friend class ParameterizedMemberFunctionConst<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, NullClass, NullClass>;
1003 
1004  protected:
1005 
1006  /**
1007  * Calls a function defined by the function pointer the class object and the function parameters.
1008  * @param functionClass Class object holding the member function to call
1009  * @param functionPointer Pointer of the member function to call
1010  * @param param0 First function parameter
1011  * @param param1 Second function parameter
1012  * @param param2 Third function parameter
1013  * @param param3 Fourth function parameter
1014  * @param param4 Fifth function parameter
1015  * @param param5 Sixth function parameter
1016  * @param param6 Seventh function parameter
1017  * @param param7 Eighth function parameter
1018  * @param param8 Ninth function parameter
1019  * @param param9 10th function parameter
1020  * @param param10 11th function parameter
1021  * @param param11 12th function parameter
1022  * @param param12 13th function parameter
1023  * @param param13 14th function parameter
1024  * @param param14 15th function parameter
1025  * @param param15 16th function parameter
1026  * @param param16 17th function parameter
1027  * @param param17 18th function parameter
1028  * @return Return value
1029  */
1030  static inline RT call(CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, NullClass, NullClass);
1031 
1032  /**
1033  * Calls a const function defined by the function pointer the class object and the function parameters.
1034  * @param functionClass Class object holding the member function to call
1035  * @param functionPointer Pointer of the member function to call
1036  * @param param0 First function parameter
1037  * @param param1 Second function parameter
1038  * @param param2 Third function parameter
1039  * @param param3 Fourth function parameter
1040  * @param param4 Fifth function parameter
1041  * @param param5 Sixth function parameter
1042  * @param param6 Seventh function parameter
1043  * @param param7 Eighth function parameter
1044  * @param param8 Ninth function parameter
1045  * @param param9 10th function parameter
1046  * @param param10 11th function parameter
1047  * @param param11 12th function parameter
1048  * @param param12 13th function parameter
1049  * @param param13 14th function parameter
1050  * @param param14 15th function parameter
1051  * @param param15 16th function parameter
1052  * @param param16 17th function parameter
1053  * @param param17 18th function parameter
1054  * @return Return value
1055  */
1056  static inline RT call(const CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, NullClass, NullClass>::TypeConst functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, NullClass, NullClass);
1057 };
1058 
1059 /**
1060  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
1061  * @see MemberFunctionCaller.
1062  */
1063 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16>
1064 class MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, NullClass, NullClass, NullClass>
1065 {
1066  friend class MemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, NullClass, NullClass, NullClass>;
1067  friend class ParameterizedMemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, NullClass, NullClass, NullClass>;
1068  friend class ParameterizedMemberFunctionConst<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, NullClass, NullClass, NullClass>;
1069 
1070  protected:
1071 
1072  /**
1073  * Calls a function defined by the function pointer the class object and the function parameters.
1074  * @param functionClass Class object holding the member function to call
1075  * @param functionPointer Pointer of the member function to call
1076  * @param param0 First function parameter
1077  * @param param1 Second function parameter
1078  * @param param2 Third function parameter
1079  * @param param3 Fourth function parameter
1080  * @param param4 Fifth function parameter
1081  * @param param5 Sixth function parameter
1082  * @param param6 Seventh function parameter
1083  * @param param7 Eighth function parameter
1084  * @param param8 Ninth function parameter
1085  * @param param9 10th function parameter
1086  * @param param10 11th function parameter
1087  * @param param11 12th function parameter
1088  * @param param12 13th function parameter
1089  * @param param13 14th function parameter
1090  * @param param14 15th function parameter
1091  * @param param15 16th function parameter
1092  * @param param16 17th function parameter
1093  * @return Return value
1094  */
1095  static inline RT call(CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, NullClass, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, NullClass, NullClass, NullClass);
1096 
1097  /**
1098  * Calls a const function defined by the function pointer the class object and the function parameters.
1099  * @param functionClass Class object holding the member function to call
1100  * @param functionPointer Pointer of the member function to call
1101  * @param param0 First function parameter
1102  * @param param1 Second function parameter
1103  * @param param2 Third function parameter
1104  * @param param3 Fourth function parameter
1105  * @param param4 Fifth function parameter
1106  * @param param5 Sixth function parameter
1107  * @param param6 Seventh function parameter
1108  * @param param7 Eighth function parameter
1109  * @param param8 Ninth function parameter
1110  * @param param9 10th function parameter
1111  * @param param10 11th function parameter
1112  * @param param11 12th function parameter
1113  * @param param12 13th function parameter
1114  * @param param13 14th function parameter
1115  * @param param14 15th function parameter
1116  * @param param15 16th function parameter
1117  * @param param16 17th function parameter
1118  * @return Return value
1119  */
1120  static inline RT call(const CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, NullClass, NullClass, NullClass>::TypeConst functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, NullClass, NullClass, NullClass);
1121 };
1122 
1123 /**
1124  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
1125  * @see MemberFunctionCaller.
1126  */
1127 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15>
1128 class MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, NullClass, NullClass, NullClass, NullClass>
1129 {
1130  friend class MemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, NullClass, NullClass, NullClass, NullClass>;
1131  friend class ParameterizedMemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, NullClass, NullClass, NullClass, NullClass>;
1132  friend class ParameterizedMemberFunctionConst<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, NullClass, NullClass, NullClass, NullClass>;
1133 
1134  protected:
1135 
1136  /**
1137  * Calls a function defined by the function pointer the class object and the function parameters.
1138  * @param functionClass Class object holding the member function to call
1139  * @param functionPointer Pointer of the member function to call
1140  * @param param0 First function parameter
1141  * @param param1 Second function parameter
1142  * @param param2 Third function parameter
1143  * @param param3 Fourth function parameter
1144  * @param param4 Fifth function parameter
1145  * @param param5 Sixth function parameter
1146  * @param param6 Seventh function parameter
1147  * @param param7 Eighth function parameter
1148  * @param param8 Ninth function parameter
1149  * @param param9 10th function parameter
1150  * @param param10 11th function parameter
1151  * @param param11 12th function parameter
1152  * @param param12 13th function parameter
1153  * @param param13 14th function parameter
1154  * @param param14 15th function parameter
1155  * @param param15 16th function parameter
1156  * @return Return value
1157  */
1158  static inline RT call(CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, NullClass, NullClass, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, NullClass, NullClass, NullClass, NullClass);
1159 
1160  /**
1161  * Calls a const function defined by the function pointer the class object and the function parameters.
1162  * @param functionClass Class object holding the member function to call
1163  * @param functionPointer Pointer of the member function to call
1164  * @param param0 First function parameter
1165  * @param param1 Second function parameter
1166  * @param param2 Third function parameter
1167  * @param param3 Fourth function parameter
1168  * @param param4 Fifth function parameter
1169  * @param param5 Sixth function parameter
1170  * @param param6 Seventh function parameter
1171  * @param param7 Eighth function parameter
1172  * @param param8 Ninth function parameter
1173  * @param param9 10th function parameter
1174  * @param param10 11th function parameter
1175  * @param param11 12th function parameter
1176  * @param param12 13th function parameter
1177  * @param param13 14th function parameter
1178  * @param param14 15th function parameter
1179  * @param param15 16th function parameter
1180  * @return Return value
1181  */
1182  static inline RT call(const CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, NullClass, NullClass, NullClass, NullClass>::TypeConst functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, NullClass, NullClass, NullClass, NullClass);
1183 };
1184 
1185 /**
1186  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
1187  * @see MemberFunctionCaller.
1188  */
1189 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14>
1190 class MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, NullClass, NullClass, NullClass, NullClass, NullClass>
1191 {
1192  friend class MemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, NullClass, NullClass, NullClass, NullClass, NullClass>;
1193  friend class ParameterizedMemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, NullClass, NullClass, NullClass, NullClass, NullClass>;
1194  friend class ParameterizedMemberFunctionConst<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, NullClass, NullClass, NullClass, NullClass, NullClass>;
1195 
1196  protected:
1197 
1198  /**
1199  * Calls a function defined by the function pointer the class object and the function parameters.
1200  * @param functionClass Class object holding the member function to call
1201  * @param functionPointer Pointer of the member function to call
1202  * @param param0 First function parameter
1203  * @param param1 Second function parameter
1204  * @param param2 Third function parameter
1205  * @param param3 Fourth function parameter
1206  * @param param4 Fifth function parameter
1207  * @param param5 Sixth function parameter
1208  * @param param6 Seventh function parameter
1209  * @param param7 Eighth function parameter
1210  * @param param8 Ninth function parameter
1211  * @param param9 10th function parameter
1212  * @param param10 11th function parameter
1213  * @param param11 12th function parameter
1214  * @param param12 13th function parameter
1215  * @param param13 14th function parameter
1216  * @param param14 15th function parameter
1217  * @return Return value
1218  */
1219  static inline RT call(CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, NullClass, NullClass, NullClass, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, NullClass, NullClass, NullClass, NullClass, NullClass);
1220 
1221  /**
1222  * Calls a const function defined by the function pointer the class object and the function parameters.
1223  * @param functionClass Class object holding the member function to call
1224  * @param functionPointer Pointer of the member function to call
1225  * @param param0 First function parameter
1226  * @param param1 Second function parameter
1227  * @param param2 Third function parameter
1228  * @param param3 Fourth function parameter
1229  * @param param4 Fifth function parameter
1230  * @param param5 Sixth function parameter
1231  * @param param6 Seventh function parameter
1232  * @param param7 Eighth function parameter
1233  * @param param8 Ninth function parameter
1234  * @param param9 10th function parameter
1235  * @param param10 11th function parameter
1236  * @param param11 12th function parameter
1237  * @param param12 13th function parameter
1238  * @param param13 14th function parameter
1239  * @param param14 15th function parameter
1240  * @return Return value
1241  */
1242  static inline RT call(const CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, NullClass, NullClass, NullClass, NullClass, NullClass>::TypeConst functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, NullClass, NullClass, NullClass, NullClass, NullClass);
1243 };
1244 
1245 /**
1246  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
1247  * @see MemberFunctionCaller.
1248  */
1249 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13>
1250 class MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>
1251 {
1252  friend class MemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1253  friend class ParameterizedMemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1254  friend class ParameterizedMemberFunctionConst<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1255 
1256  protected:
1257 
1258  /**
1259  * Calls a function defined by the function pointer the class object and the function parameters.
1260  * @param functionClass Class object holding the member function to call
1261  * @param functionPointer Pointer of the member function to call
1262  * @param param0 First function parameter
1263  * @param param1 Second function parameter
1264  * @param param2 Third function parameter
1265  * @param param3 Fourth function parameter
1266  * @param param4 Fifth function parameter
1267  * @param param5 Sixth function parameter
1268  * @param param6 Seventh function parameter
1269  * @param param7 Eighth function parameter
1270  * @param param8 Ninth function parameter
1271  * @param param9 10th function parameter
1272  * @param param10 11th function parameter
1273  * @param param11 12th function parameter
1274  * @param param12 13th function parameter
1275  * @param param13 14th function parameter
1276  * @return Return value
1277  */
1278  static inline RT call(CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass);
1279 
1280  /**
1281  * Calls a const function defined by the function pointer the class object and the function parameters.
1282  * @param functionClass Class object holding the member function to call
1283  * @param functionPointer Pointer of the member function to call
1284  * @param param0 First function parameter
1285  * @param param1 Second function parameter
1286  * @param param2 Third function parameter
1287  * @param param3 Fourth function parameter
1288  * @param param4 Fifth function parameter
1289  * @param param5 Sixth function parameter
1290  * @param param6 Seventh function parameter
1291  * @param param7 Eighth function parameter
1292  * @param param8 Ninth function parameter
1293  * @param param9 10th function parameter
1294  * @param param10 11th function parameter
1295  * @param param11 12th function parameter
1296  * @param param12 13th function parameter
1297  * @param param13 14th function parameter
1298  * @return Return value
1299  */
1300  static inline RT call(const CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>::TypeConst functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass);
1301 };
1302 
1303 /**
1304  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
1305  * @see MemberFunctionCaller.
1306  */
1307 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12>
1308 class MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>
1309 {
1310  friend class MemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1311  friend class ParameterizedMemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1312  friend class ParameterizedMemberFunctionConst<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1313 
1314  protected:
1315 
1316  /**
1317  * Calls a function defined by the function pointer the class object and the function parameters.
1318  * @param functionClass Class object holding the member function to call
1319  * @param functionPointer Pointer of the member function to call
1320  * @param param0 First function parameter
1321  * @param param1 Second function parameter
1322  * @param param2 Third function parameter
1323  * @param param3 Fourth function parameter
1324  * @param param4 Fifth function parameter
1325  * @param param5 Sixth function parameter
1326  * @param param6 Seventh function parameter
1327  * @param param7 Eighth function parameter
1328  * @param param8 Ninth function parameter
1329  * @param param9 10th function parameter
1330  * @param param10 11th function parameter
1331  * @param param11 12th function parameter
1332  * @param param12 13th function parameter
1333  * @return Return value
1334  */
1335  static inline RT call(CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass);
1336 
1337  /**
1338  * Calls a const function defined by the function pointer the class object and the function parameters.
1339  * @param functionClass Class object holding the member function to call
1340  * @param functionPointer Pointer of the member function to call
1341  * @param param0 First function parameter
1342  * @param param1 Second function parameter
1343  * @param param2 Third function parameter
1344  * @param param3 Fourth function parameter
1345  * @param param4 Fifth function parameter
1346  * @param param5 Sixth function parameter
1347  * @param param6 Seventh function parameter
1348  * @param param7 Eighth function parameter
1349  * @param param8 Ninth function parameter
1350  * @param param9 10th function parameter
1351  * @param param10 11th function parameter
1352  * @param param11 12th function parameter
1353  * @param param12 13th function parameter
1354  * @return Return value
1355  */
1356  static inline RT call(const CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>::TypeConst functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass);
1357 };
1358 
1359 /**
1360  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
1361  * @see MemberFunctionCaller.
1362  */
1363 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11>
1364 class MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>
1365 {
1366  friend class MemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1367  friend class ParameterizedMemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1368  friend class ParameterizedMemberFunctionConst<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1369 
1370  protected:
1371 
1372  /**
1373  * Calls a function defined by the function pointer the class object and the function parameters.
1374  * @param functionClass Class object holding the member function to call
1375  * @param functionPointer Pointer of the member function to call
1376  * @param param0 First function parameter
1377  * @param param1 Second function parameter
1378  * @param param2 Third function parameter
1379  * @param param3 Fourth function parameter
1380  * @param param4 Fifth function parameter
1381  * @param param5 Sixth function parameter
1382  * @param param6 Seventh function parameter
1383  * @param param7 Eighth function parameter
1384  * @param param8 Ninth function parameter
1385  * @param param9 10th function parameter
1386  * @param param10 11th function parameter
1387  * @param param11 12th function parameter
1388  * @return Return value
1389  */
1390  static inline RT call(CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass);
1391 
1392  /**
1393  * Calls a const function defined by the function pointer the class object and the function parameters.
1394  * @param functionClass Class object holding the member function to call
1395  * @param functionPointer Pointer of the member function to call
1396  * @param param0 First function parameter
1397  * @param param1 Second function parameter
1398  * @param param2 Third function parameter
1399  * @param param3 Fourth function parameter
1400  * @param param4 Fifth function parameter
1401  * @param param5 Sixth function parameter
1402  * @param param6 Seventh function parameter
1403  * @param param7 Eighth function parameter
1404  * @param param8 Ninth function parameter
1405  * @param param9 10th function parameter
1406  * @param param10 11th function parameter
1407  * @param param11 12th function parameter
1408  * @return Return value
1409  */
1410  static inline RT call(const CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>::TypeConst functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass);
1411 };
1412 
1413 /**
1414  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
1415  * @see MemberFunctionCaller.
1416  */
1417 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10>
1418 class MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>
1419 {
1420  friend class MemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1421  friend class ParameterizedMemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1422  friend class ParameterizedMemberFunctionConst<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1423 
1424  protected:
1425 
1426  /**
1427  * Calls a function defined by the function pointer the class object and the function parameters.
1428  * @param functionClass Class object holding the member function to call
1429  * @param functionPointer Pointer of the member function to call
1430  * @param param0 First function parameter
1431  * @param param1 Second function parameter
1432  * @param param2 Third function parameter
1433  * @param param3 Fourth function parameter
1434  * @param param4 Fifth function parameter
1435  * @param param5 Sixth function parameter
1436  * @param param6 Seventh function parameter
1437  * @param param7 Eighth function parameter
1438  * @param param8 Ninth function parameter
1439  * @param param9 10th function parameter
1440  * @param param10 11th function parameter
1441  * @return Return value
1442  */
1443  static inline RT call(CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass);
1444 
1445  /**
1446  * Calls a const function defined by the function pointer the class object and the function parameters.
1447  * @param functionClass Class object holding the member function to call
1448  * @param functionPointer Pointer of the member function to call
1449  * @param param0 First function parameter
1450  * @param param1 Second function parameter
1451  * @param param2 Third function parameter
1452  * @param param3 Fourth function parameter
1453  * @param param4 Fifth function parameter
1454  * @param param5 Sixth function parameter
1455  * @param param6 Seventh function parameter
1456  * @param param7 Eighth function parameter
1457  * @param param8 Ninth function parameter
1458  * @param param9 10th function parameter
1459  * @param param10 11th function parameter
1460  * @return Return value
1461  */
1462  static inline RT call(const CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>::TypeConst functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass);
1463 };
1464 
1465 /**
1466  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
1467  * @see MemberFunctionCaller.
1468  */
1469 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9>
1470 class MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>
1471 {
1472  friend class MemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1473  friend class ParameterizedMemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1474  friend class ParameterizedMemberFunctionConst<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1475 
1476  protected:
1477 
1478  /**
1479  * Calls a function defined by the function pointer the class object and the function parameters.
1480  * @param functionClass Class object holding the member function to call
1481  * @param functionPointer Pointer of the member function to call
1482  * @param param0 First function parameter
1483  * @param param1 Second function parameter
1484  * @param param2 Third function parameter
1485  * @param param3 Fourth function parameter
1486  * @param param4 Fifth function parameter
1487  * @param param5 Sixth function parameter
1488  * @param param6 Seventh function parameter
1489  * @param param7 Eighth function parameter
1490  * @param param8 Ninth function parameter
1491  * @param param9 10th function parameter
1492  * @return Return value
1493  */
1494  static inline RT call(CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass);
1495 
1496  /**
1497  * Calls a const function defined by the function pointer the class object and the function parameters.
1498  * @param functionClass Class object holding the member function to call
1499  * @param functionPointer Pointer of the member function to call
1500  * @param param0 First function parameter
1501  * @param param1 Second function parameter
1502  * @param param2 Third function parameter
1503  * @param param3 Fourth function parameter
1504  * @param param4 Fifth function parameter
1505  * @param param5 Sixth function parameter
1506  * @param param6 Seventh function parameter
1507  * @param param7 Eighth function parameter
1508  * @param param8 Ninth function parameter
1509  * @param param9 10th function parameter
1510  * @return Return value
1511  */
1512  static inline RT call(const CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>::TypeConst functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass);
1513 };
1514 
1515 /**
1516  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
1517  * @see MemberFunctionCaller.
1518  */
1519 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8>
1520 class MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>
1521 {
1522  friend class MemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1523  friend class ParameterizedMemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1524  friend class ParameterizedMemberFunctionConst<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1525 
1526  protected:
1527 
1528  /**
1529  * Calls a function defined by the function pointer the class object and the function parameters.
1530  * @param functionClass Class object holding the member function to call
1531  * @param functionPointer Pointer of the member function to call
1532  * @param param0 First function parameter
1533  * @param param1 Second function parameter
1534  * @param param2 Third function parameter
1535  * @param param3 Fourth function parameter
1536  * @param param4 Fifth function parameter
1537  * @param param5 Sixth function parameter
1538  * @param param6 Seventh function parameter
1539  * @param param7 Eighth function parameter
1540  * @param param8 Ninth function parameter
1541  * @return Return value
1542  */
1544 
1545  /**
1546  * Calls a const function defined by the function pointer the class object and the function parameters.
1547  * @param functionClass Class object holding the member function to call
1548  * @param functionPointer Pointer of the member function to call
1549  * @param param0 First function parameter
1550  * @param param1 Second function parameter
1551  * @param param2 Third function parameter
1552  * @param param3 Fourth function parameter
1553  * @param param4 Fifth function parameter
1554  * @param param5 Sixth function parameter
1555  * @param param6 Seventh function parameter
1556  * @param param7 Eighth function parameter
1557  * @param param8 Ninth function parameter
1558  * @return Return value
1559  */
1561 };
1562 
1563 /**
1564  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
1565  * @see MemberFunctionCaller.
1566  */
1567 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7>
1569 {
1570  friend class MemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1571  friend class ParameterizedMemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1572  friend class ParameterizedMemberFunctionConst<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1573 
1574  protected:
1575 
1576  /**
1577  * Calls a function defined by the function pointer the class object and the function parameters.
1578  * @param functionClass Class object holding the member function to call
1579  * @param functionPointer Pointer of the member function to call
1580  * @param param0 First function parameter
1581  * @param param1 Second function parameter
1582  * @param param2 Third function parameter
1583  * @param param3 Fourth function parameter
1584  * @param param4 Fifth function parameter
1585  * @param param5 Sixth function parameter
1586  * @param param6 Seventh function parameter
1587  * @param param7 Eighth function parameter
1588  * @return Return value
1589  */
1591 
1592  /**
1593  * Calls a const function defined by the function pointer the class object and the function parameters.
1594  * @param functionClass Class object holding the member function to call
1595  * @param functionPointer Pointer of the member function to call
1596  * @param param0 First function parameter
1597  * @param param1 Second function parameter
1598  * @param param2 Third function parameter
1599  * @param param3 Fourth function parameter
1600  * @param param4 Fifth function parameter
1601  * @param param5 Sixth function parameter
1602  * @param param6 Seventh function parameter
1603  * @param param7 Eighth function parameter
1604  * @return Return value
1605  */
1607 };
1608 
1609 /**
1610  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
1611  * @see MemberFunctionCaller.
1612  */
1613 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6>
1615 {
1616  friend class MemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
1619 
1620  protected:
1621 
1622  /**
1623  * Calls a function defined by the function pointer the class object and the function parameters.
1624  * @param functionClass Class object holding the member function to call
1625  * @param functionPointer Pointer of the member function to call
1626  * @param param0 First function parameter
1627  * @param param1 Second function parameter
1628  * @param param2 Third function parameter
1629  * @param param3 Fourth function parameter
1630  * @param param4 Fifth function parameter
1631  * @param param5 Sixth function parameter
1632  * @param param6 Seventh function parameter
1633  * @return Return value
1634  */
1636 
1637  /**
1638  * Calls a const function defined by the function pointer the class object and the function parameters.
1639  * @param functionClass Class object holding the member function to call
1640  * @param functionPointer Pointer of the member function to call
1641  * @param param0 First function parameter
1642  * @param param1 Second function parameter
1643  * @param param2 Third function parameter
1644  * @param param3 Fourth function parameter
1645  * @param param4 Fifth function parameter
1646  * @param param5 Sixth function parameter
1647  * @param param6 Seventh function parameter
1648  * @return Return value
1649  */
1651 };
1652 
1653 /**
1654  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
1655  * @see MemberFunctionCaller.
1656  */
1657 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5>
1659 {
1663 
1664  protected:
1665 
1666  /**
1667  * Calls a function defined by the function pointer the class object and the function parameters.
1668  * @param functionClass Class object holding the member function to call
1669  * @param functionPointer Pointer of the member function to call
1670  * @param param0 First function parameter
1671  * @param param1 Second function parameter
1672  * @param param2 Third function parameter
1673  * @param param3 Fourth function parameter
1674  * @param param4 Fifth function parameter
1675  * @param param5 Sixth function parameter
1676  * @return Return value
1677  */
1679 
1680  /**
1681  * Calls a const function defined by the function pointer the class object and the function parameters.
1682  * @param functionClass Class object holding the member function to call
1683  * @param functionPointer Pointer of the member function to call
1684  * @param param0 First function parameter
1685  * @param param1 Second function parameter
1686  * @param param2 Third function parameter
1687  * @param param3 Fourth function parameter
1688  * @param param4 Fifth function parameter
1689  * @param param5 Sixth function parameter
1690  * @return Return value
1691  */
1693 };
1694 
1695 /**
1696  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
1697  * @see MemberFunctionCaller.
1698  */
1699 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4>
1701 {
1705 
1706  protected:
1707 
1708  /**
1709  * Calls a function defined by the function pointer the class object and the function parameters.
1710  * @param functionClass Class object holding the member function to call
1711  * @param functionPointer Pointer of the member function to call
1712  * @param param0 First function parameter
1713  * @param param1 Second function parameter
1714  * @param param2 Third function parameter
1715  * @param param3 Fourth function parameter
1716  * @param param4 Fifth function parameter
1717  * @return Return value
1718  */
1720 
1721  /**
1722  * Calls a const function defined by the function pointer the class object and the function parameters.
1723  * @param functionClass Class object holding the member function to call
1724  * @param functionPointer Pointer of the member function to call
1725  * @param param0 First function parameter
1726  * @param param1 Second function parameter
1727  * @param param2 Third function parameter
1728  * @param param3 Fourth function parameter
1729  * @param param4 Fifth function parameter
1730  * @return Return value
1731  */
1733 };
1734 
1735 /**
1736  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
1737  * @see MemberFunctionCaller.
1738  */
1739 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3>
1741 {
1745 
1746  protected:
1747 
1748  /**
1749  * Calls a function defined by the function pointer the class object and the function parameters.
1750  * @param functionClass Class object holding the member function to call
1751  * @param functionPointer Pointer of the member function to call
1752  * @param param0 First function parameter
1753  * @param param1 Second function parameter
1754  * @param param2 Third function parameter
1755  * @param param3 Fourth function parameter
1756  * @return Return value
1757  */
1759 
1760  /**
1761  * Calls a const function defined by the function pointer the class object and the function parameters.
1762  * @param functionClass Class object holding the member function to call
1763  * @param functionPointer Pointer of the member function to call
1764  * @param param0 First function parameter
1765  * @param param1 Second function parameter
1766  * @param param2 Third function parameter
1767  * @param param3 Fourth function parameter
1768  * @return Return value
1769  */
1771 };
1772 
1773 /**
1774  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
1775  * @see MemberFunctionCaller.
1776  */
1777 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2>
1779 {
1783 
1784  protected:
1785 
1786  /**
1787  * Calls a function defined by the function pointer the class object and the function parameters.
1788  * @param functionClass Class object holding the member function to call
1789  * @param functionPointer Pointer of the member function to call
1790  * @param param0 First function parameter
1791  * @param param1 Second function parameter
1792  * @param param2 Third function parameter
1793  * @return Return value
1794  */
1796 
1797  /**
1798  * Calls a const function defined by the function pointer the class object and the function parameters.
1799  * @param functionClass Class object holding the member function to call
1800  * @param functionPointer Pointer of the member function to call
1801  * @param param0 First function parameter
1802  * @param param1 Second function parameter
1803  * @param param2 Third function parameter
1804  * @return Return value
1805  */
1807 };
1808 
1809 /**
1810  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
1811  * @see MemberFunctionCaller.
1812  */
1813 template <typename CT, typename RT, typename PT0, typename PT1>
1815 {
1819 
1820  protected:
1821 
1822  /**
1823  * Calls a function defined by the function pointer the class object and the function parameters.
1824  * @param functionClass Class object holding the member function to call
1825  * @param functionPointer Pointer of the member function to call
1826  * @param param0 First function parameter
1827  * @param param1 Second function parameter
1828  * @return Return value
1829  */
1831 
1832  /**
1833  * Calls a const function defined by the function pointer the class object and the function parameters.
1834  * @param functionClass Class object holding the member function to call
1835  * @param functionPointer Pointer of the member function to call
1836  * @param param0 First function parameter
1837  * @param param1 Second function parameter
1838  * @return Return value
1839  */
1841 };
1842 
1843 /**
1844  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
1845  * @see MemberFunctionCaller.
1846  */
1847 template <typename CT, typename RT, typename PT0>
1849 {
1853 
1854  protected:
1855 
1856  /**
1857  * Calls a function defined by the function pointer the class object and the function parameters.
1858  * @param functionClass Class object holding the member function to call
1859  * @param functionPointer Pointer of the member function to call
1860  * @param param0 First function parameter
1861  * @return Return value
1862  */
1864 
1865  /**
1866  * Calls a const function defined by the function pointer the class object and the function parameters.
1867  * @param functionClass Class object holding the member function to call
1868  * @param functionPointer Pointer of the member function to call
1869  * @param param0 First function parameter
1870  * @return Return value
1871  */
1873 };
1874 
1875 /**
1876  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
1877  * @see MemberFunctionCaller.
1878  */
1879 template <typename CT, typename RT>
1881 {
1885 
1886  protected:
1887 
1888  /**
1889  * Calls a function defined by the function pointer the class object and the function parameters.
1890  * @param functionClass Class object holding the member function to call
1891  * @param functionPointer Pointer of the member function to call
1892  * @return Return value
1893  */
1895 
1896  /**
1897  * Calls a const function defined by the function pointer the class object and the function parameters.
1898  * @param functionClass Class object holding the member function to call
1899  * @param functionPointer Pointer of the member function to call
1900  * @return Return value
1901  */
1903 };
1904 
1905 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
1906 inline RT MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>::call(CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, PT18 param18, PT19 param19)
1907 {
1908  ocean_assert(functionClass && functionPointer);
1909  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17, param18, param19);
1910 }
1911 
1912 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
1913 inline RT MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>::call(const CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>::TypeConst functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, PT18 param18, PT19 param19)
1914 {
1915  ocean_assert(functionClass && functionPointer);
1916  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17, param18, param19);
1917 }
1918 
1919 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18>
1920 inline RT MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, NullClass>::call(CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, PT18 param18, NullClass)
1921 {
1922  ocean_assert(functionClass && functionPointer);
1923  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17, param18);
1924 }
1925 
1926 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18>
1927 inline RT MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, NullClass>::call(const CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, NullClass>::TypeConst functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, PT18 param18, NullClass)
1928 {
1929  ocean_assert(functionClass && functionPointer);
1930  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17, param18);
1931 }
1932 
1933 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17>
1934 inline RT MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, NullClass, NullClass>::call(CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, NullClass, NullClass)
1935 {
1936  ocean_assert(functionClass && functionPointer);
1937  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17);
1938 }
1939 
1940 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17>
1941 inline RT MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, NullClass, NullClass>::call(const CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, NullClass, NullClass>::TypeConst functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, NullClass, NullClass)
1942 {
1943  ocean_assert(functionClass && functionPointer);
1944  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17);
1945 }
1946 
1947 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16>
1948 inline RT MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, NullClass, NullClass, NullClass>::call(CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, NullClass, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, NullClass, NullClass, NullClass)
1949 {
1950  ocean_assert(functionClass && functionPointer);
1951  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16);
1952 }
1953 
1954 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16>
1955 inline RT MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, NullClass, NullClass, NullClass>::call(const CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, NullClass, NullClass, NullClass>::TypeConst functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, NullClass, NullClass, NullClass)
1956 {
1957  ocean_assert(functionClass && functionPointer);
1958  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16);
1959 }
1960 
1961 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15>
1962 inline RT MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, NullClass, NullClass, NullClass, NullClass>::call(CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, NullClass, NullClass, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, NullClass, NullClass, NullClass, NullClass)
1963 {
1964  ocean_assert(functionClass && functionPointer);
1965  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15);
1966 }
1967 
1968 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15>
1969 inline RT MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, NullClass, NullClass, NullClass, NullClass>::call(const CT* functionClass, typename MemberFunctionPointerMaker<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, NullClass, NullClass, NullClass, NullClass>::TypeConst functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, NullClass, NullClass, NullClass, NullClass)
1970 {
1971  ocean_assert(functionClass && functionPointer);
1972  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15);
1973 }
1974 
1975 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14>
1977 {
1978  ocean_assert(functionClass && functionPointer);
1979  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14);
1980 }
1981 
1982 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14>
1984 {
1985  ocean_assert(functionClass && functionPointer);
1986  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14);
1987 }
1988 
1989 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13>
1991 {
1992  ocean_assert(functionClass && functionPointer);
1993  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13);
1994 }
1995 
1996 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13>
1998 {
1999  ocean_assert(functionClass && functionPointer);
2000  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13);
2001 }
2002 
2003 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12>
2005 {
2006  ocean_assert(functionClass && functionPointer);
2007  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12);
2008 }
2009 
2010 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12>
2012 {
2013  ocean_assert(functionClass && functionPointer);
2014  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12);
2015 }
2016 
2017 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11>
2019 {
2020  ocean_assert(functionClass && functionPointer);
2021  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11);
2022 }
2023 
2024 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11>
2026 {
2027  ocean_assert(functionClass && functionPointer);
2028  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11);
2029 }
2030 
2031 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10>
2033 {
2034  ocean_assert(functionClass && functionPointer);
2035  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10);
2036 }
2037 
2038 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10>
2040 {
2041  ocean_assert(functionClass && functionPointer);
2042  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10);
2043 }
2044 
2045 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9>
2047 {
2048  ocean_assert(functionClass && functionPointer);
2049  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9);
2050 }
2051 
2052 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9>
2054 {
2055  ocean_assert(functionClass && functionPointer);
2056  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9);
2057 }
2058 
2059 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8>
2061 {
2062  ocean_assert(functionClass && functionPointer);
2063  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8);
2064 }
2065 
2066 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8>
2068 {
2069  ocean_assert(functionClass && functionPointer);
2070  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7, param8);
2071 }
2072 
2073 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7>
2075 {
2076  ocean_assert(functionClass && functionPointer);
2077  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7);
2078 }
2079 
2080 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7>
2082 {
2083  ocean_assert(functionClass && functionPointer);
2084  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6, param7);
2085 }
2086 
2087 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6>
2089 {
2090  ocean_assert(functionClass && functionPointer);
2091  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6);
2092 }
2093 
2094 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6>
2096 {
2097  ocean_assert(functionClass && functionPointer);
2098  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5, param6);
2099 }
2100 
2101 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5>
2103 {
2104  ocean_assert(functionClass && functionPointer);
2105  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5);
2106 }
2107 
2108 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5>
2110 {
2111  ocean_assert(functionClass && functionPointer);
2112  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4, param5);
2113 }
2114 
2115 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4>
2117 {
2118  ocean_assert(functionClass && functionPointer);
2119  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4);
2120 }
2121 
2122 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4>
2124 {
2125  ocean_assert(functionClass && functionPointer);
2126  return (functionClass->*functionPointer)(param0, param1, param2, param3, param4);
2127 }
2128 
2129 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3>
2131 {
2132  ocean_assert(functionClass && functionPointer);
2133  return (functionClass->*functionPointer)(param0, param1, param2, param3);
2134 }
2135 
2136 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3>
2138 {
2139  ocean_assert(functionClass && functionPointer);
2140  return (functionClass->*functionPointer)(param0, param1, param2, param3);
2141 }
2142 
2143 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2>
2145 {
2146  ocean_assert(functionClass && functionPointer);
2147  return (functionClass->*functionPointer)(param0, param1, param2);
2148 }
2149 
2150 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2>
2152 {
2153  ocean_assert(functionClass && functionPointer);
2154  return (functionClass->*functionPointer)(param0, param1, param2);
2155 }
2156 
2157 template <typename CT, typename RT, typename PT0, typename PT1>
2159 {
2160  ocean_assert(functionClass && functionPointer);
2161  return (functionClass->*functionPointer)(param0, param1);
2162 }
2163 
2164 template <typename CT, typename RT, typename PT0, typename PT1>
2166 {
2167  ocean_assert(functionClass && functionPointer);
2168  return (functionClass->*functionPointer)(param0, param1);
2169 }
2170 
2171 template <typename CT, typename RT, typename PT0>
2173 {
2174  ocean_assert(functionClass && functionPointer);
2175  return (functionClass->*functionPointer)(param0);
2176 }
2177 
2178 template <typename CT, typename RT, typename PT0>
2180 {
2181  ocean_assert(functionClass && functionPointer);
2182  return (functionClass->*functionPointer)(param0);
2183 }
2184 
2185 template <typename CT, typename RT>
2187 {
2188  ocean_assert(functionClass && functionPointer);
2189  return (functionClass->*functionPointer)();
2190 }
2191 
2192 template <typename CT, typename RT>
2194 {
2195  ocean_assert(functionClass && functionPointer);
2196  return (functionClass->*functionPointer)();
2197 }
2198 
2199 /**
2200  * This class implements a helper class providing a functionality to call a static function defined by a function pointer.
2201  * Because of being a helper class there is no need to use it directly.<br>
2202  * The template parameters define the function's return type (RT) and twenty possible function parameters (PT0 - PT19).<br>
2203  * Therefore, functions with at most eight function parameters are supported.<br>
2204  * @tparam RT Specifies the return type of the callback function
2205  * @tparam PT0 Specifies the 1st possible function parameter type
2206  * @tparam PT1 Specifies the 2rd possible function parameter type
2207  * @tparam PT2 Specifies the 3rd possible function parameter type
2208  * @tparam PT3 Specifies the 4th possible function parameter type
2209  * @tparam PT4 Specifies the 5th possible function parameter type
2210  * @tparam PT5 Specifies the 6th possible function parameter type
2211  * @tparam PT6 Specifies the 7th possible function parameter type
2212  * @tparam PT7 Specifies the 8th possible function parameter type
2213  * @tparam PT8 Specifies the 9th possible function parameter type
2214  * @tparam PT9 Specifies the 10th possible function parameter type
2215  * @tparam PT10 Specifies the 11th possible function parameter type
2216  * @tparam PT11 Specifies the 12th possible function parameter type
2217  * @tparam PT12 Specifies the 13th possible function parameter type
2218  * @tparam PT13 Specifies the 14th possible function parameter type
2219  * @tparam PT14 Specifies the 15th possible function parameter type
2220  * @tparam PT15 Specifies the 16th possible function parameter type
2221  * @tparam PT16 Specifies the 17th possible function parameter type
2222  * @tparam PT17 Specifies the 18th possible function parameter type
2223  * @tparam PT18 Specifies the 19th possible function parameter type
2224  * @tparam PT19 Specifies the 20th possible function parameter type
2225  * @ingroup base
2226  */
2227 template <typename RT, typename PT0 = NullClass, typename PT1 = NullClass, typename PT2 = NullClass, typename PT3 = NullClass, typename PT4 = NullClass, typename PT5 = NullClass, typename PT6 = NullClass, typename PT7 = NullClass, typename PT8 = NullClass, typename PT9 = NullClass, typename PT10 = NullClass, typename PT11 = NullClass, typename PT12 = NullClass, typename PT13 = NullClass, typename PT14 = NullClass, typename PT15 = NullClass, typename PT16 = NullClass, typename PT17 = NullClass, typename PT18 = NullClass, typename PT19 = NullClass>
2229 {
2230  friend class StaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>;
2231  friend class ParameterizedStaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>;
2232 
2233  protected:
2234 
2235  /**
2236  * Calls a function defined by the function pointer the class object and the function parameters.
2237  * @param functionPointer Pointer of the member function to call
2238  * @param param0 First function parameter
2239  * @param param1 Second function parameter
2240  * @param param2 Third function parameter
2241  * @param param3 Fourth function parameter
2242  * @param param4 Fifth function parameter
2243  * @param param5 Six function parameter
2244  * @param param6 Seventh function parameter
2245  * @param param7 Eighth function parameter
2246  * @param param8 Ninth function parameter
2247  * @param param9 Tenth function parameter
2248  * @param param10 11th function parameter
2249  * @param param11 12th function parameter
2250  * @param param12 13th function parameter
2251  * @param param13 14th function parameter
2252  * @param param14 15th function parameter
2253  * @param param15 16th function parameter
2254  * @param param16 17th function parameter
2255  * @param param17 18th function parameter
2256  * @param param18 19th function parameter
2257  * @param param19 20th function parameter
2258  * @return Return value
2259  */
2260  static inline RT call(typename StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, PT18 param18, PT19 param19);
2261 };
2262 
2263 
2264 /**
2265  * This class implements a helper class providing a functionality to call a static function defined by a function pointer.
2266  * Because of being a helper class there is no need to use it directly.<br>
2267  * The template parameters define the function's return type (RT) and 19 possible function parameters (PT0 - PT18).<br>
2268  * Therefore, functions with at most eight function parameters are supported.<br>
2269  */
2270 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18>
2271 class StaticFunctionCaller<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, NullClass>
2272 {
2273  friend class StaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, NullClass>;
2274  friend class ParameterizedStaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, NullClass>;
2275 
2276  protected:
2277 
2278  /**
2279  * Calls a function defined by the function pointer the class object and the function parameters.
2280  * @param functionPointer Pointer of the member function to call
2281  * @param param0 First function parameter
2282  * @param param1 Second function parameter
2283  * @param param2 Third function parameter
2284  * @param param3 Fourth function parameter
2285  * @param param4 Fifth function parameter
2286  * @param param5 Six function parameter
2287  * @param param6 Seventh function parameter
2288  * @param param7 Eighth function parameter
2289  * @param param8 Ninth function parameter
2290  * @param param9 Tenth function parameter
2291  * @param param10 11th function parameter
2292  * @param param11 12th function parameter
2293  * @param param12 13th function parameter
2294  * @param param13 14th function parameter
2295  * @param param14 15th function parameter
2296  * @param param15 16th function parameter
2297  * @param param16 17th function parameter
2298  * @param param17 18th function parameter
2299  * @param param18 19th function parameter
2300  * @return Return value
2301  */
2302  static inline RT call(typename StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, PT18 param18, NullClass);
2303 };
2304 
2305 /**
2306  * This class implements a helper class providing a functionality to call a static function defined by a function pointer.
2307  * Because of being a helper class there is no need to use it directly.<br>
2308  * The template parameters define the function's return type (RT) and 18 possible function parameters (PT0 - PT17).<br>
2309  * Therefore, functions with at most eight function parameters are supported.<br>
2310  */
2311 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17>
2312 class StaticFunctionCaller<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, NullClass, NullClass>
2313 {
2314  friend class StaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, NullClass, NullClass>;
2315  friend class ParameterizedStaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, NullClass, NullClass>;
2316 
2317  protected:
2318 
2319  /**
2320  * Calls a function defined by the function pointer the class object and the function parameters.
2321  * @param functionPointer Pointer of the member function to call
2322  * @param param0 First function parameter
2323  * @param param1 Second function parameter
2324  * @param param2 Third function parameter
2325  * @param param3 Fourth function parameter
2326  * @param param4 Fifth function parameter
2327  * @param param5 Six function parameter
2328  * @param param6 Seventh function parameter
2329  * @param param7 Eighth function parameter
2330  * @param param8 Ninth function parameter
2331  * @param param9 Tenth function parameter
2332  * @param param10 11th function parameter
2333  * @param param11 12th function parameter
2334  * @param param12 13th function parameter
2335  * @param param13 14th function parameter
2336  * @param param14 15th function parameter
2337  * @param param15 16th function parameter
2338  * @param param16 17th function parameter
2339  * @param param17 18th function parameter
2340  * @return Return value
2341  */
2342  static inline RT call(typename StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, NullClass, NullClass);
2343 };
2344 
2345 /**
2346  * This class implements a helper class providing a functionality to call a static function defined by a function pointer.
2347  * Because of being a helper class there is no need to use it directly.<br>
2348  * The template parameters define the function's return type (RT) and 17 possible function parameters (PT0 - PT16).<br>
2349  * Therefore, functions with at most eight function parameters are supported.<br>
2350  */
2351 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16>
2352 class StaticFunctionCaller<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, NullClass, NullClass, NullClass>
2353 {
2354  friend class StaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, NullClass, NullClass, NullClass>;
2355  friend class ParameterizedStaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, NullClass, NullClass, NullClass>;
2356 
2357  protected:
2358 
2359  /**
2360  * Calls a function defined by the function pointer the class object and the function parameters.
2361  * @param functionPointer Pointer of the member function to call
2362  * @param param0 First function parameter
2363  * @param param1 Second function parameter
2364  * @param param2 Third function parameter
2365  * @param param3 Fourth function parameter
2366  * @param param4 Fifth function parameter
2367  * @param param5 Six function parameter
2368  * @param param6 Seventh function parameter
2369  * @param param7 Eighth function parameter
2370  * @param param8 Ninth function parameter
2371  * @param param9 Tenth function parameter
2372  * @param param10 11th function parameter
2373  * @param param11 12th function parameter
2374  * @param param12 13th function parameter
2375  * @param param13 14th function parameter
2376  * @param param14 15th function parameter
2377  * @param param15 16th function parameter
2378  * @param param16 17th function parameter
2379  * @return Return value
2380  */
2381  static inline RT call(typename StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, NullClass, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, NullClass, NullClass, NullClass);
2382 };
2383 
2384 /**
2385  * This class implements a helper class providing a functionality to call a static function defined by a function pointer.
2386  * Because of being a helper class there is no need to use it directly.<br>
2387  * The template parameters define the function's return type (RT) and 16 possible function parameters (PT0 - PT15).<br>
2388  * Therefore, functions with at most eight function parameters are supported.<br>
2389  */
2390 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15>
2391 class StaticFunctionCaller<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, NullClass, NullClass, NullClass, NullClass>
2392 {
2393  friend class StaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, NullClass, NullClass, NullClass, NullClass>;
2394  friend class ParameterizedStaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, NullClass, NullClass, NullClass, NullClass>;
2395 
2396  protected:
2397 
2398  /**
2399  * Calls a function defined by the function pointer the class object and the function parameters.
2400  * @param functionPointer Pointer of the member function to call
2401  * @param param0 First function parameter
2402  * @param param1 Second function parameter
2403  * @param param2 Third function parameter
2404  * @param param3 Fourth function parameter
2405  * @param param4 Fifth function parameter
2406  * @param param5 Six function parameter
2407  * @param param6 Seventh function parameter
2408  * @param param7 Eighth function parameter
2409  * @param param8 Ninth function parameter
2410  * @param param9 Tenth function parameter
2411  * @param param10 11th function parameter
2412  * @param param11 12th function parameter
2413  * @param param12 13th function parameter
2414  * @param param13 14th function parameter
2415  * @param param14 15th function parameter
2416  * @param param15 16th function parameter
2417  * @return Return value
2418  */
2419  static inline RT call(typename StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, NullClass, NullClass, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, NullClass, NullClass, NullClass, NullClass);
2420 };
2421 
2422 /**
2423  * This class implements a helper class providing a functionality to call a static function defined by a function pointer.
2424  * Because of being a helper class there is no need to use it directly.<br>
2425  * The template parameters define the function's return type (RT) and 15 possible function parameters (PT0 - PT14).<br>
2426  * Therefore, functions with at most eight function parameters are supported.<br>
2427  */
2428 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14>
2429 class StaticFunctionCaller<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, NullClass, NullClass, NullClass, NullClass, NullClass>
2430 {
2431  friend class StaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, NullClass, NullClass, NullClass, NullClass, NullClass>;
2432  friend class ParameterizedStaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, NullClass, NullClass, NullClass, NullClass, NullClass>;
2433 
2434  protected:
2435 
2436  /**
2437  * Calls a function defined by the function pointer the class object and the function parameters.
2438  * @param functionPointer Pointer of the member function to call
2439  * @param param0 First function parameter
2440  * @param param1 Second function parameter
2441  * @param param2 Third function parameter
2442  * @param param3 Fourth function parameter
2443  * @param param4 Fifth function parameter
2444  * @param param5 Six function parameter
2445  * @param param6 Seventh function parameter
2446  * @param param7 Eighth function parameter
2447  * @param param8 Ninth function parameter
2448  * @param param9 Tenth function parameter
2449  * @param param10 11th function parameter
2450  * @param param11 12th function parameter
2451  * @param param12 13th function parameter
2452  * @param param13 14th function parameter
2453  * @param param14 15th function parameter
2454  * @return Return value
2455  */
2456  static inline RT call(typename StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, NullClass, NullClass, NullClass, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, NullClass, NullClass, NullClass, NullClass, NullClass);
2457 };
2458 
2459 /**
2460  * This class implements a helper class providing a functionality to call a static function defined by a function pointer.
2461  * Because of being a helper class there is no need to use it directly.<br>
2462  * The template parameters define the function's return type (RT) and 14 possible function parameters (PT0 - PT13).<br>
2463  * Therefore, functions with at most eight function parameters are supported.<br>
2464  */
2465 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13>
2466 class StaticFunctionCaller<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>
2467 {
2468  friend class StaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
2469  friend class ParameterizedStaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
2470 
2471  protected:
2472 
2473  /**
2474  * Calls a function defined by the function pointer the class object and the function parameters.
2475  * @param functionPointer Pointer of the member function to call
2476  * @param param0 First function parameter
2477  * @param param1 Second function parameter
2478  * @param param2 Third function parameter
2479  * @param param3 Fourth function parameter
2480  * @param param4 Fifth function parameter
2481  * @param param5 Six function parameter
2482  * @param param6 Seventh function parameter
2483  * @param param7 Eighth function parameter
2484  * @param param8 Ninth function parameter
2485  * @param param9 Tenth function parameter
2486  * @param param10 11th function parameter
2487  * @param param11 12th function parameter
2488  * @param param12 13th function parameter
2489  * @param param13 14th function parameter
2490  * @return Return value
2491  */
2492  static inline RT call(typename StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass);
2493 };
2494 
2495 /**
2496  * This class implements a helper class providing a functionality to call a static function defined by a function pointer.
2497  * Because of being a helper class there is no need to use it directly.<br>
2498  * The template parameters define the function's return type (RT) and 13 possible function parameters (PT0 - PT12).<br>
2499  * Therefore, functions with at most eight function parameters are supported.<br>
2500  */
2501 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12>
2502 class StaticFunctionCaller<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>
2503 {
2504  friend class StaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
2505  friend class ParameterizedStaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
2506 
2507  protected:
2508 
2509  /**
2510  * Calls a function defined by the function pointer the class object and the function parameters.
2511  * @param functionPointer Pointer of the member function to call
2512  * @param param0 First function parameter
2513  * @param param1 Second function parameter
2514  * @param param2 Third function parameter
2515  * @param param3 Fourth function parameter
2516  * @param param4 Fifth function parameter
2517  * @param param5 Six function parameter
2518  * @param param6 Seventh function parameter
2519  * @param param7 Eighth function parameter
2520  * @param param8 Ninth function parameter
2521  * @param param9 Tenth function parameter
2522  * @param param10 11th function parameter
2523  * @param param11 12th function parameter
2524  * @param param12 13th function parameter
2525  * @return Return value
2526  */
2527  static inline RT call(typename StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass);
2528 };
2529 
2530 /**
2531  * This class implements a helper class providing a functionality to call a static function defined by a function pointer.
2532  * Because of being a helper class there is no need to use it directly.<br>
2533  * The template parameters define the function's return type (RT) and 12 possible function parameters (PT0 - PT11).<br>
2534  * Therefore, functions with at most eight function parameters are supported.<br>
2535  */
2536 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11>
2537 class StaticFunctionCaller<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>
2538 {
2539  friend class StaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
2540  friend class ParameterizedStaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
2541 
2542  protected:
2543 
2544  /**
2545  * Calls a function defined by the function pointer the class object and the function parameters.
2546  * @param functionPointer Pointer of the member function to call
2547  * @param param0 First function parameter
2548  * @param param1 Second function parameter
2549  * @param param2 Third function parameter
2550  * @param param3 Fourth function parameter
2551  * @param param4 Fifth function parameter
2552  * @param param5 Six function parameter
2553  * @param param6 Seventh function parameter
2554  * @param param7 Eighth function parameter
2555  * @param param8 Ninth function parameter
2556  * @param param9 Tenth function parameter
2557  * @param param10 11th function parameter
2558  * @param param11 12th function parameter
2559  * @return Return value
2560  */
2561  static inline RT call(typename StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass);
2562 };
2563 
2564 /**
2565  * This class implements a helper class providing a functionality to call a static function defined by a function pointer.
2566  * Because of being a helper class there is no need to use it directly.<br>
2567  * The template parameters define the function's return type (RT) and 11 possible function parameters (PT0 - PT10).<br>
2568  * Therefore, functions with at most eight function parameters are supported.<br>
2569  */
2570 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10>
2571 class StaticFunctionCaller<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>
2572 {
2573  friend class StaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
2574  friend class ParameterizedStaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
2575 
2576  protected:
2577 
2578  /**
2579  * Calls a function defined by the function pointer the class object and the function parameters.
2580  * @param functionPointer Pointer of the member function to call
2581  * @param param0 First function parameter
2582  * @param param1 Second function parameter
2583  * @param param2 Third function parameter
2584  * @param param3 Fourth function parameter
2585  * @param param4 Fifth function parameter
2586  * @param param5 Six function parameter
2587  * @param param6 Seventh function parameter
2588  * @param param7 Eighth function parameter
2589  * @param param8 Ninth function parameter
2590  * @param param9 Tenth function parameter
2591  * @param param10 11th function parameter
2592  * @return Return value
2593  */
2594  static inline RT call(typename StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass);
2595 };
2596 
2597 /**
2598  * This class implements a helper class providing a functionality to call a static function defined by a function pointer.
2599  * Because of being a helper class there is no need to use it directly.<br>
2600  * The template parameters define the function's return type (RT) and 10 possible function parameters (PT0 - PT9).<br>
2601  * Therefore, functions with at most eight function parameters are supported.<br>
2602  */
2603 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9>
2604 class StaticFunctionCaller<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>
2605 {
2606  friend class StaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
2607  friend class ParameterizedStaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
2608 
2609  protected:
2610 
2611  /**
2612  * Calls a function defined by the function pointer the class object and the function parameters.
2613  * @param functionPointer Pointer of the member function to call
2614  * @param param0 First function parameter
2615  * @param param1 Second function parameter
2616  * @param param2 Third function parameter
2617  * @param param3 Fourth function parameter
2618  * @param param4 Fifth function parameter
2619  * @param param5 Six function parameter
2620  * @param param6 Seventh function parameter
2621  * @param param7 Eighth function parameter
2622  * @param param8 Ninth function parameter
2623  * @param param9 Tenth function parameter
2624  * @return Return value
2625  */
2627 };
2628 
2629 /**
2630  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
2631  * @see StaticFunctionCaller.
2632  */
2633 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8>
2635 {
2636  friend class StaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
2637  friend class ParameterizedStaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
2638 
2639  protected:
2640 
2641  /**
2642  * Calls a function defined by the function pointer the class object and the function parameters.
2643  * @param functionPointer Pointer of the member function to call
2644  * @param param0 First function parameter
2645  * @param param1 Second function parameter
2646  * @param param2 Third function parameter
2647  * @param param3 Fourth function parameter
2648  * @param param4 Fifth function parameter
2649  * @param param5 Sixth function parameter
2650  * @param param6 Seventh function parameter
2651  * @param param7 Eighth function parameter
2652  * @param param8 Ninth function parameter
2653  * @return Return value
2654  */
2656 };
2657 
2658 
2659 /**
2660  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
2661  * @see StaticFunctionCaller.
2662  */
2663 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7>
2665 {
2666  friend class StaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
2667  friend class ParameterizedStaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass>;
2668 
2669  protected:
2670 
2671  /**
2672  * Calls a function defined by the function pointer the class object and the function parameters.
2673  * @param functionPointer Pointer of the member function to call
2674  * @param param0 First function parameter
2675  * @param param1 Second function parameter
2676  * @param param2 Third function parameter
2677  * @param param3 Fourth function parameter
2678  * @param param4 Fifth function parameter
2679  * @param param5 Sixth function parameter
2680  * @param param6 Seventh function parameter
2681  * @param param7 Eighth function parameter
2682  * @return Return value
2683  */
2685 };
2686 
2687 
2688 /**
2689  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
2690  * @see StaticFunctionCaller.
2691  */
2692 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6>
2694 {
2697 
2698  protected:
2699 
2700  /**
2701  * Calls a function defined by the function pointer the class object and the function parameters.
2702  * @param functionPointer Pointer of the member function to call
2703  * @param param0 First function parameter
2704  * @param param1 Second function parameter
2705  * @param param2 Third function parameter
2706  * @param param3 Fourth function parameter
2707  * @param param4 Fifth function parameter
2708  * @param param5 Sixth function parameter
2709  * @param param6 Seventh function parameter
2710  * @return Return value
2711  */
2713 };
2714 
2715 /**
2716  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
2717  * @see StaticFunctionCaller.
2718  */
2719 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5>
2721 {
2724 
2725  protected:
2726 
2727  /**
2728  * Calls a function defined by the function pointer the class object and the function parameters.
2729  * @param functionPointer Pointer of the member function to call
2730  * @param param0 First function parameter
2731  * @param param1 Second function parameter
2732  * @param param2 Third function parameter
2733  * @param param3 Fourth function parameter
2734  * @param param4 Fifth function parameter
2735  * @param param5 Sixth function parameter
2736  * @return Return value
2737  */
2739 };
2740 
2741 /**
2742  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
2743  * @see StaticFunctionCaller.
2744  */
2745 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4>
2747 {
2750 
2751  protected:
2752 
2753  /**
2754  * Calls a function defined by the function pointer the class object and the function parameters.
2755  * @param functionPointer Pointer of the member function to call
2756  * @param param0 First function parameter
2757  * @param param1 Second function parameter
2758  * @param param2 Third function parameter
2759  * @param param3 Fourth function parameter
2760  * @param param4 Fifth function parameter
2761  * @return Return value
2762  */
2764 };
2765 
2766 /**
2767  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
2768  * @see StaticFunctionCaller.
2769  */
2770 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3>
2772 {
2775 
2776  protected:
2777 
2778  /**
2779  * Calls a function defined by the function pointer the class object and the function parameters.
2780  * @param functionPointer Pointer of the member function to call
2781  * @param param0 First function parameter
2782  * @param param1 Second function parameter
2783  * @param param2 Third function parameter
2784  * @param param3 Fourth function parameter
2785  * @return Return value
2786  */
2788 };
2789 
2790 /**
2791  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
2792  * @see StaticFunctionCaller.
2793  */
2794 template <typename RT, typename PT0, typename PT1, typename PT2>
2796 {
2799 
2800  protected:
2801 
2802  /**
2803  * Calls a function defined by the function pointer the class object and the function parameters.
2804  * @param functionPointer Pointer of the member function to call
2805  * @param param0 First function parameter
2806  * @param param1 Second function parameter
2807  * @param param2 Third function parameter
2808  * @return Return value
2809  */
2811 };
2812 
2813 /**
2814  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
2815  * @see StaticFunctionCaller.
2816  */
2817 template <typename RT, typename PT0, typename PT1>
2819 {
2822 
2823  protected:
2824 
2825  /**
2826  * Calls a function defined by the function pointer the class object and the function parameters.
2827  * @param functionPointer Pointer of the member function to call
2828  * @param param0 First function parameter
2829  * @param param1 Second function parameter
2830  * @return Return value
2831  */
2833 };
2834 
2835 /**
2836  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
2837  * @see StaticFunctionCaller.
2838  */
2839 template <typename RT, typename PT0>
2841 {
2844 
2845  protected:
2846 
2847  /**
2848  * Calls a function defined by the function pointer the class object and the function parameters.
2849  * @param functionPointer Pointer of the member function to call
2850  * @param param0 First function parameter
2851  * @return Return value
2852  */
2854 };
2855 
2856 /**
2857  * This class implements a helper class providing a functionality to call a member function defined by the owner class and a local function pointer.
2858  * @see StaticFunctionCaller.
2859  */
2860 template <typename RT>
2862 {
2865 
2866  protected:
2867 
2868  /**
2869  * Calls a function defined by the function pointer the class object and the function parameters.
2870  * @param functionPointer Pointer of the member function to call
2871  * @return Return value
2872  */
2874 };
2875 
2876 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
2877 inline RT StaticFunctionCaller<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>::call(typename StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, PT18 param18, PT19 param19)
2878 {
2879  ocean_assert(functionPointer);
2880  return functionPointer(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17, param18, param19);
2881 }
2882 
2883 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18>
2884 inline RT StaticFunctionCaller<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, NullClass>::call(typename StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, PT18 param18, NullClass)
2885 {
2886  ocean_assert(functionPointer);
2887  return functionPointer(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17, param18);
2888 }
2889 
2890 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17>
2891 inline RT StaticFunctionCaller<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, NullClass, NullClass>::call(typename StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, NullClass, NullClass)
2892 {
2893  ocean_assert(functionPointer);
2894  return functionPointer(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17);
2895 }
2896 
2897 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16>
2898 inline RT StaticFunctionCaller<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, NullClass, NullClass, NullClass>::call(typename StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, NullClass, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, NullClass, NullClass, NullClass)
2899 {
2900  ocean_assert(functionPointer);
2901  return functionPointer(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16);
2902 }
2903 
2904 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15>
2905 inline RT StaticFunctionCaller<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, NullClass, NullClass, NullClass, NullClass>::call(typename StaticFunctionPointerMaker<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, NullClass, NullClass, NullClass, NullClass>::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, NullClass, NullClass, NullClass, NullClass)
2906 {
2907  ocean_assert(functionPointer);
2908  return functionPointer(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15);
2909 }
2910 
2911 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14>
2913 {
2914  ocean_assert(functionPointer);
2915  return functionPointer(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14);
2916 }
2917 
2918 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13>
2920 {
2921  ocean_assert(functionPointer);
2922  return functionPointer(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13);
2923 }
2924 
2925 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12>
2927 {
2928  ocean_assert(functionPointer);
2929  return functionPointer(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12);
2930 }
2931 
2932 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11>
2934 {
2935  ocean_assert(functionPointer);
2936  return functionPointer(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11);
2937 }
2938 
2939 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10>
2941 {
2942  ocean_assert(functionPointer);
2943  return functionPointer(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10);
2944 }
2945 
2946 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9>
2948 {
2949  ocean_assert(functionPointer);
2950  return functionPointer(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9);
2951 }
2952 
2953 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8>
2955 {
2956  ocean_assert(functionPointer);
2957  return functionPointer(param0, param1, param2, param3, param4, param5, param6, param7, param8);
2958 }
2959 
2960 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7>
2962 {
2963  ocean_assert(functionPointer);
2964  return functionPointer(param0, param1, param2, param3, param4, param5, param6, param7);
2965 }
2966 
2967 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6>
2969 {
2970  ocean_assert(functionPointer);
2971  return functionPointer(param0, param1, param2, param3, param4, param5, param6);
2972 }
2973 
2974 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5>
2976 {
2977  ocean_assert(functionPointer);
2978  return functionPointer(param0, param1, param2, param3, param4, param5);
2979 }
2980 
2981 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4>
2983 {
2984  ocean_assert(functionPointer);
2985  return functionPointer(param0, param1, param2, param3, param4);
2986 }
2987 
2988 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3>
2990 {
2991  ocean_assert(functionPointer);
2992  return functionPointer(param0, param1, param2, param3);
2993 }
2994 
2995 template <typename RT, typename PT0, typename PT1, typename PT2>
2997 {
2998  ocean_assert(functionPointer);
2999  return functionPointer(param0, param1, param2);
3000 }
3001 
3002 template <typename RT, typename PT0, typename PT1>
3004 {
3005  ocean_assert(functionPointer);
3006  return functionPointer(param0, param1);
3007 }
3008 
3009 template <typename RT, typename PT0>
3011 {
3012  ocean_assert(functionPointer);
3013  return functionPointer(param0);
3014 }
3015 
3016 template <typename RT>
3018 {
3019  ocean_assert(functionPointer);
3020  return functionPointer();
3021 }
3022 
3023 /**
3024  * This class is the base class for an unparameterized function container.
3025  * This base function container holds no function parameters and therefore can call the encapsulated function with explicit parameters only.<br>
3026  * The template parameters define the function's return type (RT) and twenty possible function parameters (PT0 - PT19).<br>
3027  * @tparam RT Specifies the return type of the callback function
3028  * @tparam PT0 Specifies the 1st possible function parameter type
3029  * @tparam PT1 Specifies the 2rd possible function parameter type
3030  * @tparam PT2 Specifies the 3rd possible function parameter type
3031  * @tparam PT3 Specifies the 4th possible function parameter type
3032  * @tparam PT4 Specifies the 5th possible function parameter type
3033  * @tparam PT5 Specifies the 6th possible function parameter type
3034  * @tparam PT6 Specifies the 7th possible function parameter type
3035  * @tparam PT7 Specifies the 8th possible function parameter type
3036  * @tparam PT8 Specifies the 9th possible function parameter type
3037  * @tparam PT9 Specifies the 10th possible function parameter type
3038  * @tparam PT10 Specifies the 11th possible function parameter type
3039  * @tparam PT11 Specifies the 12th possible function parameter type
3040  * @tparam PT12 Specifies the 13th possible function parameter type
3041  * @tparam PT13 Specifies the 14th possible function parameter type
3042  * @tparam PT14 Specifies the 15th possible function parameter type
3043  * @tparam PT15 Specifies the 16th possible function parameter type
3044  * @tparam PT16 Specifies the 17th possible function parameter type
3045  * @tparam PT17 Specifies the 18th possible function parameter type
3046  * @tparam PT18 Specifies the 19th possible function parameter type
3047  * @tparam PT19 Specifies the 20th possible function parameter type
3048  * @ingroup base
3049  */
3050 template <typename RT, typename PT0 = NullClass, typename PT1 = NullClass, typename PT2 = NullClass, typename PT3 = NullClass, typename PT4 = NullClass, typename PT5 = NullClass, typename PT6 = NullClass, typename PT7 = NullClass, typename PT8 = NullClass, typename PT9 = NullClass, typename PT10 = NullClass, typename PT11 = NullClass, typename PT12 = NullClass, typename PT13 = NullClass, typename PT14 = NullClass, typename PT15 = NullClass, typename PT16 = NullClass, typename PT17 = NullClass, typename PT18 = NullClass, typename PT19 = NullClass>
3052 {
3053  public:
3054 
3055  /**
3056  * Destructs the object.
3057  */
3058  virtual ~FunctionBase();
3059 
3060  /**
3061  * Calls the internal encapsulated function by given parameters.
3062  * @param param0 First parameter
3063  * @param param1 Second parameter
3064  * @param param2 Third parameter
3065  * @param param3 Fourth parameter
3066  * @param param4 Fifth parameter
3067  * @param param5 Sixth parameter
3068  * @param param6 Seventh parameter
3069  * @param param7 Eighth parameter
3070  * @param param8 Ninth parameter
3071  * @param param9 Tenth parameter
3072  * @param param10 11th function parameter
3073  * @param param11 12th function parameter
3074  * @param param12 13th function parameter
3075  * @param param13 14th function parameter
3076  * @param param14 15th function parameter
3077  * @param param15 16th function parameter
3078  * @param param16 17th function parameter
3079  * @param param17 18th function parameter
3080  * @param param18 19th function parameter
3081  * @param param19 20th function parameter
3082  * @return Return value
3083  */
3084  virtual RT call(PT0 param0 = PT0(), PT1 param1 = PT1(), PT2 param2 = PT2(), PT3 param3 = PT3(), PT4 param4 = PT4(), PT5 param5 = PT5(), PT6 param6 = PT6(), PT7 param7 = PT7(), PT8 param8 = PT8(), PT9 param9 = PT9(), PT10 param10 = PT10(), PT11 param11 = PT11(), PT12 param12 = PT12(), PT13 param13 = PT13(), PT14 param14 = PT14(), PT15 param15 = PT15(), PT16 param16 = PT16(), PT17 param17 = PT17(), PT18 param18 = PT18(), PT19 param19 = PT19()) const = 0;
3085 
3086  /**
3087  * Creates a copy of the entire derived object.
3088  * @return Instance copy
3089  */
3090  virtual FunctionBase* copy() const = 0;
3091 
3092  /**
3093  * Returns whether two functions are equal.
3094  * @param functionBase Right callback to check
3095  * @return True, if so
3096  */
3098 };
3099 
3100 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3102 {
3103  // nothing to do here
3104 }
3105 
3106 /**
3107  * This class implements an unparameterized member function container.
3108  * This function container holds no function parameters and therefore can call the encapsulated function with explicit parameters only.
3109  * The template parameters define the function's owner class type (CT), the return type (RT) and twenty possible function parameters (PT0 - PT19).<br>
3110  * This class is a helper class only and used to allow callback functions to be independent from the member function's class type.
3111  * @tparam RT Specifies the return type of the callback function
3112  * @tparam PT0 Specifies the 1st possible function parameter type
3113  * @tparam PT1 Specifies the 2rd possible function parameter type
3114  * @tparam PT2 Specifies the 3rd possible function parameter type
3115  * @tparam PT3 Specifies the 4th possible function parameter type
3116  * @tparam PT4 Specifies the 5th possible function parameter type
3117  * @tparam PT5 Specifies the 6th possible function parameter type
3118  * @tparam PT6 Specifies the 7th possible function parameter type
3119  * @tparam PT7 Specifies the 8th possible function parameter type
3120  * @tparam PT8 Specifies the 9th possible function parameter type
3121  * @tparam PT9 Specifies the 10th possible function parameter type
3122  * @tparam PT10 Specifies the 11th possible function parameter type
3123  * @tparam PT11 Specifies the 12th possible function parameter type
3124  * @tparam PT12 Specifies the 13th possible function parameter type
3125  * @tparam PT13 Specifies the 14th possible function parameter type
3126  * @tparam PT14 Specifies the 15th possible function parameter type
3127  * @tparam PT15 Specifies the 16th possible function parameter type
3128  * @tparam PT16 Specifies the 17th possible function parameter type
3129  * @tparam PT17 Specifies the 18th possible function parameter type
3130  * @tparam PT18 Specifies the 19th possible function parameter type
3131  * @tparam PT19 Specifies the 20th possible function parameter type
3132  * @see StaticFunction, Callback.
3133  * @ingroup base
3134  */
3135 template <typename CT, typename RT, typename PT0 = NullClass, typename PT1 = NullClass, typename PT2 = NullClass, typename PT3 = NullClass, typename PT4 = NullClass, typename PT5 = NullClass, typename PT6 = NullClass, typename PT7 = NullClass, typename PT8 = NullClass, typename PT9 = NullClass, typename PT10 = NullClass, typename PT11 = NullClass, typename PT12 = NullClass, typename PT13 = NullClass, typename PT14 = NullClass, typename PT15 = NullClass, typename PT16 = NullClass, typename PT17 = NullClass, typename PT18 = NullClass, typename PT19 = NullClass>
3136 class MemberFunction : public FunctionBase<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>
3137 {
3138  friend class Callback<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>;
3139 
3140  protected:
3141 
3142  /**
3143  * Definition of a function pointer for the encapsulated function.
3144  */
3146 
3147  protected:
3148 
3149  /**
3150  * Creates a new member function object.
3151  * @param object Class object holding the member function
3152  * @param function Local member function pointer
3153  */
3154  inline MemberFunction(CT& object, FunctionType function);
3155 
3156  /**
3157  * Calls the encapsulated function.
3158  * @param param0 First function parameter
3159  * @param param1 Second function parameter
3160  * @param param2 Third function parameter
3161  * @param param3 Fourth function parameter
3162  * @param param4 Fifth function parameter
3163  * @param param5 Sixth function parameter
3164  * @param param6 Seventh function parameter
3165  * @param param7 Eighth function parameter
3166  * @param param8 Ninth function parameter
3167  * @param param9 Tenth function parameter
3168  * @param param10 11th function parameter
3169  * @param param11 12th function parameter
3170  * @param param12 13th function parameter
3171  * @param param13 14th function parameter
3172  * @param param14 15th function parameter
3173  * @param param15 16th function parameter
3174  * @param param16 17th function parameter
3175  * @param param17 18th function parameter
3176  * @param param18 19th function parameter
3177  * @param param19 20th function parameter
3178  * @return Return value
3179  */
3180  virtual RT call(PT0 param0 = PT0(), PT1 param1 = PT1(), PT2 param2 = PT2(), PT3 param3 = PT3(), PT4 param4 = PT4(), PT5 param5 = PT5(), PT6 param6 = PT6(), PT7 param7 = PT7(), PT8 param8 = PT8(), PT9 param9 = PT9(), PT10 param10 = PT10(), PT11 param11 = PT11(), PT12 param12 = PT12(), PT13 param13 = PT13(), PT14 param14 = PT14(), PT15 param15 = PT15(), PT16 param16 = PT16(), PT17 param17 = PT17(), PT18 param18 = PT18(), PT19 param19 = PT19()) const;
3181 
3182  /**
3183  * Creates a copy of this element.
3184  * @return Instance copy
3185  */
3187 
3188  /**
3189  * Returns whether two functions are equal.
3190  * @param functionBase Right callback to check
3191  * @return True, if so
3192  */
3194 
3195  protected:
3196 
3197  /// Class object holding the member function.
3199 
3200  /// Function pointer of the member function.
3202 };
3203 
3204 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3206  functionClass(&object),
3207  functionPointer(function)
3208 {
3209  // nothing to do here
3210 }
3211 
3212 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3213 RT MemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>::call(PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, PT18 param18, PT19 param19) const
3214 {
3215  ocean_assert(functionClass != nullptr);
3216  ocean_assert(functionPointer != 0);
3217  return MemberFunctionCaller<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>::call(functionClass, functionPointer, param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17, param18, param19);
3218 }
3219 
3220 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3222 {
3223  ocean_assert(functionClass != nullptr);
3224  ocean_assert(functionPointer != 0);
3226 }
3227 
3228 template <typename CT, typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3230 {
3232  return function != nullptr && (functionClass == function->functionClass && functionPointer == function->functionPointer);
3233 }
3234 
3235 /**
3236  * This class implements an unparameterized static function container.
3237  * This function container holds no function parameters and therefore can call the encapsulated function with explicit parameters only.
3238  * The template parameters define the function's return type (RT) and twenty possible function parameters (PT0 - PT19).<br>
3239  * This class is a helper class only and used to allow callback functions to be independent from the member function's class type.
3240  * @tparam RT Specifies the return type of the callback function
3241  * @tparam PT0 Specifies the 1st possible function parameter type
3242  * @tparam PT1 Specifies the 2rd possible function parameter type
3243  * @tparam PT2 Specifies the 3rd possible function parameter type
3244  * @tparam PT3 Specifies the 4th possible function parameter type
3245  * @tparam PT4 Specifies the 5th possible function parameter type
3246  * @tparam PT5 Specifies the 6th possible function parameter type
3247  * @tparam PT6 Specifies the 7th possible function parameter type
3248  * @tparam PT7 Specifies the 8th possible function parameter type
3249  * @tparam PT8 Specifies the 9th possible function parameter type
3250  * @tparam PT9 Specifies the 10th possible function parameter type
3251  * @tparam PT10 Specifies the 11th possible function parameter type
3252  * @tparam PT11 Specifies the 12th possible function parameter type
3253  * @tparam PT12 Specifies the 13th possible function parameter type
3254  * @tparam PT13 Specifies the 14th possible function parameter type
3255  * @tparam PT14 Specifies the 15th possible function parameter type
3256  * @tparam PT15 Specifies the 16th possible function parameter type
3257  * @tparam PT16 Specifies the 17th possible function parameter type
3258  * @tparam PT17 Specifies the 18th possible function parameter type
3259  * @tparam PT18 Specifies the 19th possible function parameter type
3260  * @tparam PT19 Specifies the 20th possible function parameter type
3261  * @see MemberFunction, Callback.
3262  * @ingroup base
3263  */
3264 template < typename RT, typename PT0 = NullClass, typename PT1 = NullClass, typename PT2 = NullClass, typename PT3 = NullClass, typename PT4 = NullClass, typename PT5 = NullClass, typename PT6 = NullClass, typename PT7 = NullClass, typename PT8 = NullClass, typename PT9 = NullClass, typename PT10 = NullClass, typename PT11 = NullClass, typename PT12 = NullClass, typename PT13 = NullClass, typename PT14 = NullClass, typename PT15 = NullClass, typename PT16 = NullClass, typename PT17 = NullClass, typename PT18 = NullClass, typename PT19 = NullClass>
3265 class StaticFunction : public FunctionBase<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>
3266 {
3267  friend class Callback<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>;
3268 
3269  protected:
3270 
3271  /**
3272  * Definition of a function pointer for the encapsulated function.
3273  */
3275 
3276  protected:
3277 
3278  /**
3279  * Creates a new member function object.
3280  * @param function Local member function pointer
3281  */
3282  inline StaticFunction(FunctionType function);
3283 
3284  /**
3285  * Calls the encapsulated function.
3286  * @param param0 First function parameter
3287  * @param param1 Second function parameter
3288  * @param param2 Third function parameter
3289  * @param param3 Fourth function parameter
3290  * @param param4 Fifth function parameter
3291  * @param param5 Sixth function parameter
3292  * @param param6 Seventh function parameter
3293  * @param param7 Eight function parameter
3294  * @param param8 Ninth function parameter
3295  * @param param9 Tenth function parameter
3296  * @param param10 11th function parameter
3297  * @param param11 12th function parameter
3298  * @param param12 13th function parameter
3299  * @param param13 14th function parameter
3300  * @param param14 15th function parameter
3301  * @param param15 16th function parameter
3302  * @param param16 17th function parameter
3303  * @param param17 18th function parameter
3304  * @param param18 19th function parameter
3305  * @param param19 20th function parameter
3306  * @return Return value
3307  */
3308  virtual RT call(PT0 param0 = PT0(), PT1 param1 = PT1(), PT2 param2 = PT2(), PT3 param3 = PT3(), PT4 param4 = PT4(), PT5 param5 = PT5(), PT6 param6 = PT6(), PT7 param7 = PT7(), PT8 param8 = PT8(), PT9 param9 = PT9(), PT10 param10 = PT10(), PT11 param11 = PT11(), PT12 param12 = PT12(), PT13 param13 = PT13(), PT14 param14 = PT14(), PT15 param15 = PT15(), PT16 param16 = PT16(), PT17 param17 = PT17(), PT18 param18 = PT18(), PT19 param19 = PT19()) const;
3309 
3310  /**
3311  * Creates a copy of this element.
3312  * @return Instance copy
3313  */
3315 
3316  /**
3317  * Returns whether two functions are equal.
3318  * @param functionBase Right callback to check
3319  * @return True, if so
3320  */
3322 
3323  protected:
3324 
3325  /// Function pointer of the member function.
3327 };
3328 
3329 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3331  functionPointer(function)
3332 {
3333  // nothing to do here
3334 }
3335 
3336 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3337 RT StaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>::call(PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, PT18 param18, PT19 param19) const
3338 {
3339  ocean_assert(functionPointer != nullptr);
3340  return StaticFunctionCaller<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>::call(functionPointer, param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17, param18, param19);
3341 }
3342 
3343 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3345 {
3346  ocean_assert(functionPointer != nullptr);
3348 }
3349 
3350 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3352 {
3354  return function != nullptr && functionPointer == function->functionPointer;
3355 }
3356 
3357 /**
3358  * This class implements a container for callback functions.
3359  * Use this callback container to encapsulate callback functions to static functions or member functions (of classes).<br>
3360  * For member functions, this class is independent from the function's owner (class) and therefore can be stored without the definition of the class type.<br>
3361  * This template class holds several template parameters, all specifying return and function parameter types.<br>
3362  * @tparam RT Specifies the return type of the callback function
3363  * @tparam PT0 Specifies the 1st possible function parameter type
3364  * @tparam PT1 Specifies the 2rd possible function parameter type
3365  * @tparam PT2 Specifies the 3rd possible function parameter type
3366  * @tparam PT3 Specifies the 4th possible function parameter type
3367  * @tparam PT4 Specifies the 5th possible function parameter type
3368  * @tparam PT5 Specifies the 6th possible function parameter type
3369  * @tparam PT6 Specifies the 7th possible function parameter type
3370  * @tparam PT7 Specifies the 8th possible function parameter type
3371  * @tparam PT8 Specifies the 9th possible function parameter type
3372  * @tparam PT9 Specifies the 10th possible function parameter type
3373  * @tparam PT10 Specifies the 11th possible function parameter type
3374  * @tparam PT11 Specifies the 12th possible function parameter type
3375  * @tparam PT12 Specifies the 13th possible function parameter type
3376  * @tparam PT13 Specifies the 14th possible function parameter type
3377  * @tparam PT14 Specifies the 15th possible function parameter type
3378  * @tparam PT15 Specifies the 16th possible function parameter type
3379  * @tparam PT16 Specifies the 17th possible function parameter type
3380  * @tparam PT17 Specifies the 18th possible function parameter type
3381  * @tparam PT18 Specifies the 19th possible function parameter type
3382  * @tparam PT19 Specifies the 20th possible function parameter type
3383  * @see Callbacks, ConcurrentCallbacks.
3384  *
3385  * See the following code tutorial:<br>
3386  * @code
3387  * // The best way to use the callback function container is to combine it with a typedef.
3388  *
3389  * #include "ocean/base/Callback.h"
3390  *
3391  * // Some class with a member function
3392  * class TestClass
3393  * {
3394  * public:
3395  *
3396  * // First member function later handled by the callback
3397  * void firstMemberFunction();
3398  *
3399  * // Second member function later handled by the callback
3400  * bool secondMemberFunction(int param0, const unsigned char* param1);
3401  *
3402  * // Static function later handled by the callback
3403  * static std::string staticFunction(short param);
3404  * }
3405  *
3406  * static void globalFunction()
3407  * {
3408  * // do anything
3409  * }
3410  *
3411  * // Definition of a callback function with not return value and no function parameter
3412  * typedef Callback<void> FirstCallback;
3413  *
3414  * // Definition of a callback function with 'bool' as return type and 'int' and 'unsigned char*' as function parameter
3415  * typedef Callback<bool, int, const unsigned char*> SecondCallback;
3416  *
3417  * // Definition of a callback function with 'std::string' as return type and 'short' as function parameter
3418  * typedef Callback<std::string, short> ThirdCallback;
3419  *
3420  * // Any function using the callback
3421  * void main()
3422  * {
3423  * // Instance of the test class
3424  * TestClass testClassObject;
3425  *
3426  * // Instance of the first callback function to the member function 'firstMemberFunction' of the above created instance of TestClass
3427  * FirstCallback firstCallback(testClassObject, &TestClass::firstMemberFunction);
3428  *
3429  * // Instance of the second callback function to the member function 'secondMemberFunction' of the above created instance of TestClass
3430  * SecondCallback secondCallback(testClassObject, &TestClass::secondMemberFunction);
3431  *
3432  * // Instance of the third callback function to the static function 'staticFunction' of the above created instance of TestClass
3433  * ThirdCallback thirdCallback(&TestClass::staticFunction);
3434  *
3435  * // Instance of the fourth callback function to the global function
3436  * FirstCallback fourthCallback(&globalFunction);
3437  *
3438  * // Usage of the first callback
3439  * firstCallback();
3440  *
3441  * // Usage of the second callback
3442  * bool resultBool = secondCallback(5, "test");
3443  *
3444  * // Usage of the third callback
3445  * std::string resultString = thirdCallback(3);
3446  *
3447  * // Usage of the fourth callback
3448  * fourthCallback();
3449  * }
3450  * @endcode
3451  *
3452  * @ingroup base
3453  */
3454 template <typename RT, typename PT0 = NullClass, typename PT1 = NullClass, typename PT2 = NullClass, typename PT3 = NullClass, typename PT4 = NullClass, typename PT5 = NullClass, typename PT6 = NullClass, typename PT7 = NullClass, typename PT8 = NullClass, typename PT9 = NullClass, typename PT10 = NullClass, typename PT11 = NullClass, typename PT12 = NullClass, typename PT13 = NullClass, typename PT14 = NullClass, typename PT15 = NullClass, typename PT16 = NullClass, typename PT17 = NullClass, typename PT18 = NullClass, typename PT19 = NullClass>
3456 {
3457  public:
3458 
3459  /**
3460  * Definition of the return type of this callback object.
3461  */
3462  typedef RT ReturnType;
3463 
3464  /**
3465  * Definition of the 1st parameter type of this callback object.
3466  */
3467  typedef PT0 ParameterType0;
3468 
3469  /**
3470  * Definition of the 2rd parameter type of this callback object.
3471  */
3472  typedef PT1 ParameterType1;
3473 
3474  /**
3475  * Definition of the 3rd parameter type of this callback object.
3476  */
3477  typedef PT2 ParameterType2;
3478 
3479  /**
3480  * Definition of the 4th parameter type of this callback object.
3481  */
3482  typedef PT3 ParameterType3;
3483 
3484  /**
3485  * Definition of the 5th parameter type of this callback object.
3486  */
3487  typedef PT4 ParameterType4;
3488 
3489  /**
3490  * Definition of the 6th parameter type of this callback object.
3491  */
3492  typedef PT5 ParameterType5;
3493 
3494  /**
3495  * Definition of the 7th parameter type of this callback object.
3496  */
3497  typedef PT6 ParameterType6;
3498 
3499  /**
3500  * Definition of the 8th parameter type of this callback object.
3501  */
3502  typedef PT7 ParameterType7;
3503 
3504  /**
3505  * Definition of the 9th parameter type of this callback object.
3506  */
3507  typedef PT8 ParameterType8;
3508 
3509  /**
3510  * Definition of the 10th parameter type of this callback object.
3511  */
3512  typedef PT9 ParameterType9;
3513 
3514  /**
3515  * Definition of the 11th parameter type of this callback object.
3516  */
3517  typedef PT10 ParameterType10;
3518 
3519  /**
3520  * Definition of the 12th parameter type of this callback object.
3521  */
3522  typedef PT11 ParameterType11;
3523 
3524  /**
3525  * Definition of the 13th parameter type of this callback object.
3526  */
3527  typedef PT12 ParameterType12;
3528 
3529  /**
3530  * Definition of the 14th parameter type of this callback object.
3531  */
3532  typedef PT13 ParameterType13;
3533 
3534  /**
3535  * Definition of the 15th parameter type of this callback object.
3536  */
3537  typedef PT14 ParameterType14;
3538 
3539  /**
3540  * Definition of the 16th parameter type of this callback object.
3541  */
3542  typedef PT15 ParameterType15;
3543 
3544  /**
3545  * Definition of the 17th parameter type of this callback object.
3546  */
3547  typedef PT16 ParameterType16;
3548 
3549  /**
3550  * Definition of the 18th parameter type of this callback object.
3551  */
3552  typedef PT17 ParameterType17;
3553 
3554  /**
3555  * Definition of the 19th parameter type of this callback object.
3556  */
3557  typedef PT18 ParameterType18;
3558 
3559  /**
3560  * Definition of the 20th parameter type of this callback object.
3561  */
3562  typedef PT19 ParameterType19;
3563 
3564  public:
3565 
3566  /**
3567  * Creates an empty callback container.
3568  */
3569  inline Callback();
3570 
3571  /**
3572  * Copies a callback container.
3573  * @param callback The callback container to copy
3574  */
3575  inline Callback(const Callback& callback);
3576 
3577  /**
3578  * Creates a new callback container for a member function.
3579  * @param object Class object holding the member function
3580  * @param function Local function pointer of the member function
3581  */
3583 
3584  /**
3585  * Creates a new callback container for a static function.
3586  * @param function Local function pointer of the static function
3587  */
3589 
3590  /**
3591  * Destructs a callback container object.
3592  */
3593  virtual ~Callback();
3594 
3595  /**
3596  * Creates a new callback container for a member function.
3597  * @param object Class object holding the member function
3598  * @param function Local function pointer of the member function
3599  * @return New callback container
3600  */
3601  template<typename CT>
3603 
3604  /**
3605  * Creates a new callback container for a static function.
3606  * @param function Local function pointer of the static function
3607  * @return New callback container
3608  */
3610 
3611 
3612  /**
3613  * Returns whether this container holds no function.
3614  * @return True, if so
3615  */
3616  inline bool isNull() const;
3617 
3618  /**
3619  * Calls the encapsulated callback function.
3620  * @param param0 Possible first function parameter
3621  * @param param1 Possible second function parameter
3622  * @param param2 Possible third function parameter
3623  * @param param3 Possible fourth function parameter
3624  * @param param4 Possible fifth function parameter
3625  * @param param5 Possible sixth function parameter
3626  * @param param6 Possible seventh function parameter
3627  * @param param7 Possible eighth function parameter
3628  * @param param8 Possible ninth function parameter
3629  * @param param9 Possible tenth function parameter
3630  * @param param10 11th function parameter
3631  * @param param11 12th function parameter
3632  * @param param12 13th function parameter
3633  * @param param13 14th function parameter
3634  * @param param14 15th function parameter
3635  * @param param15 16th function parameter
3636  * @param param16 17th function parameter
3637  * @param param17 18th function parameter
3638  * @param param18 19th function parameter
3639  * @param param19 20th function parameter
3640  * @return Return value
3641  */
3642  inline RT operator()(PT0 param0 = PT0(), PT1 param1 = PT1(), PT2 param2 = PT2(), PT3 param3 = PT3(), PT4 param4 = PT4(), PT5 param5 = PT5(), PT6 param6 = PT6(), PT7 param7 = PT7(), PT8 param8 = PT8(), PT9 param9 = PT9(), PT10 param10 = PT10(), PT11 param11 = PT11(), PT12 param12 = PT12(), PT13 param13 = PT13(), PT14 param14 = PT14(), PT15 param15 = PT15(), PT16 param16 = PT16(), PT17 param17 = PT17(), PT18 param18 = PT18(), PT19 param19 = PT19()) const;
3643 
3644  /**
3645  * Assigns a callback container.
3646  * @param callback The callback container to assign
3647  * @return Reference to this object
3648  */
3649  inline Callback& operator=(const Callback& callback);
3650 
3651  /**
3652  * Returns whether two callback container addressing the same class object and the same local member function.
3653  * @param callback Right callback to check
3654  * @return True, if so
3655  */
3656  inline bool operator==(const Callback& callback) const;
3657 
3658  /**
3659  * Returns whether two callback container addressing not the same class object or not the same local member function.
3660  * @param callback Right callback to check
3661  * @return True, if so
3662  */
3663  inline bool operator!=(const Callback& callback) const;
3664 
3665  /**
3666  * Returns whether this container holds an encapsulated function.
3667  * @return True, if so
3668  */
3669  explicit inline operator bool() const;
3670 
3671  private:
3672 
3673  /**
3674  * Creates a new function container by a given base function.
3675  * @param base The base function to create a new container form
3676  */
3678 
3679  private:
3680 
3681  /// Base function container.
3683 };
3684 
3685 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3687  callbackFunction(nullptr)
3688 {
3689  // nothing to do here
3690 }
3691 
3692 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3694  callbackFunction(callback.callbackFunction ? callback.callbackFunction->copy() : nullptr)
3695 {
3696  // nothing to do here
3697 }
3698 
3699 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3700 template<typename CT>
3702  callbackFunction(new MemberFunction<CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>(object, function))
3703 {
3704  // nothing to do here
3705 }
3706 
3707 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3709  callbackFunction(new StaticFunction<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>(function))
3710 {
3711  // nothing to do here
3712 }
3713 
3714 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3716  callbackFunction(base)
3717 {
3718  // nothing to do here
3719 }
3720 
3721 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3723 {
3724  delete callbackFunction;
3725 }
3726 
3727 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3728 template<typename CT>
3730 {
3732 }
3733 
3734 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3736 {
3738 }
3739 
3740 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3742 {
3743  return callbackFunction == nullptr;
3744 }
3745 
3746 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3747 inline RT Callback<RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19>::operator()(PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, PT18 param18, PT19 param19) const
3748 {
3749  ocean_assert(callbackFunction != nullptr);
3750 
3751  return callbackFunction->call(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17, param18, param19);
3752 }
3753 
3754 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3756 {
3757  delete callbackFunction;
3758  callbackFunction = callback.callbackFunction ? callback.callbackFunction->copy() : nullptr;
3759 
3760  return *this;
3761 }
3762 
3763 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3765 {
3766  if (callbackFunction == nullptr && callback.callbackFunction == nullptr)
3767  return true;
3768 
3769  if (callbackFunction == nullptr || callback.callbackFunction == nullptr)
3770  {
3771  ocean_assert((callbackFunction != nullptr && callback.callbackFunction == nullptr) || (callbackFunction == nullptr && callback.callbackFunction != nullptr));
3772 
3773  return false;
3774  }
3775 
3776  return *callbackFunction == *callback.callbackFunction;
3777 }
3778 
3779 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3781 {
3782  return !(*this == callback);
3783 }
3784 
3785 template <typename RT, typename PT0, typename PT1, typename PT2, typename PT3, typename PT4, typename PT5, typename PT6, typename PT7, typename PT8, typename PT9, typename PT10, typename PT11, typename PT12, typename PT13, typename PT14, typename PT15, typename PT16, typename PT17, typename PT18, typename PT19>
3787 {
3788  return callbackFunction != nullptr;
3789 }
3790 
3791 /**
3792  * This class implements a vector holding several callbacks with the same type.
3793  * The class is thread-safe but does not allow to remove or add new callbacks while a callback is currently invoked (by the same thread).<br>
3794  * @see ConcurrentCallbacks, Callback.
3795  * @tparam T Type of the callbacks to be stored
3796  * @ingroup base
3797  */
3798 template <typename T>
3800 {
3801  public:
3802 
3803  /**
3804  * Definition of the return type of the callback object.
3805  */
3806  typedef typename T::ReturnType ReturnType;
3807 
3808  /**
3809  * Definition of the 1st function parameter of the callback object.
3810  */
3811  typedef typename T::ParameterType0 ParameterType0;
3812 
3813  /**
3814  * Definition of the 2nd function parameter of the callback object.
3815  */
3816  typedef typename T::ParameterType1 ParameterType1;
3817 
3818  /**
3819  * Definition of the 3rd function parameter of the callback object.
3820  */
3821  typedef typename T::ParameterType2 ParameterType2;
3822 
3823  /**
3824  * Definition of the 4th function parameter of the callback object.
3825  */
3826  typedef typename T::ParameterType3 ParameterType3;
3827 
3828  /**
3829  * Definition of the 5th function parameter of the callback object.
3830  */
3831  typedef typename T::ParameterType4 ParameterType4;
3832 
3833  /**
3834  * Definition of the 6th function parameter of the callback object.
3835  */
3836  typedef typename T::ParameterType5 ParameterType5;
3837 
3838  /**
3839  * Definition of the 7th function parameter of the callback object.
3840  */
3841  typedef typename T::ParameterType6 ParameterType6;
3842 
3843  /**
3844  * Definition of the 8th function parameter of the callback object.
3845  */
3846  typedef typename T::ParameterType7 ParameterType7;
3847 
3848  /**
3849  * Definition of the 9th function parameter of the callback object.
3850  */
3851  typedef typename T::ParameterType8 ParameterType8;
3852 
3853  /**
3854  * Definition of the 10th function parameter of the callback object.
3855  */
3856  typedef typename T::ParameterType9 ParameterType9;
3857 
3858  /**
3859  * Definition of the 11th function parameter of the callback object.
3860  */
3861  typedef typename T::ParameterType10 ParameterType10;
3862 
3863  /**
3864  * Definition of the 12th function parameter of the callback object.
3865  */
3866  typedef typename T::ParameterType11 ParameterType11;
3867 
3868  /**
3869  * Definition of the 13th function parameter of the callback object.
3870  */
3871  typedef typename T::ParameterType12 ParameterType12;
3872 
3873  /**
3874  * Definition of the 14th function parameter of the callback object.
3875  */
3876  typedef typename T::ParameterType13 ParameterType13;
3877 
3878  /**
3879  * Definition of the 15th function parameter of the callback object.
3880  */
3881  typedef typename T::ParameterType14 ParameterType14;
3882 
3883  /**
3884  * Definition of the 16th function parameter of the callback object.
3885  */
3886  typedef typename T::ParameterType15 ParameterType15;
3887 
3888  /**
3889  * Definition of the 17th function parameter of the callback object.
3890  */
3891  typedef typename T::ParameterType16 ParameterType16;
3892 
3893  /**
3894  * Definition of the 18th function parameter of the callback object.
3895  */
3896  typedef typename T::ParameterType17 ParameterType17;
3897 
3898  /**
3899  * Definition of the 19th function parameter of the callback object.
3900  */
3901  typedef typename T::ParameterType18 ParameterType18;
3902 
3903  /**
3904  * Definition of the 20th function parameter of the callback object.
3905  */
3906  typedef typename T::ParameterType19 ParameterType19;
3907 
3908  protected:
3909 
3910  /**
3911  * Definition of a vector holding callback objects.
3912  */
3913  typedef std::vector<T> CallbackObjects;
3914 
3915  public:
3916 
3917  /**
3918  * Creates a new object without any initial callback function.
3919  */
3920  inline Callbacks();
3921 
3922  /**
3923  * Copy constructor.
3924  * @param callbacks The callbacks object to copy
3925  */
3926  inline Callbacks(const Callbacks<T>& callbacks);
3927 
3928  /**
3929  * Move constructor.
3930  * @param callbacks The callbacks object to move
3931  */
3932  inline Callbacks(Callbacks<T>&& callbacks) noexcept;
3933 
3934  /**
3935  * Destructs this object.
3936  */
3937  inline ~Callbacks();
3938 
3939  /**
3940  * Adds a new callback object.
3941  * @param callback The callback to be added
3942  */
3943  void addCallback(const T& callback);
3944 
3945  /**
3946  * Removes a callback object.
3947  * @param callback The callback to be removed
3948  */
3949  void removeCallback(const T& callback);
3950 
3951  /**
3952  * Calls all encapsulated callback functions.
3953  * @param param0 Possible first function parameter
3954  * @param param1 Possible second function parameter
3955  * @param param2 Possible third function parameter
3956  * @param param3 Possible fourth function parameter
3957  * @param param4 Possible fifth function parameter
3958  * @param param5 Possible sixth function parameter
3959  * @param param6 Possible seventh function parameter
3960  * @param param7 Possible eighth function parameter
3961  * @param param8 Possible ninth function parameter
3962  * @param param9 Possible tenth function parameter
3963  * @param param10 11th function parameter
3964  * @param param11 12th function parameter
3965  * @param param12 13th function parameter
3966  * @param param13 14th function parameter
3967  * @param param14 15th function parameter
3968  * @param param15 16th function parameter
3969  * @param param16 17th function parameter
3970  * @param param17 18th function parameter
3971  * @param param18 19th function parameter
3972  * @param param19 20th function parameter
3973  * @return Return value of the last callback object
3974  */
3976 
3977  /**
3978  * Returns whether no callback is stored.
3979  * @return True, if so
3980  */
3981  inline bool isEmpty() const;
3982 
3983  /**
3984  * Returns whether at least one callback is stored.
3985  * @return True, if so
3986  */
3987  explicit inline operator bool() const;
3988 
3989  /**
3990  * Assign operator.
3991  * @param callbacks The callbacks object to assign
3992  */
3993  inline Callbacks<T>& operator=(const Callbacks<T>& callbacks);
3994 
3995  /**
3996  * Move operator.
3997  * @param callbacks The callbacks object to move
3998  */
3999  inline Callbacks<T>& operator=(Callbacks<T>&& callbacks) noexcept;
4000 
4001  protected:
4002 
4003  /// The callback objects.
4005 
4006  /// Callback lock.
4008 };
4009 
4010 template <typename T>
4012 {
4013  // nothing to do here
4014 }
4015 
4016 template <typename T>
4017 inline Callbacks<T>::Callbacks(const Callbacks<T>& callbacks) :
4018  callbackObjects(callbacks.callbackObjects)
4019 {
4020  // nothing to do here
4021 }
4022 
4023 template <typename T>
4024 inline Callbacks<T>::Callbacks(Callbacks<T>&& callbacks) noexcept :
4025  callbackObjects(std::move(callbacks.callbackObjects))
4026 {
4027  // nothing to do here
4028 }
4029 
4030 template <typename T>
4032 {
4033  ocean_assert(callbackObjects.empty());
4034 }
4035 
4036 template <typename T>
4037 void Callbacks<T>::addCallback(const T& callback)
4038 {
4039  const ScopedLock scopedLock(callbackLock);
4040 
4041 #ifdef OCEAN_DEBUG
4042  for (typename CallbackObjects::const_iterator i = callbackObjects.begin(); i != callbackObjects.end(); ++i)
4043  ocean_assert(*i != callback && "The callback has been added already!");
4044 #endif // OCEAN_DEBUG
4045 
4046  callbackObjects.push_back(callback);
4047 }
4048 
4049 template <typename T>
4050 void Callbacks<T>::removeCallback(const T& callback)
4051 {
4052  const ScopedLock scopedLock(callbackLock);
4053 
4054  for (typename CallbackObjects::iterator i = callbackObjects.begin(); i != callbackObjects.end(); ++i)
4055  if (*i == callback)
4056  {
4057  callbackObjects.erase(i);
4058  return;
4059  }
4060 
4061  ocean_assert(false && "Unknown callback!");
4062 }
4063 
4064 template <typename T>
4066 {
4067  const ScopedLock scopedLock(callbackLock);
4068 
4069  if (callbackObjects.empty())
4070  {
4071  return ReturnType();
4072  }
4073 
4074  for (int n = 0; n < int(callbackObjects.size()) - 1; ++n)
4075  {
4076  callbackObjects[n](param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17, param18, param19);
4077  }
4078 
4079  return callbackObjects.back()(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17, param18, param19);
4080 }
4081 
4082 template <typename T>
4083 inline bool Callbacks<T>::isEmpty() const
4084 {
4085  const ScopedLock scopedLock(callbackLock);
4086  return callbackObjects.empty();
4087 }
4088 
4089 template <typename T>
4091 {
4092  callbackObjects = callbacks.callbackObjects;
4093 
4094  return *this;
4095 }
4096 
4097 template <typename T>
4099 {
4100  if (this != &callbacks)
4101  {
4102  callbackObjects = std::move(callbacks.callbackObjects);
4103  }
4104 
4105  return *this;
4106 }
4107 
4108 template <typename T>
4109 inline Callbacks<T>::operator bool() const
4110 {
4111  const ScopedLock scopedLock(callbackLock);
4112  return !callbackObjects.empty();
4113 }
4114 
4115 /**
4116  * This class implements an extended callbacks object and is also thread-safe.
4117  * This implementation allows to remove or add callback objects while the callbacks are invoked (by the same thread).<br>
4118  * @see Callbacks, Callback.
4119  * @tparam T Type of the callbacks to be stored
4120  * @ingroup base
4121  */
4122 template <typename T>
4124 {
4125  public:
4126 
4127  /**
4128  * Definition of the 1st function parameter of the callback object.
4129  */
4130  typedef typename T::ParameterType0 ParameterType0;
4131 
4132  /**
4133  * Definition of the 2nd function parameter of the callback object.
4134  */
4135  typedef typename T::ParameterType1 ParameterType1;
4136 
4137  /**
4138  * Definition of the 3rd function parameter of the callback object.
4139  */
4140  typedef typename T::ParameterType2 ParameterType2;
4141 
4142  /**
4143  * Definition of the 4th function parameter of the callback object.
4144  */
4145  typedef typename T::ParameterType3 ParameterType3;
4146 
4147  /**
4148  * Definition of the 5th function parameter of the callback object.
4149  */
4150  typedef typename T::ParameterType4 ParameterType4;
4151 
4152  /**
4153  * Definition of the 6th function parameter of the callback object.
4154  */
4155  typedef typename T::ParameterType5 ParameterType5;
4156 
4157  /**
4158  * Definition of the 7th function parameter of the callback object.
4159  */
4160  typedef typename T::ParameterType6 ParameterType6;
4161 
4162  /**
4163  * Definition of the 8th function parameter of the callback object.
4164  */
4165  typedef typename T::ParameterType7 ParameterType7;
4166 
4167  /**
4168  * Definition of the 9th function parameter of the callback object.
4169  */
4170  typedef typename T::ParameterType8 ParameterType8;
4171 
4172  /**
4173  * Definition of the 10th function parameter of the callback object.
4174  */
4175  typedef typename T::ParameterType9 ParameterType9;
4176 
4177  /**
4178  * Definition of the 11th function parameter of the callback object.
4179  */
4180  typedef typename T::ParameterType10 ParameterType10;
4181 
4182  /**
4183  * Definition of the 12th function parameter of the callback object.
4184  */
4185  typedef typename T::ParameterType11 ParameterType11;
4186 
4187  /**
4188  * Definition of the 13th function parameter of the callback object.
4189  */
4190  typedef typename T::ParameterType12 ParameterType12;
4191 
4192  /**
4193  * Definition of the 14th function parameter of the callback object.
4194  */
4195  typedef typename T::ParameterType13 ParameterType13;
4196 
4197  /**
4198  * Definition of the 15th function parameter of the callback object.
4199  */
4200  typedef typename T::ParameterType14 ParameterType14;
4201 
4202  /**
4203  * Definition of the 16th function parameter of the callback object.
4204  */
4205  typedef typename T::ParameterType15 ParameterType15;
4206 
4207  /**
4208  * Definition of the 17th function parameter of the callback object.
4209  */
4210  typedef typename T::ParameterType16 ParameterType16;
4211 
4212  /**
4213  * Definition of the 18th function parameter of the callback object.
4214  */
4215  typedef typename T::ParameterType17 ParameterType17;
4216 
4217  /**
4218  * Definition of the 19th function parameter of the callback object.
4219  */
4220  typedef typename T::ParameterType18 ParameterType18;
4221 
4222  /**
4223  * Definition of the 20th function parameter of the callback object.
4224  */
4225  typedef typename T::ParameterType19 ParameterType19;
4226 
4227  public:
4228 
4229  /**
4230  * Creates a new callbacks object.
4231  */
4233 
4234  /**
4235  * Destructs a callbacks object.
4236  */
4238 
4239  /**
4240  * Adds a new callback object.
4241  * @param callback The callback to be added
4242  */
4243  void addCallback(const T& callback);
4244 
4245  /**
4246  * Removes a callback object.
4247  * @param callback The callback to be removed
4248  */
4249  void removeCallback(const T& callback);
4250 
4251  /**
4252  * Calls all encapsulated callback functions.
4253  * @param param0 Possible first function parameter
4254  * @param param1 Possible second function parameter
4255  * @param param2 Possible third function parameter
4256  * @param param3 Possible fourth function parameter
4257  * @param param4 Possible fifth function parameter
4258  * @param param5 Possible sixth function parameter
4259  * @param param6 Possible seventh function parameter
4260  * @param param7 Possible eighth function parameter
4261  * @param param8 Possible ninth function parameter
4262  * @param param9 Possible tenth function parameter
4263  * @param param10 11th function parameter
4264  * @param param11 12th function parameter
4265  * @param param12 13th function parameter
4266  * @param param13 14th function parameter
4267  * @param param14 15th function parameter
4268  * @param param15 16th function parameter
4269  * @param param16 17th function parameter
4270  * @param param17 18th function parameter
4271  * @param param18 19th function parameter
4272  * @param param19 20th function parameter
4273  */
4275 
4276  private:
4277 
4278  /// Intermediate callbacks to be removed.
4280 
4281  /// Intermediate callbacks to be added.
4283 
4284  /// State that the callbacks are currently invoked.
4285  mutable bool callbacksInvoked;
4286 };
4287 
4288 template <typename T>
4290  callbacksInvoked(false)
4291 {
4292  // nothing to do here
4293 }
4294 
4295 template <typename T>
4297 {
4298  ocean_assert(intermediateRemoveCallbacks.empty());
4299  ocean_assert(intermediateAddCallbacks.empty());
4300  ocean_assert(!callbacksInvoked);
4301 }
4302 
4303 template <typename T>
4305 {
4306  ocean_assert(callback);
4307 
4308  const ScopedLock scopedLock(Callbacks<T>::callbackLock);
4309 
4310  if (callbacksInvoked)
4311  {
4312 
4313 #ifdef OCEAN_DEBUG
4315  ocean_assert(*i != callback && "The callback has been added already!");
4316  for (typename Callbacks<T>::CallbackObjects::const_iterator i = intermediateAddCallbacks.begin(); i != intermediateAddCallbacks.end(); ++i)
4317  ocean_assert(*i != callback && "The callback has been added already!");
4318 #endif // OCEAN_DEBUG
4319 
4320  intermediateAddCallbacks.push_back(callback);
4321  }
4322  else
4323  {
4324  Callbacks<T>::addCallback(callback);
4325  }
4326 }
4327 
4328 template <typename T>
4330 {
4331  const ScopedLock scopedLock(Callbacks<T>::callbackLock);
4332 
4333  if (callbacksInvoked)
4334  {
4335 
4336 #ifdef OCEAN_DEBUG
4337 
4338  bool exists = false;
4340  {
4341  if (*i == callback)
4342  {
4343  exists = true;
4344  break;
4345  }
4346  }
4347 
4348  ocean_assert(exists && "The callback does not exist!");
4349 
4350  for (typename Callbacks<T>::CallbackObjects::const_iterator i = intermediateRemoveCallbacks.begin(); i != intermediateRemoveCallbacks.end(); ++i)
4351  {
4352  ocean_assert(*i != callback && "The callback has been removed already!");
4353  }
4354 
4355 #endif // OCEAN_DEBUG
4356 
4357  intermediateRemoveCallbacks.push_back(callback);
4358  }
4359  else
4360  {
4361  Callbacks<T>::removeCallback(callback);
4362  }
4363 }
4364 
4365 template <typename T>
4367 {
4368  const ScopedLock scopedLock(Callbacks<T>::callbackLock);
4369 
4370  callbacksInvoked = true;
4371 
4372  Callbacks<T>::operator()(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17, param18, param19);
4373 
4374  callbacksInvoked = false;
4375 
4376  if (!intermediateRemoveCallbacks.empty())
4377  {
4378  for (typename Callbacks<T>::CallbackObjects::const_iterator i = intermediateRemoveCallbacks.begin(); i != intermediateRemoveCallbacks.end(); ++i)
4379  {
4381  }
4382 
4383  intermediateRemoveCallbacks.clear();
4384  }
4385 
4386  if (!intermediateAddCallbacks.empty())
4387  {
4388  for (typename Callbacks<T>::CallbackObjects::const_iterator i = intermediateAddCallbacks.begin(); i != intermediateAddCallbacks.end(); ++i)
4389  {
4391  }
4392 
4393  intermediateAddCallbacks.clear();
4394  }
4395 }
4396 
4397 }
4398 
4399 #endif // META_OCEAN_BASE_CALLBACK_H
This class implements a container for callback functions.
Definition: Callback.h:3456
PT13 ParameterType13
Definition of the 14th parameter type of this callback object.
Definition: Callback.h:3532
PT10 ParameterType10
Definition of the 11th parameter type of this callback object.
Definition: Callback.h:3517
static Callback< RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19 > create(CT &object, typename MemberFunctionPointerMaker< CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19 >::Type function)
Creates a new callback container for a member function.
Definition: Callback.h:3729
PT4 ParameterType4
Definition of the 5th parameter type of this callback object.
Definition: Callback.h:3487
PT7 ParameterType7
Definition of the 8th parameter type of this callback object.
Definition: Callback.h:3502
Callback(typename StaticFunctionPointerMaker< RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19 >::Type function)
Creates a new callback container for a static function.
Definition: Callback.h:3708
PT3 ParameterType3
Definition of the 4th parameter type of this callback object.
Definition: Callback.h:3482
static Callback< RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19 > createStatic(typename StaticFunctionPointerMaker< RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19 >::Type function)
Creates a new callback container for a static function.
Definition: Callback.h:3735
PT17 ParameterType17
Definition of the 18th parameter type of this callback object.
Definition: Callback.h:3552
PT9 ParameterType9
Definition of the 10th parameter type of this callback object.
Definition: Callback.h:3512
PT2 ParameterType2
Definition of the 3rd parameter type of this callback object.
Definition: Callback.h:3477
PT1 ParameterType1
Definition of the 2rd parameter type of this callback object.
Definition: Callback.h:3472
virtual ~Callback()
Destructs a callback container object.
Definition: Callback.h:3722
PT12 ParameterType12
Definition of the 13th parameter type of this callback object.
Definition: Callback.h:3527
Callback()
Creates an empty callback container.
Definition: Callback.h:3686
PT0 ParameterType0
Definition of the 1st parameter type of this callback object.
Definition: Callback.h:3467
PT14 ParameterType14
Definition of the 15th parameter type of this callback object.
Definition: Callback.h:3537
FunctionBase< RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19 > * callbackFunction
Base function container.
Definition: Callback.h:3682
PT15 ParameterType15
Definition of the 16th parameter type of this callback object.
Definition: Callback.h:3542
Callback(CT &object, typename MemberFunctionPointerMaker< CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19 >::Type function)
Creates a new callback container for a member function.
Definition: Callback.h:3701
PT6 ParameterType6
Definition of the 7th parameter type of this callback object.
Definition: Callback.h:3497
bool operator!=(const Callback &callback) const
Returns whether two callback container addressing not the same class object or not the same local mem...
Definition: Callback.h:3780
PT19 ParameterType19
Definition of the 20th parameter type of this callback object.
Definition: Callback.h:3562
bool operator==(const Callback &callback) const
Returns whether two callback container addressing the same class object and the same local member fun...
Definition: Callback.h:3764
PT8 ParameterType8
Definition of the 9th parameter type of this callback object.
Definition: Callback.h:3507
PT16 ParameterType16
Definition of the 17th parameter type of this callback object.
Definition: Callback.h:3547
PT18 ParameterType18
Definition of the 19th parameter type of this callback object.
Definition: Callback.h:3557
Callback & operator=(const Callback &callback)
Assigns a callback container.
Definition: Callback.h:3755
RT ReturnType
Definition of the return type of this callback object.
Definition: Callback.h:3462
PT11 ParameterType11
Definition of the 12th parameter type of this callback object.
Definition: Callback.h:3522
PT5 ParameterType5
Definition of the 6th parameter type of this callback object.
Definition: Callback.h:3492
Callback(FunctionBase< RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19 > *base)
Creates a new function container by a given base function.
Definition: Callback.h:3715
Callback(const Callback &callback)
Copies a callback container.
Definition: Callback.h:3693
bool isNull() const
Returns whether this container holds no function.
Definition: Callback.h:3741
RT operator()(PT0 param0=PT0(), PT1 param1=PT1(), PT2 param2=PT2(), PT3 param3=PT3(), PT4 param4=PT4(), PT5 param5=PT5(), PT6 param6=PT6(), PT7 param7=PT7(), PT8 param8=PT8(), PT9 param9=PT9(), PT10 param10=PT10(), PT11 param11=PT11(), PT12 param12=PT12(), PT13 param13=PT13(), PT14 param14=PT14(), PT15 param15=PT15(), PT16 param16=PT16(), PT17 param17=PT17(), PT18 param18=PT18(), PT19 param19=PT19()) const
Calls the encapsulated callback function.
Definition: Callback.h:3747
This class implements a vector holding several callbacks with the same type.
Definition: Callback.h:3800
bool isEmpty() const
Returns whether no callback is stored.
Definition: Callback.h:4083
Callbacks()
Creates a new object without any initial callback function.
Definition: Callback.h:4011
Callbacks< T > & operator=(Callbacks< T > &&callbacks) noexcept
Move operator.
Definition: Callback.h:4098
Callbacks(Callbacks< T > &&callbacks) noexcept
Move constructor.
Definition: Callback.h:4024
T::ParameterType10 ParameterType10
Definition of the 11th function parameter of the callback object.
Definition: Callback.h:3861
T::ParameterType2 ParameterType2
Definition of the 3rd function parameter of the callback object.
Definition: Callback.h:3821
Callbacks(const Callbacks< T > &callbacks)
Copy constructor.
Definition: Callback.h:4017
T::ParameterType7 ParameterType7
Definition of the 8th function parameter of the callback object.
Definition: Callback.h:3846
T::ParameterType15 ParameterType15
Definition of the 16th function parameter of the callback object.
Definition: Callback.h:3886
T::ParameterType1 ParameterType1
Definition of the 2nd function parameter of the callback object.
Definition: Callback.h:3816
T::ParameterType6 ParameterType6
Definition of the 7th function parameter of the callback object.
Definition: Callback.h:3841
CallbackObjects callbackObjects
The callback objects.
Definition: Callback.h:4004
T::ReturnType ReturnType
Definition of the return type of the callback object.
Definition: Callback.h:3806
T::ParameterType18 ParameterType18
Definition of the 19th function parameter of the callback object.
Definition: Callback.h:3901
T::ParameterType17 ParameterType17
Definition of the 18th function parameter of the callback object.
Definition: Callback.h:3896
void addCallback(const T &callback)
Adds a new callback object.
Definition: Callback.h:4037
T::ParameterType13 ParameterType13
Definition of the 14th function parameter of the callback object.
Definition: Callback.h:3876
T::ParameterType3 ParameterType3
Definition of the 4th function parameter of the callback object.
Definition: Callback.h:3826
T::ParameterType5 ParameterType5
Definition of the 6th function parameter of the callback object.
Definition: Callback.h:3836
T::ParameterType16 ParameterType16
Definition of the 17th function parameter of the callback object.
Definition: Callback.h:3891
T::ParameterType14 ParameterType14
Definition of the 15th function parameter of the callback object.
Definition: Callback.h:3881
T::ParameterType12 ParameterType12
Definition of the 13th function parameter of the callback object.
Definition: Callback.h:3871
void removeCallback(const T &callback)
Removes a callback object.
Definition: Callback.h:4050
Callbacks< T > & operator=(const Callbacks< T > &callbacks)
Assign operator.
Definition: Callback.h:4090
Lock callbackLock
Callback lock.
Definition: Callback.h:4007
T::ParameterType8 ParameterType8
Definition of the 9th function parameter of the callback object.
Definition: Callback.h:3851
T::ParameterType9 ParameterType9
Definition of the 10th function parameter of the callback object.
Definition: Callback.h:3856
~Callbacks()
Destructs this object.
Definition: Callback.h:4031
T::ParameterType0 ParameterType0
Definition of the 1st function parameter of the callback object.
Definition: Callback.h:3811
std::vector< T > CallbackObjects
Definition of a vector holding callback objects.
Definition: Callback.h:3913
ReturnType operator()(ParameterType0 param0=ParameterType0(), ParameterType1 param1=ParameterType1(), ParameterType2 param2=ParameterType2(), ParameterType3 param3=ParameterType3(), ParameterType4 param4=ParameterType4(), ParameterType5 param5=ParameterType5(), ParameterType6 param6=ParameterType6(), ParameterType7 param7=ParameterType7(), ParameterType8 param8=ParameterType8(), ParameterType9 param9=ParameterType9(), ParameterType10 param10=ParameterType10(), ParameterType11 param11=ParameterType11(), ParameterType12 param12=ParameterType12(), ParameterType13 param13=ParameterType13(), ParameterType14 param14=ParameterType14(), ParameterType15 param15=ParameterType15(), ParameterType16 param16=ParameterType16(), ParameterType17 param17=ParameterType17(), ParameterType18 param18=ParameterType18(), ParameterType19 param19=ParameterType19()) const
Calls all encapsulated callback functions.
Definition: Callback.h:4065
T::ParameterType19 ParameterType19
Definition of the 20th function parameter of the callback object.
Definition: Callback.h:3906
T::ParameterType11 ParameterType11
Definition of the 12th function parameter of the callback object.
Definition: Callback.h:3866
T::ParameterType4 ParameterType4
Definition of the 5th function parameter of the callback object.
Definition: Callback.h:3831
This class implements a callback function container using defined function parameters.
Definition: Caller.h:1565
This class implements an extended callbacks object and is also thread-safe.
Definition: Callback.h:4124
T::ParameterType19 ParameterType19
Definition of the 20th function parameter of the callback object.
Definition: Callback.h:4225
T::ParameterType15 ParameterType15
Definition of the 16th function parameter of the callback object.
Definition: Callback.h:4205
T::ParameterType16 ParameterType16
Definition of the 17th function parameter of the callback object.
Definition: Callback.h:4210
T::ParameterType7 ParameterType7
Definition of the 8th function parameter of the callback object.
Definition: Callback.h:4165
T::ParameterType5 ParameterType5
Definition of the 6th function parameter of the callback object.
Definition: Callback.h:4155
T::ParameterType17 ParameterType17
Definition of the 18th function parameter of the callback object.
Definition: Callback.h:4215
T::ParameterType13 ParameterType13
Definition of the 14th function parameter of the callback object.
Definition: Callback.h:4195
T::ParameterType14 ParameterType14
Definition of the 15th function parameter of the callback object.
Definition: Callback.h:4200
T::ParameterType2 ParameterType2
Definition of the 3rd function parameter of the callback object.
Definition: Callback.h:4140
T::ParameterType10 ParameterType10
Definition of the 11th function parameter of the callback object.
Definition: Callback.h:4180
T::ParameterType12 ParameterType12
Definition of the 13th function parameter of the callback object.
Definition: Callback.h:4190
Callbacks< T >::CallbackObjects intermediateRemoveCallbacks
Intermediate callbacks to be removed.
Definition: Callback.h:4279
T::ParameterType9 ParameterType9
Definition of the 10th function parameter of the callback object.
Definition: Callback.h:4175
bool callbacksInvoked
State that the callbacks are currently invoked.
Definition: Callback.h:4285
T::ParameterType1 ParameterType1
Definition of the 2nd function parameter of the callback object.
Definition: Callback.h:4135
T::ParameterType6 ParameterType6
Definition of the 7th function parameter of the callback object.
Definition: Callback.h:4160
void addCallback(const T &callback)
Adds a new callback object.
Definition: Callback.h:4304
T::ParameterType11 ParameterType11
Definition of the 12th function parameter of the callback object.
Definition: Callback.h:4185
T::ParameterType4 ParameterType4
Definition of the 5th function parameter of the callback object.
Definition: Callback.h:4150
T::ParameterType18 ParameterType18
Definition of the 19th function parameter of the callback object.
Definition: Callback.h:4220
T::ParameterType8 ParameterType8
Definition of the 9th function parameter of the callback object.
Definition: Callback.h:4170
ConcurrentCallbacks()
Creates a new callbacks object.
Definition: Callback.h:4289
~ConcurrentCallbacks()
Destructs a callbacks object.
Definition: Callback.h:4296
T::ParameterType3 ParameterType3
Definition of the 4th function parameter of the callback object.
Definition: Callback.h:4145
void removeCallback(const T &callback)
Removes a callback object.
Definition: Callback.h:4329
void operator()(ParameterType0 param0=ParameterType0(), ParameterType1 param1=ParameterType1(), ParameterType2 param2=ParameterType2(), ParameterType3 param3=ParameterType3(), ParameterType4 param4=ParameterType4(), ParameterType5 param5=ParameterType5(), ParameterType6 param6=ParameterType6(), ParameterType7 param7=ParameterType7(), ParameterType8 param8=ParameterType8(), ParameterType9 param9=ParameterType9(), ParameterType10 param10=ParameterType10(), ParameterType11 param11=ParameterType11(), ParameterType12 param12=ParameterType12(), ParameterType13 param13=ParameterType13(), ParameterType14 param14=ParameterType14(), ParameterType15 param15=ParameterType15(), ParameterType16 param16=ParameterType16(), ParameterType17 param17=ParameterType17(), ParameterType18 param18=ParameterType18(), ParameterType19 param19=ParameterType19())
Calls all encapsulated callback functions.
Definition: Callback.h:4366
Callbacks< T >::CallbackObjects intermediateAddCallbacks
Intermediate callbacks to be added.
Definition: Callback.h:4282
T::ParameterType0 ParameterType0
Definition of the 1st function parameter of the callback object.
Definition: Callback.h:4130
This class is the base class for an unparameterized function container.
Definition: Callback.h:3052
virtual RT call(PT0 param0=PT0(), PT1 param1=PT1(), PT2 param2=PT2(), PT3 param3=PT3(), PT4 param4=PT4(), PT5 param5=PT5(), PT6 param6=PT6(), PT7 param7=PT7(), PT8 param8=PT8(), PT9 param9=PT9(), PT10 param10=PT10(), PT11 param11=PT11(), PT12 param12=PT12(), PT13 param13=PT13(), PT14 param14=PT14(), PT15 param15=PT15(), PT16 param16=PT16(), PT17 param17=PT17(), PT18 param18=PT18(), PT19 param19=PT19()) const =0
Calls the internal encapsulated function by given parameters.
virtual FunctionBase * copy() const =0
Creates a copy of the entire derived object.
virtual ~FunctionBase()
Destructs the object.
Definition: Callback.h:3101
virtual bool operator==(const FunctionBase< RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19 > &functionBase) const =0
Returns whether two functions are equal.
This class implements a recursive lock object.
Definition: Lock.h:31
This class implements a helper class providing a functionality to call a member function defined by t...
Definition: Callback.h:861
static RT call(CT *functionClass, typename MemberFunctionPointerMaker< CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19 >::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, PT18 param18, PT19 param19)
Calls a function defined by the function pointer the class object and the function parameters.
Definition: Callback.h:1906
This class implements an unparameterized member function container.
Definition: Callback.h:3137
FunctionType functionPointer
Function pointer of the member function.
Definition: Callback.h:3201
MemberFunctionPointerMaker< CT, RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19 >::Type FunctionType
Definition of a function pointer for the encapsulated function.
Definition: Callback.h:3145
MemberFunction(CT &object, FunctionType function)
Creates a new member function object.
Definition: Callback.h:3205
virtual RT call(PT0 param0=PT0(), PT1 param1=PT1(), PT2 param2=PT2(), PT3 param3=PT3(), PT4 param4=PT4(), PT5 param5=PT5(), PT6 param6=PT6(), PT7 param7=PT7(), PT8 param8=PT8(), PT9 param9=PT9(), PT10 param10=PT10(), PT11 param11=PT11(), PT12 param12=PT12(), PT13 param13=PT13(), PT14 param14=PT14(), PT15 param15=PT15(), PT16 param16=PT16(), PT17 param17=PT17(), PT18 param18=PT18(), PT19 param19=PT19()) const
Calls the encapsulated function.
Definition: Callback.h:3213
virtual bool operator==(const FunctionBase< RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19 > &functionBase) const
Returns whether two functions are equal.
Definition: Callback.h:3229
CT * functionClass
Class object holding the member function.
Definition: Callback.h:3198
virtual FunctionBase< RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19 > * copy() const
Creates a copy of this element.
Definition: Callback.h:3221
This class implements a helper class providing a definition of a member function pointer only.
Definition: Callback.h:83
RT(CT::* TypeConst)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19) const
Definition of a const function pointer with twenty parameters.
Definition: Callback.h:94
RT(CT::* Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19)
Definition of a function pointer with twenty parameters.
Definition: Callback.h:89
Definition of a class holding no objects.
Definition: Callback.h:24
This class implements an parameterized const member function container.
Definition: Caller.h:1283
This class implements an parameterized member function container.
Definition: Caller.h:1127
This class implements an parameterized static function container.
Definition: Caller.h:1438
This class implements a scoped lock object for recursive lock objects.
Definition: Lock.h:135
This class implements a helper class providing a functionality to call a static function defined by a...
Definition: Callback.h:2229
static RT call(typename StaticFunctionPointerMaker< RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19 >::Type functionPointer, PT0 param0, PT1 param1, PT2 param2, PT3 param3, PT4 param4, PT5 param5, PT6 param6, PT7 param7, PT8 param8, PT9 param9, PT10 param10, PT11 param11, PT12 param12, PT13 param13, PT14 param14, PT15 param15, PT16 param16, PT17 param17, PT18 param18, PT19 param19)
Calls a function defined by the function pointer the class object and the function parameters.
Definition: Callback.h:2877
This class implements an unparameterized static function container.
Definition: Callback.h:3266
virtual bool operator==(const FunctionBase< RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19 > &functionBase) const
Returns whether two functions are equal.
Definition: Callback.h:3351
virtual RT call(PT0 param0=PT0(), PT1 param1=PT1(), PT2 param2=PT2(), PT3 param3=PT3(), PT4 param4=PT4(), PT5 param5=PT5(), PT6 param6=PT6(), PT7 param7=PT7(), PT8 param8=PT8(), PT9 param9=PT9(), PT10 param10=PT10(), PT11 param11=PT11(), PT12 param12=PT12(), PT13 param13=PT13(), PT14 param14=PT14(), PT15 param15=PT15(), PT16 param16=PT16(), PT17 param17=PT17(), PT18 param18=PT18(), PT19 param19=PT19()) const
Calls the encapsulated function.
Definition: Callback.h:3337
StaticFunctionPointerMaker< RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19 >::Type FunctionType
Definition of a function pointer for the encapsulated function.
Definition: Callback.h:3274
FunctionType functionPointer
Function pointer of the member function.
Definition: Callback.h:3326
virtual FunctionBase< RT, PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19 > * copy() const
Creates a copy of this element.
Definition: Callback.h:3344
StaticFunction(FunctionType function)
Creates a new member function object.
Definition: Callback.h:3330
This class is a helper class providing a definition of a static function pointer only.
Definition: Callback.h:524
RT(* Type)(PT0, PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, PT9, PT10, PT11, PT12, PT13, PT14, PT15, PT16, PT17, PT18, PT19)
Definition of a function pointer with twenty parameters.
Definition: Callback.h:530
The namespace covering the entire Ocean framework.
Definition: Accessor.h:15