soui 5.0.0.1
Soui5 Doc
 
Loading...
Searching...
No Matches
SFunctor.hpp
1#ifndef _SFUNCTOR_H_
2#define _SFUNCTOR_H_
3
4#include <interface/STaskLoop-i.h>
5#include <interface/SMsgLoop-i.h>
7#include <helper/obj-ref-impl.hpp>
8#if !defined(_WIN32) || _MSC_VER >= 1700
9#define ENABLE_STD_FUNCTIONAL 1
10#else
11#define ENABLE_STD_FUNCTIONAL 0
12#endif
13
14#if ENABLE_STD_FUNCTIONAL
15#include <functional>
16#endif
17
18#ifndef __PRETTY_FUNCTION__
19#define __PRETTY_FUNCTION__ __FUNCTION__
20#endif
21
22SNSBEGIN
23
24class SRunnable : public TObjRefImpl<IRunnable> {
25 public:
26 SRunnable(void *pObj = NULL)
27 : _pObj(pObj)
28 {
29 }
30 virtual ~SRunnable()
31 {
32 }
33 STDMETHOD_(void *, getObject)(THIS)
34 {
35 return _pObj;
36 }
37
38 protected:
39 void *_pObj;
40};
41
42#define IMPL_GETCLASSINFO \
43 public: \
44 STDMETHOD_(const char *, getClassInfo)(THIS) SCONST \
45 { \
46 return __PRETTY_FUNCTION__; \
47 }
48
49#if ENABLE_STD_FUNCTIONAL
50
51class StdRunnable : public SRunnable {
52 IMPL_GETCLASSINFO
53 public:
54 StdRunnable(const std::function<void(void)> &fun)
55 : _func(fun)
56 {
57 }
58
59 StdRunnable(void *pObj, const std::function<void(void)> &fun)
60 : SRunnable(pObj)
61 , _func(fun)
62 {
63 }
64
65 STDMETHOD_(IRunnable *, clone)(THIS) SCONST
66 {
67 return new StdRunnable(_pObj, _func);
68 }
69
70 STDMETHOD_(void, run)(THIS)
71 {
72 _func();
73 }
74
75 protected:
76 std::function<void(void)> _func;
77};
78#endif // ENABLE_STD_FUNCTIONAL
79
80template <typename TClass, typename Func>
81class SFunctor0 : public SRunnable {
82 IMPL_GETCLASSINFO
83 public:
84 SFunctor0(TClass *obj, Func func)
85 : SRunnable(obj)
86 , _func(func)
87 {
88 }
89
90 STDMETHOD_(IRunnable *, clone)(THIS) SCONST
91 {
92 return new SFunctor0((TClass *)_pObj, _func);
93 }
94
95 STDMETHOD_(void, run)(THIS)
96 {
97 (((TClass *)getObject())->*_func)();
98 }
99
100 private:
101 Func _func;
102};
103
104template <typename TClass, typename Func, typename T1>
105class SFunctor1 : public SRunnable {
106 IMPL_GETCLASSINFO
107 public:
108 SFunctor1(TClass *obj, Func func, T1 param1)
109 : SRunnable(obj)
110 , _func(func)
111 , _param1(param1)
112 {
113 }
114 STDMETHOD_(IRunnable *, clone)(THIS) SCONST
115 {
116 return new SFunctor1((TClass *)_pObj, _func, _param1);
117 }
118
119 STDMETHOD_(void, run)(THIS)
120 {
121 (((TClass *)getObject())->*_func)(_param1);
122 }
123
124 private:
125 Func _func;
126 T1 _param1;
127};
128
129template <typename TClass, typename Func, typename T1, typename T2>
130class SFunctor2 : public SRunnable {
131 IMPL_GETCLASSINFO
132 public:
133 SFunctor2(TClass *obj, Func func, T1 param1, T2 param2)
134 : SRunnable(obj)
135 , _func(func)
136 , _param1(param1)
137 , _param2(param2)
138 {
139 }
140
141 STDMETHOD_(IRunnable *, clone)(THIS) SCONST
142 {
143 return new SFunctor2((TClass *)_pObj, _func, _param1, _param2);
144 }
145
146 STDMETHOD_(void, run)(THIS)
147 {
148 (((TClass *)getObject())->*_func)(_param1, _param2);
149 }
150
151 private:
152 Func _func;
153 T1 _param1;
154 T2 _param2;
155};
156
157template <typename TClass, typename Func, typename T1, typename T2, typename T3>
158class SFunctor3 : public SRunnable {
159 IMPL_GETCLASSINFO
160 public:
161 SFunctor3(TClass *obj, Func func, T1 param1, T2 param2, T3 param3)
162 : SRunnable(obj)
163 , _func(func)
164 , _param1(param1)
165 , _param2(param2)
166 , _param3(param3)
167 {
168 }
169
170 STDMETHOD_(IRunnable *, clone)(THIS) SCONST
171 {
172 return new SFunctor3((TClass *)_pObj, _func, _param1, _param2, _param3);
173 }
174
175 STDMETHOD_(void, run)(THIS)
176 {
177 (((TClass *)getObject())->*_func)(_param1, _param2, _param3);
178 }
179
180 private:
181 Func _func;
182 T1 _param1;
183 T2 _param2;
184 T3 _param3;
185};
186
187template <typename TClass, typename Func, typename T1, typename T2, typename T3, typename T4>
188class SFunctor4 : public SRunnable {
189 IMPL_GETCLASSINFO
190 public:
191 SFunctor4(TClass *obj, Func func, T1 param1, T2 param2, T3 param3, T4 param4)
192 : SRunnable(obj)
193 , _func(func)
194 , _param1(param1)
195 , _param2(param2)
196 , _param3(param3)
197 , _param4(param4)
198 {
199 }
200
201 STDMETHOD_(IRunnable *, clone)(THIS) SCONST
202 {
203 return new SFunctor4((TClass *)_pObj, _func, _param1, _param2, _param3, _param4);
204 }
205
206 STDMETHOD_(void, run)(THIS)
207 {
208 (((TClass *)getObject())->*_func)(_param1, _param2, _param3, _param4);
209 }
210
211 private:
212 Func _func;
213 T1 _param1;
214 T2 _param2;
215 T3 _param3;
216 T4 _param4;
217};
218
219template <typename TClass, typename Func, typename T1, typename T2, typename T3, typename T4, typename T5>
220class SFunctor5 : public SRunnable {
221 IMPL_GETCLASSINFO
222 public:
223 SFunctor5(TClass *obj, Func func, T1 param1, T2 param2, T3 param3, T4 param4, T5 param5)
224 : SRunnable(obj)
225 , _func(func)
226 , _param1(param1)
227 , _param2(param2)
228 , _param3(param3)
229 , _param4(param4)
230 , _param5(param5)
231 {
232 }
233
234 STDMETHOD_(IRunnable *, clone)(THIS) SCONST
235 {
236 return new SFunctor5((TClass *)_pObj, _func, _param1, _param2, _param3, _param4, _param5);
237 }
238
239 STDMETHOD_(void, run)(THIS)
240 {
241 (((TClass *)getObject())->*_func)(_param1, _param2, _param3, _param4, _param5);
242 }
243
244 private:
245 Func _func;
246 T1 _param1;
247 T2 _param2;
248 T3 _param3;
249 T4 _param4;
250 T5 _param5;
251};
252
253template <typename TClass, typename Func, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
254class SFunctor6 : public SRunnable {
255 IMPL_GETCLASSINFO
256 public:
257 SFunctor6(TClass *obj, Func func, T1 param1, T2 param2, T3 param3, T4 param4, T5 param5, T6 param6)
258 : SRunnable(obj)
259 , _func(func)
260 , _param1(param1)
261 , _param2(param2)
262 , _param3(param3)
263 , _param4(param4)
264 , _param5(param5)
265 , _param6(param6)
266 {
267 }
268
269 STDMETHOD_(IRunnable *, clone)(THIS) SCONST
270 {
271 return new SFunctor6((TClass *)_pObj, _func, _param1, _param2, _param3, _param4, _param5, _param6);
272 }
273
274 STDMETHOD_(void, run)(THIS)
275 {
276 (((TClass *)getObject())->*_func)(_param1, _param2, _param3, _param4, _param5, _param6);
277 }
278
279 private:
280 Func _func;
281 T1 _param1;
282 T2 _param2;
283 T3 _param3;
284 T4 _param4;
285 T5 _param5;
286 T6 _param6;
287};
288
289template <typename TClass, typename Func, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
290class SFunctor7 : public SRunnable {
291 IMPL_GETCLASSINFO
292 public:
293 SFunctor7(TClass *obj, Func func, T1 param1, T2 param2, T3 param3, T4 param4, T5 param5, T6 param6, T7 param7)
294 : SRunnable(obj)
295 , _func(func)
296 , _param1(param1)
297 , _param2(param2)
298 , _param3(param3)
299 , _param4(param4)
300 , _param5(param5)
301 , _param6(param6)
302 , _param7(param7)
303 {
304 }
305 STDMETHOD_(IRunnable *, clone)(THIS) SCONST
306 {
307 return new SFunctor7((TClass *)_pObj, _func, _param1, _param2, _param3, _param4, _param5, _param6, _param7);
308 }
309
310 STDMETHOD_(void, run)(THIS)
311 {
312 (((TClass *)getObject())->*_func)(_param1, _param2, _param3, _param4, _param5, _param6, _param7);
313 }
314
315 private:
316 Func _func;
317 T1 _param1;
318 T2 _param2;
319 T3 _param3;
320 T4 _param4;
321 T5 _param5;
322 T6 _param6;
323 T7 _param7;
324};
325
326template <typename TClass, typename Func, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
327class SFunctor8 : public SRunnable {
328 IMPL_GETCLASSINFO
329 public:
330 SFunctor8(TClass *obj, Func func, T1 param1, T2 param2, T3 param3, T4 param4, T5 param5, T6 param6, T7 param7, T8 param8)
331 : SRunnable(obj)
332 , _func(func)
333 , _param1(param1)
334 , _param2(param2)
335 , _param3(param3)
336 , _param4(param4)
337 , _param5(param5)
338 , _param6(param6)
339 , _param7(param7)
340 , _param8(param8)
341 {
342 }
343
344 STDMETHOD_(IRunnable *, clone)(THIS) SCONST
345 {
346 return new SFunctor8((TClass *)_pObj, _func, _param1, _param2, _param3, _param4, _param5, _param6, _param7, _param8);
347 }
348
349 STDMETHOD_(void, run)(THIS)
350 {
351 (((TClass *)getObject())->*_func)(_param1, _param2, _param3, _param4, _param5, _param6, _param7, _param8);
352 }
353
354 private:
355 Func _func;
356 T1 _param1;
357 T2 _param2;
358 T3 _param3;
359 T4 _param4;
360 T5 _param5;
361 T6 _param6;
362 T7 _param7;
363 T8 _param8;
364};
365
366template <typename TClass, typename Func, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
367class SFunctor9 : public SRunnable {
368 IMPL_GETCLASSINFO
369 public:
370 SFunctor9(TClass *obj, Func func, T1 param1, T2 param2, T3 param3, T4 param4, T5 param5, T6 param6, T7 param7, T8 param8, T9 param9)
371 : SRunnable(obj)
372 , _func(func)
373 , _param1(param1)
374 , _param2(param2)
375 , _param3(param3)
376 , _param4(param4)
377 , _param5(param5)
378 , _param6(param6)
379 , _param7(param7)
380 , _param8(param8)
381 , _param9(param9)
382 {
383 }
384
385 STDMETHOD_(IRunnable *, clone)(THIS) SCONST
386 {
387 return new SFunctor9((TClass *)_pObj, _func, _param1, _param2, _param3, _param4, _param5, _param6, _param7, _param8, _param9);
388 }
389
390 STDMETHOD_(void, run)(THIS)
391 {
392 (((TClass *)getObject())->*_func)(_param1, _param2, _param3, _param4, _param5, _param6, _param7, _param8, _param9);
393 }
394
395 private:
396 Func _func;
397 T1 _param1;
398 T2 _param2;
399 T3 _param3;
400 T4 _param4;
401 T5 _param5;
402 T6 _param6;
403 T7 _param7;
404 T8 _param8;
405 T9 _param9;
406};
407
408template <typename Func>
409class StaticSFunctor0 : public SRunnable {
410 IMPL_GETCLASSINFO
411 public:
412 StaticSFunctor0(Func func)
413 : _func(func)
414 {
415 }
416
417 STDMETHOD_(IRunnable *, clone)(THIS) SCONST
418 {
419 return new StaticSFunctor0(_func);
420 }
421
422 STDMETHOD_(void, run)(THIS)
423 {
424 (*_func)();
425 }
426
427 private:
428 Func _func;
429};
430
431template <typename Func, typename T1>
432class StaticSFunctor1 : public SRunnable {
433 IMPL_GETCLASSINFO
434 public:
435 StaticSFunctor1(Func func, T1 param1)
436 : _func(func)
437 , _param1(param1)
438 {
439 }
440
441 STDMETHOD_(IRunnable *, clone)(THIS) SCONST
442 {
443 return new StaticSFunctor1(_func, _param1);
444 }
445
446 STDMETHOD_(void, run)(THIS)
447 {
448 (*_func)(_param1);
449 }
450
451 private:
452 Func _func;
453 T1 _param1;
454};
455
456template <typename Func, typename T1, typename T2>
457class StaticSFunctor2 : public SRunnable {
458 IMPL_GETCLASSINFO
459 public:
460 StaticSFunctor2(Func func, T1 param1, T2 param2)
461 : _func(func)
462 , _param1(param1)
463 , _param2(param2)
464 {
465 }
466
467 STDMETHOD_(IRunnable *, clone)(THIS) SCONST
468 {
469 return new StaticSFunctor2(_func, _param1, _param2);
470 }
471
472 STDMETHOD_(void, run)(THIS)
473 {
474 (*_func)(_param1, _param2);
475 }
476
477 private:
478 Func _func;
479 T1 _param1;
480 T2 _param2;
481};
482
483template <typename Func, typename T1, typename T2, typename T3>
484class StaticSFunctor3 : public SRunnable {
485 IMPL_GETCLASSINFO
486 public:
487 StaticSFunctor3(Func func, T1 param1, T2 param2, T3 param3)
488 : _func(func)
489 , _param1(param1)
490 , _param2(param2)
491 , _param3(param3)
492 {
493 }
494
495 STDMETHOD_(IRunnable *, clone)(THIS) SCONST
496 {
497 return new StaticSFunctor3(_func, _param1, _param2, _param3);
498 }
499
500 STDMETHOD_(void, run)(THIS)
501 {
502 (*_func)(_param1, _param2, _param3);
503 }
504
505 private:
506 Func _func;
507 T1 _param1;
508 T2 _param2;
509 T3 _param3;
510};
511
512template <typename Func, typename T1, typename T2, typename T3, typename T4>
513class StaticSFunctor4 : public SRunnable {
514 IMPL_GETCLASSINFO
515 public:
516 StaticSFunctor4(Func func, T1 param1, T2 param2, T3 param3, T4 param4)
517 : _func(func)
518 , _param1(param1)
519 , _param2(param2)
520 , _param3(param3)
521 , _param4(param4)
522 {
523 }
524
525 STDMETHOD_(IRunnable *, clone)(THIS) SCONST
526 {
527 return new StaticSFunctor4(_func, _param1, _param2, _param3, _param4);
528 }
529
530 STDMETHOD_(void, run)(THIS)
531 {
532 (*_func)(_param1, _param2, _param3, _param4);
533 }
534
535 private:
536 Func _func;
537 T1 _param1;
538 T2 _param2;
539 T3 _param3;
540 T4 _param4;
541};
542
543template <typename Func, typename T1, typename T2, typename T3, typename T4, typename T5>
544class StaticSFunctor5 : public SRunnable {
545 IMPL_GETCLASSINFO
546 public:
547 StaticSFunctor5(Func func, T1 param1, T2 param2, T3 param3, T4 param4, T5 param5)
548 : _func(func)
549 , _param1(param1)
550 , _param2(param2)
551 , _param3(param3)
552 , _param4(param4)
553 , _param5(param5)
554 {
555 }
556
557 STDMETHOD_(IRunnable *, clone)(THIS) SCONST
558 {
559 return new StaticSFunctor5(_func, _param1, _param2, _param3, _param4, _param5);
560 }
561
562 STDMETHOD_(void, run)(THIS)
563 {
564 (*_func)(_param1, _param2, _param3, _param4, _param5);
565 }
566
567 private:
568 Func _func;
569 T1 _param1;
570 T2 _param2;
571 T3 _param3;
572 T4 _param4;
573 T5 _param5;
574};
575
576class STaskHelper {
577 public:
578 template <typename TClass, typename Fun>
579 static long post(ITaskLoop *pTaskLoop, TClass *pObj, Fun fun, bool waitUntilDone, int nPriority = 0)
580 {
581 SFunctor0<TClass, Fun> runnable(pObj, fun);
582 return pTaskLoop->postTask(&runnable, waitUntilDone, nPriority);
583 }
584
585 template <typename TClass, typename Fun, typename P1>
586 static long post(ITaskLoop *pTaskLoop, TClass *pObj, Fun fun, P1 p1, bool waitUntilDone, int nPriority = 0)
587 {
588 SFunctor1<TClass, Fun, P1> runnable(pObj, fun, p1);
589 return pTaskLoop->postTask(&runnable, waitUntilDone, nPriority);
590 }
591
592 template <typename TClass, typename Fun, typename P1, typename P2>
593 static long post(ITaskLoop *pTaskLoop, TClass *pObj, Fun fun, P1 p1, P2 p2, bool waitUntilDone, int nPriority = 0)
594 {
595 SFunctor2<TClass, Fun, P1, P2> runnable(pObj, fun, p1, p2);
596 return pTaskLoop->postTask(&runnable, waitUntilDone, nPriority);
597 }
598
599 template <typename TClass, typename Fun, typename P1, typename P2, typename P3>
600 static long post(ITaskLoop *pTaskLoop, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, bool waitUntilDone, int nPriority = 0)
601 {
602 SFunctor3<TClass, Fun, P1, P2, P3> runnable(pObj, fun, p1, p2, p3);
603 return pTaskLoop->postTask(&runnable, waitUntilDone, nPriority);
604 }
605
606 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4>
607 static long post(ITaskLoop *pTaskLoop, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, bool waitUntilDone, int nPriority = 0)
608 {
609 SFunctor4<TClass, Fun, P1, P2, P3, P4> runnable(pObj, fun, p1, p2, p3, p4);
610 return pTaskLoop->postTask(&runnable, waitUntilDone, nPriority);
611 }
612
613 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5>
614 static long post(ITaskLoop *pTaskLoop, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, bool waitUntilDone, int nPriority = 0)
615 {
616 SFunctor5<TClass, Fun, P1, P2, P3, P4, P5> runnable(pObj, fun, p1, p2, p3, p4, p5);
617 return pTaskLoop->postTask(&runnable, waitUntilDone, nPriority);
618 }
619
620 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
621 static long post(ITaskLoop *pTaskLoop, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, bool waitUntilDone, int nPriority = 0)
622 {
623 SFunctor6<TClass, Fun, P1, P2, P3, P4, P5, P6> runnable(pObj, fun, p1, p2, p3, p4, p5, p6);
624 return pTaskLoop->postTask(&runnable, waitUntilDone, nPriority);
625 }
626
627 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
628 static long post(ITaskLoop *pTaskLoop, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, bool waitUntilDone, int nPriority = 0)
629 {
630 SFunctor7<TClass, Fun, P1, P2, P3, P4, P5, P6, P7> runnable(pObj, fun, p1, p2, p3, p4, p5, p6, p7);
631 return pTaskLoop->postTask(&runnable, waitUntilDone, nPriority);
632 }
633
634 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
635 static long post(ITaskLoop *pTaskLoop, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, bool waitUntilDone, int nPriority = 0)
636 {
637 SFunctor8<TClass, Fun, P1, P2, P3, P4, P5, P6, P7, P8> runnable(pObj, fun, p1, p2, p3, p4, p5, p6, p7, p8);
638 return pTaskLoop->postTask(&runnable, waitUntilDone, nPriority);
639 }
640
641 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9>
642 static long post(ITaskLoop *pTaskLoop, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, bool waitUntilDone, int nPriority = 0)
643 {
644 SFunctor9<TClass, Fun, P1, P2, P3, P4, P5, P6, P7, P8, P9> runnable(pObj, fun, p1, p2, p3, p4, p5, p6, p7, p8, p9);
645 return pTaskLoop->postTask(&runnable, waitUntilDone, nPriority);
646 }
647
648 //////////////////////////////////////////////////////////////////////////
649 template <typename TClass, typename Fun>
650 static void post(IMessageLoop *pMsgLoop, TClass *pObj, Fun fun)
651 {
652 SFunctor0<TClass, Fun> runnable(pObj, fun);
653 pMsgLoop->PostTask(&runnable);
654 }
655
656 template <typename TClass, typename Fun, typename P1>
657 static void post(IMessageLoop *pMsgLoop, TClass *pObj, Fun fun, P1 p1)
658 {
659 SFunctor1<TClass, Fun, P1> runnable(pObj, fun, p1);
660 pMsgLoop->PostTask(&runnable);
661 }
662
663 template <typename TClass, typename Fun, typename P1, typename P2>
664 static void post(IMessageLoop *pMsgLoop, TClass *pObj, Fun fun, P1 p1, P2 p2)
665 {
666 SFunctor2<TClass, Fun, P1, P2> runnable(pObj, fun, p1, p2);
667 pMsgLoop->PostTask(&runnable);
668 }
669
670 template <typename TClass, typename Fun, typename P1, typename P2, typename P3>
671 static void post(IMessageLoop *pMsgLoop, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3)
672 {
673 SFunctor3<TClass, Fun, P1, P2, P3> runnable(pObj, fun, p1, p2, p3);
674 pMsgLoop->PostTask(&runnable);
675 }
676
677 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4>
678 static void post(IMessageLoop *pMsgLoop, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4)
679 {
680 SFunctor4<TClass, Fun, P1, P2, P3, P4> runnable(pObj, fun, p1, p2, p3, p4);
681 pMsgLoop->PostTask(&runnable);
682 }
683
684 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5>
685 static void post(IMessageLoop *pMsgLoop, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5)
686 {
687 SFunctor5<TClass, Fun, P1, P2, P3, P4, P5> runnable(pObj, fun, p1, p2, p3, p4, p5);
688 pMsgLoop->PostTask(&runnable);
689 }
690
691 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
692 static void post(IMessageLoop *pMsgLoop, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6)
693 {
694 SFunctor6<TClass, Fun, P1, P2, P3, P4, P5, P6> runnable(pObj, fun, p1, p2, p3, p4, p5, p6);
695 pMsgLoop->PostTask(&runnable);
696 }
697
698 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
699 static void post(IMessageLoop *pMsgLoop, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7)
700 {
701 SFunctor7<TClass, Fun, P1, P2, P3, P4, P5, P6, P7> runnable(pObj, fun, p1, p2, p3, p4, p5, p6, p7);
702 pMsgLoop->PostTask(&runnable);
703 }
704
705 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
706 static void post(IMessageLoop *pMsgLoop, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8)
707 {
708 SFunctor8<TClass, Fun, P1, P2, P3, P4, P5, P6, P7, P8> runnable(pObj, fun, p1, p2, p3, p4, p5, p6, p7, p8);
709 pMsgLoop->PostTask(&runnable);
710 }
711
712 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9>
713 static void post(IMessageLoop *pMsgLoop, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9)
714 {
715 SFunctor9<TClass, Fun, P1, P2, P3, P4, P5, P6, P7, P8, P9> runnable(pObj, fun, p1, p2, p3, p4, p5, p6, p7, p8, p9);
716 pMsgLoop->PostTask(&runnable);
717 }
718
719 //////////////////////////////////////////////////////////////////////////
720 template <typename TClass, typename Fun>
721 static void postTask(ISwndContainer *pContainer, TClass *pObj, Fun fun)
722 {
723 SFunctor0<TClass, Fun> runnable(pObj, fun);
724 pContainer->PostTask(&runnable);
725 }
726
727 template <typename TClass, typename Fun, typename P1>
728 static void postTask(ISwndContainer *pContainer, TClass *pObj, Fun fun, P1 p1)
729 {
730 SFunctor1<TClass, Fun, P1> runnable(pObj, fun, p1);
731 pContainer->PostTask(&runnable);
732 }
733
734 template <typename TClass, typename Fun, typename P1, typename P2>
735 static void postTask(ISwndContainer *pContainer, TClass *pObj, Fun fun, P1 p1, P2 p2)
736 {
737 SFunctor2<TClass, Fun, P1, P2> runnable(pObj, fun, p1, p2);
738 pContainer->PostTask(&runnable);
739 }
740
741 template <typename TClass, typename Fun, typename P1, typename P2, typename P3>
742 static void postTask(ISwndContainer *pContainer, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3)
743 {
744 SFunctor3<TClass, Fun, P1, P2, P3> runnable(pObj, fun, p1, p2, p3);
745 pContainer->PostTask(&runnable);
746 }
747
748 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4>
749 static void postTask(ISwndContainer *pContainer, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4)
750 {
751 SFunctor4<TClass, Fun, P1, P2, P3, P4> runnable(pObj, fun, p1, p2, p3, p4);
752 pContainer->PostTask(&runnable);
753 }
754
755 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5>
756 static void postTask(ISwndContainer *pContainer, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5)
757 {
758 SFunctor5<TClass, Fun, P1, P2, P3, P4, P5> runnable(pObj, fun, p1, p2, p3, p4, p5);
759 pContainer->PostTask(&runnable);
760 }
761
762 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
763 static void postTask(ISwndContainer *pContainer, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6)
764 {
765 SFunctor6<TClass, Fun, P1, P2, P3, P4, P5, P6> runnable(pObj, fun, p1, p2, p3, p4, p5, p6);
766 pContainer->PostTask(&runnable);
767 }
768
769 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
770 static void postTask(ISwndContainer *pContainer, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7)
771 {
772 SFunctor7<TClass, Fun, P1, P2, P3, P4, P5, P6, P7> runnable(pObj, fun, p1, p2, p3, p4, p5, p6, p7);
773 pContainer->PostTask(&runnable);
774 }
775
776 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
777 static void postTask(ISwndContainer *pContainer, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8)
778 {
779 SFunctor8<TClass, Fun, P1, P2, P3, P4, P5, P6, P7, P8> runnable(pObj, fun, p1, p2, p3, p4, p5, p6, p7, p8);
780 pContainer->PostTask(&runnable);
781 }
782
783 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9>
784 static void postTask(ISwndContainer *pContainer, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9)
785 {
786 SFunctor9<TClass, Fun, P1, P2, P3, P4, P5, P6, P7, P8, P9> runnable(pObj, fun, p1, p2, p3, p4, p5, p6, p7, p8, p9);
787 pContainer->PostTask(&runnable);
788 }
789
790 //////////////////////////////////////////////////////////////////////////
791 template <typename TClass, typename Fun>
792 static void sendTask(ISwndContainer *pContainer, TClass *pObj, Fun fun)
793 {
794 SFunctor0<TClass, Fun> runnable(pObj, fun);
795 pContainer->PostTask(&runnable, FALSE);
796 }
797
798 template <typename TClass, typename Fun, typename P1>
799 static void sendTask(ISwndContainer *pContainer, TClass *pObj, Fun fun, P1 p1)
800 {
801 SFunctor1<TClass, Fun, P1> runnable(pObj, fun, p1);
802 pContainer->PostTask(&runnable, FALSE);
803 }
804
805 template <typename TClass, typename Fun, typename P1, typename P2>
806 static void sendTask(ISwndContainer *pContainer, TClass *pObj, Fun fun, P1 p1, P2 p2)
807 {
808 SFunctor2<TClass, Fun, P1, P2> runnable(pObj, fun, p1, p2);
809 pContainer->PostTask(&runnable, FALSE);
810 }
811
812 template <typename TClass, typename Fun, typename P1, typename P2, typename P3>
813 static void sendTask(ISwndContainer *pContainer, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3)
814 {
815 SFunctor3<TClass, Fun, P1, P2, P3> runnable(pObj, fun, p1, p2, p3);
816 pContainer->PostTask(&runnable, FALSE);
817 }
818
819 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4>
820 static void sendTask(ISwndContainer *pContainer, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4)
821 {
822 SFunctor4<TClass, Fun, P1, P2, P3, P4> runnable(pObj, fun, p1, p2, p3, p4);
823 pContainer->PostTask(&runnable, FALSE);
824 }
825
826 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5>
827 static void sendTask(ISwndContainer *pContainer, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5)
828 {
829 SFunctor5<TClass, Fun, P1, P2, P3, P4, P5> runnable(pObj, fun, p1, p2, p3, p4, p5);
830 pContainer->PostTask(&runnable, FALSE);
831 }
832
833 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
834 static void sendTask(ISwndContainer *pContainer, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6)
835 {
836 SFunctor6<TClass, Fun, P1, P2, P3, P4, P5, P6> runnable(pObj, fun, p1, p2, p3, p4, p5, p6);
837 pContainer->PostTask(&runnable, FALSE);
838 }
839
840 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
841 static void sendTask(ISwndContainer *pContainer, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7)
842 {
843 SFunctor7<TClass, Fun, P1, P2, P3, P4, P5, P6, P7> runnable(pObj, fun, p1, p2, p3, p4, p5, p6, p7);
844 pContainer->PostTask(&runnable, FALSE);
845 }
846
847 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
848 static void sendTask(ISwndContainer *pContainer, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8)
849 {
850 SFunctor8<TClass, Fun, P1, P2, P3, P4, P5, P6, P7, P8> runnable(pObj, fun, p1, p2, p3, p4, p5, p6, p7, p8);
851 pContainer->PostTask(&runnable, FALSE);
852 }
853
854 template <typename TClass, typename Fun, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9>
855 static void sendTask(ISwndContainer *pContainer, TClass *pObj, Fun fun, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9)
856 {
857 SFunctor9<TClass, Fun, P1, P2, P3, P4, P5, P6, P7, P8, P9> runnable(pObj, fun, p1, p2, p3, p4, p5, p6, p7, p8, p9);
858 pContainer->PostTask(&runnable, FALSE);
859 }
860};
861
862SNSEND
863
864#endif //_SFUNCTOR_H_
Template class implementing the IObjRef interface.
BOOL PostTask(IRunnable *runable) PURE
Posts a task to the message loop.
BOOL PostTask(IRunnable *runable, BOOL bAsync=TRUE) PURE
Posts a task to the message queue.