root/trunk/whisperlib/common/base/callback/result_callback1.h

Revision 7, 20.6 kB (checked in by whispercastorg, 2 years ago)

version 0.2.0

Line 
1 // Copyright (c) 2009, Whispersoft s.r.l.
2 // All rights reserved.
3 //
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are
6 // met:
7 //
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above
11 // copyright notice, this list of conditions and the following disclaimer
12 // in the documentation and/or other materials provided with the
13 // distribution.
14 // * Neither the name of Whispersoft s.r.l. nor the names of its
15 // contributors may be used to endorse or promote products derived from
16 // this software without specific prior written permission.
17 //
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 //
30
31 #ifndef __COMMON_BASE_CALLBACK_RESULT_CALLBACK1_H__
32 #define __COMMON_BASE_CALLBACK_RESULT_CALLBACK1_H__
33
34
35 template<typename R, typename X0>
36 class ResultCallback1 {
37 public:
38   ResultCallback1(bool is_permanent)
39     : is_permanent_(is_permanent) {
40   }
41   virtual ~ResultCallback1() {
42   }
43   R Run(X0 x0) {
44     R ret = RunInternal(x0);
45     if ( !is_permanent_ )
46       delete this;
47     return ret;
48   }
49   bool is_permanent() const { return is_permanent_; }
50 protected:
51   virtual R RunInternal(X0 x0) = 0;
52 private:
53   bool is_permanent_;
54 };
55
56
57 /////////////////////////////////////////////////////////////////////
58
59 template<typename R, typename X0>
60 class ResultCallback1_0 : public ResultCallback1<R, X0> {
61 public:
62   typedef R (*Fun)(X0);
63   ResultCallback1_0(bool is_permanent, Fun fun)
64     : ResultCallback1<R, X0>(is_permanent),
65       fun_(fun) {
66   }
67 protected:
68   virtual R RunInternal(X0 x0) {
69     return (*fun_)(x0);
70   }
71 private:
72   Fun fun_;
73 };
74 template<typename R, typename X0>
75 ResultCallback1_0<R, X0>* NewCallback(R (*fun)(X0)) {
76   return new ResultCallback1_0<R, X0>(false, fun);
77 }
78 template<typename R, typename X0>
79 ResultCallback1_0<R, X0>* NewPermanentCallback(R (*fun)(X0)) {
80   return new ResultCallback1_0<R, X0>(true, fun);
81 }
82
83
84 template<typename C, typename R, typename X0>
85 class ResultMemberCallback1_0 : public ResultCallback1<R, X0> {
86 public:
87   typedef R (C::*Fun)(X0);
88   ResultMemberCallback1_0 (bool is_permanent, C* c, Fun fun)
89     : ResultCallback1<R, X0>(is_permanent),
90       c_(c),
91       fun_(fun) {
92   }
93 protected:
94   virtual R RunInternal(X0 x0) {
95     return (c_->*fun_)(x0);
96   }
97 private:
98   C* c_;
99   Fun fun_;
100 };
101
102 template<typename C, typename R, typename X0>
103 ResultMemberCallback1_0<C, R, X0>* NewCallback(C* c, R (C::*fun)(X0)) {
104   return new ResultMemberCallback1_0<C, R, X0>(false, c, fun);
105 }
106 template<typename C, typename R, typename X0>
107 ResultMemberCallback1_0<C, R, X0>* NewPermanentCallback(C* c, R (C::*fun)(X0)) {
108   return new ResultMemberCallback1_0<C, R, X0>(true, c, fun);
109 }
110
111 template<typename C, typename R, typename X0>
112 class ResultConstMemberCallback1_0 : public ResultCallback1<R, X0> {
113 public:
114   typedef R (C::*Fun)(X0) const;
115   ResultConstMemberCallback1_0 (bool is_permanent, const C* c, Fun fun)
116     : ResultCallback1<R, X0>(is_permanent),
117       c_(c),
118       fun_(fun) {
119   }
120 protected:
121   virtual R RunInternal(X0 x0) {
122     return (c_->*fun_)(x0);
123   }
124 private:
125   const C* c_;
126   Fun fun_;
127 };
128
129 template<typename C, typename R, typename X0>
130 ResultConstMemberCallback1_0<C, R, X0>* NewCallback(const C* c, R (C::*fun)(X0) const) {
131   return new ResultConstMemberCallback1_0<C, R, X0>(false, c, fun);
132 }
133 template<typename C, typename R, typename X0>
134 ResultConstMemberCallback1_0<C, R, X0>* NewPermanentCallback(const C* c, R (C::*fun)(X0) const) {
135   return new ResultConstMemberCallback1_0<C, R, X0>(true, c, fun);
136 }
137
138 ////////////////////////////////////////////////////////////////////////////////
139
140 template<typename R, typename T0, typename X0>
141 class ResultCallback1_1 : public ResultCallback1<R, X0> {
142 public:
143   typedef R (*Fun)(T0, X0);
144   ResultCallback1_1(bool is_permanent, Fun fun, T0 p0)
145     : ResultCallback1<R, X0>(is_permanent),
146     p0_(p0),
147       fun_(fun) {
148   }
149 protected:
150   virtual R RunInternal(X0 x0) {
151     return (*fun_)(p0_, x0);
152   }
153 private:
154   T0 p0_;
155   Fun fun_;
156 };
157 template<typename R, typename T0, typename X0>
158 ResultCallback1_1<R, T0, X0>* NewCallback(R (*fun)(T0, X0), T0 p0) {
159   return new ResultCallback1_1<R, T0, X0>(false, fun, p0);
160 }
161 template<typename R, typename T0, typename X0>
162 ResultCallback1_1<R, T0, X0>* NewPermanentCallback(R (*fun)(T0, X0), T0 p0) {
163   return new ResultCallback1_1<R, T0, X0>(true, fun, p0);
164 }
165
166
167 template<typename C, typename R, typename T0, typename X0>
168 class ResultConstMemberCallback1_1 : public ResultCallback1<R, X0> {
169 public:
170   typedef R (C::*Fun)(T0, X0) const;
171   ResultConstMemberCallback1_1 (bool is_permanent, const C* c, Fun fun, T0 p0)
172     : ResultCallback1<R, X0>(is_permanent),
173     c_(c),
174     p0_(p0),
175     fun_(fun) {
176   }
177 protected:
178   virtual R RunInternal(X0 x0) {
179     return (c_->*fun_)(p0_, x0);
180   }
181 private:
182   const C* c_;
183   T0 p0_;
184   Fun fun_;
185 };
186
187 template<typename C, typename R, typename T0, typename X0>
188 ResultConstMemberCallback1_1<C, R, T0, X0>* NewCallback(const C* c, R (C::*fun)(T0, X0) const, T0 p0) {
189   return new ResultConstMemberCallback1_1<C, R, T0, X0>(false, c, fun, p0);
190 }
191 template<typename C, typename R, typename T0, typename X0>
192 ResultConstMemberCallback1_1<C, R, T0, X0>* NewPermanentCallback(const C* c, R (C::*fun)(T0, X0) const, T0 p0) {
193   return new ResultConstMemberCallback1_1<C, R, T0, X0>(true, c, fun, p0);
194 }
195
196
197
198 template<typename C, typename R, typename T0, typename X0>
199 class ResultMemberCallback1_1 : public ResultCallback1<R, X0> {
200 public:
201   typedef R (C::*Fun)(T0, X0);
202   ResultMemberCallback1_1 (bool is_permanent, C* c, Fun fun, T0 p0)
203     : ResultCallback1<R, X0>(is_permanent),
204     c_(c),
205     p0_(p0),
206     fun_(fun) {
207   }
208 protected:
209   virtual R RunInternal(X0 x0) {
210     return (c_->*fun_)(p0_, x0);
211   }
212 private:
213   C* c_;
214   T0 p0_;
215   Fun fun_;
216 };
217
218 template<typename C, typename R, typename T0, typename X0>
219 ResultMemberCallback1_1<C, R, T0, X0>* NewCallback(C* c, R (C::*fun)(T0, X0), T0 p0) {
220   return new ResultMemberCallback1_1<C, R, T0, X0>(false, c, fun, p0);
221 }
222 template<typename C, typename R, typename T0, typename X0>
223 ResultMemberCallback1_1<C, R, T0, X0>* NewPermanentCallback(C* c, R (C::*fun)(T0, X0), T0 p0) {
224   return new ResultMemberCallback1_1<C, R, T0, X0>(true, c, fun, p0);
225 }
226
227
228
229 template<typename R, typename T0, typename T1, typename X0>
230 class ResultCallback1_2 : public ResultCallback1<R, X0> {
231 public:
232   typedef R (*Fun)(T0, T1, X0);
233   ResultCallback1_2(bool is_permanent, Fun fun, T0 p0, T1 p1)
234     : ResultCallback1<R, X0>(is_permanent),
235     p0_(p0),
236 p1_(p1),
237       fun_(fun) {
238   }
239 protected:
240   virtual R RunInternal(X0 x0) {
241     return (*fun_)(p0_, p1_, x0);
242   }
243 private:
244   T0 p0_;
245 T1 p1_;
246   Fun fun_;
247 };
248 template<typename R, typename T0, typename T1, typename X0>
249 ResultCallback1_2<R, T0, T1, X0>* NewCallback(R (*fun)(T0, T1, X0), T0 p0, T1 p1) {
250   return new ResultCallback1_2<R, T0, T1, X0>(false, fun, p0, p1);
251 }
252 template<typename R, typename T0, typename T1, typename X0>
253 ResultCallback1_2<R, T0, T1, X0>* NewPermanentCallback(R (*fun)(T0, T1, X0), T0 p0, T1 p1) {
254   return new ResultCallback1_2<R, T0, T1, X0>(true, fun, p0, p1);
255 }
256
257
258 template<typename C, typename R, typename T0, typename T1, typename X0>
259 class ResultConstMemberCallback1_2 : public ResultCallback1<R, X0> {
260 public:
261   typedef R (C::*Fun)(T0, T1, X0) const;
262   ResultConstMemberCallback1_2 (bool is_permanent, const C* c, Fun fun, T0 p0, T1 p1)
263     : ResultCallback1<R, X0>(is_permanent),
264     c_(c),
265     p0_(p0),
266 p1_(p1),
267     fun_(fun) {
268   }
269 protected:
270   virtual R RunInternal(X0 x0) {
271     return (c_->*fun_)(p0_, p1_, x0);
272   }
273 private:
274   const C* c_;
275   T0 p0_;
276 T1 p1_;
277   Fun fun_;
278 };
279
280 template<typename C, typename R, typename T0, typename T1, typename X0>
281 ResultConstMemberCallback1_2<C, R, T0, T1, X0>* NewCallback(const C* c, R (C::*fun)(T0, T1, X0) const, T0 p0, T1 p1) {
282   return new ResultConstMemberCallback1_2<C, R, T0, T1, X0>(false, c, fun, p0, p1);
283 }
284 template<typename C, typename R, typename T0, typename T1, typename X0>
285 ResultConstMemberCallback1_2<C, R, T0, T1, X0>* NewPermanentCallback(const C* c, R (C::*fun)(T0, T1, X0) const, T0 p0, T1 p1) {
286   return new ResultConstMemberCallback1_2<C, R, T0, T1, X0>(true, c, fun, p0, p1);
287 }
288
289
290
291 template<typename C, typename R, typename T0, typename T1, typename X0>
292 class ResultMemberCallback1_2 : public ResultCallback1<R, X0> {
293 public:
294   typedef R (C::*Fun)(T0, T1, X0);
295   ResultMemberCallback1_2 (bool is_permanent, C* c, Fun fun, T0 p0, T1 p1)
296     : ResultCallback1<R, X0>(is_permanent),
297     c_(c),
298     p0_(p0),
299 p1_(p1),
300     fun_(fun) {
301   }
302 protected:
303   virtual R RunInternal(X0 x0) {
304     return (c_->*fun_)(p0_, p1_, x0);
305   }
306 private:
307   C* c_;
308   T0 p0_;
309 T1 p1_;
310   Fun fun_;
311 };
312
313 template<typename C, typename R, typename T0, typename T1, typename X0>
314 ResultMemberCallback1_2<C, R, T0, T1, X0>* NewCallback(C* c, R (C::*fun)(T0, T1, X0), T0 p0, T1 p1) {
315   return new ResultMemberCallback1_2<C, R, T0, T1, X0>(false, c, fun, p0, p1);
316 }
317 template<typename C, typename R, typename T0, typename T1, typename X0>
318 ResultMemberCallback1_2<C, R, T0, T1, X0>* NewPermanentCallback(C* c, R (C::*fun)(T0, T1, X0), T0 p0, T1 p1) {
319   return new ResultMemberCallback1_2<C, R, T0, T1, X0>(true, c, fun, p0, p1);
320 }
321
322
323
324 template<typename R, typename T0, typename T1, typename T2, typename X0>
325 class ResultCallback1_3 : public ResultCallback1<R, X0> {
326 public:
327   typedef R (*Fun)(T0, T1, T2, X0);
328   ResultCallback1_3(bool is_permanent, Fun fun, T0 p0, T1 p1, T2 p2)
329     : ResultCallback1<R, X0>(is_permanent),
330     p0_(p0),
331 p1_(p1),
332 p2_(p2),
333       fun_(fun) {
334   }
335 protected:
336   virtual R RunInternal(X0 x0) {
337     return (*fun_)(p0_, p1_, p2_, x0);
338   }
339 private:
340   T0 p0_;
341 T1 p1_;
342 T2 p2_;
343   Fun fun_;
344 };
345 template<typename R, typename T0, typename T1, typename T2, typename X0>
346 ResultCallback1_3<R, T0, T1, T2, X0>* NewCallback(R (*fun)(T0, T1, T2, X0), T0 p0, T1 p1, T2 p2) {
347   return new ResultCallback1_3<R, T0, T1, T2, X0>(false, fun, p0, p1, p2);
348 }
349 template<typename R, typename T0, typename T1, typename T2, typename X0>
350 ResultCallback1_3<R, T0, T1, T2, X0>* NewPermanentCallback(R (*fun)(T0, T1, T2, X0), T0 p0, T1 p1, T2 p2) {
351   return new ResultCallback1_3<R, T0, T1, T2, X0>(true, fun, p0, p1, p2);
352 }
353
354
355 template<typename C, typename R, typename T0, typename T1, typename T2, typename X0>
356 class ResultConstMemberCallback1_3 : public ResultCallback1<R, X0> {
357 public:
358   typedef R (C::*Fun)(T0, T1, T2, X0) const;
359   ResultConstMemberCallback1_3 (bool is_permanent, const C* c, Fun fun, T0 p0, T1 p1, T2 p2)
360     : ResultCallback1<R, X0>(is_permanent),
361     c_(c),
362     p0_(p0),
363 p1_(p1),
364 p2_(p2),
365     fun_(fun) {
366   }
367 protected:
368   virtual R RunInternal(X0 x0) {
369     return (c_->*fun_)(p0_, p1_, p2_, x0);
370   }
371 private:
372   const C* c_;
373   T0 p0_;
374 T1 p1_;
375 T2 p2_;
376   Fun fun_;
377 };
378
379 template<typename C, typename R, typename T0, typename T1, typename T2, typename X0>
380 ResultConstMemberCallback1_3<C, R, T0, T1, T2, X0>* NewCallback(const C* c, R (C::*fun)(T0, T1, T2, X0) const, T0 p0, T1 p1, T2 p2) {
381   return new ResultConstMemberCallback1_3<C, R, T0, T1, T2, X0>(false, c, fun, p0, p1, p2);
382 }
383 template<typename C, typename R, typename T0, typename T1, typename T2, typename X0>
384 ResultConstMemberCallback1_3<C, R, T0, T1, T2, X0>* NewPermanentCallback(const C* c, R (C::*fun)(T0, T1, T2, X0) const, T0 p0, T1 p1, T2 p2) {
385   return new ResultConstMemberCallback1_3<C, R, T0, T1, T2, X0>(true, c, fun, p0, p1, p2);
386 }
387
388
389
390 template<typename C, typename R, typename T0, typename T1, typename T2, typename X0>
391 class ResultMemberCallback1_3 : public ResultCallback1<R, X0> {
392 public:
393   typedef R (C::*Fun)(T0, T1, T2, X0);
394   ResultMemberCallback1_3 (bool is_permanent, C* c, Fun fun, T0 p0, T1 p1, T2 p2)
395     : ResultCallback1<R, X0>(is_permanent),
396     c_(c),
397     p0_(p0),
398 p1_(p1),
399 p2_(p2),
400     fun_(fun) {
401   }
402 protected:
403   virtual R RunInternal(X0 x0) {
404     return (c_->*fun_)(p0_, p1_, p2_, x0);
405   }
406 private:
407   C* c_;
408   T0 p0_;
409 T1 p1_;
410 T2 p2_;
411   Fun fun_;
412 };
413
414 template<typename C, typename R, typename T0, typename T1, typename T2, typename X0>
415 ResultMemberCallback1_3<C, R, T0, T1, T2, X0>* NewCallback(C* c, R (C::*fun)(T0, T1, T2, X0), T0 p0, T1 p1, T2 p2) {
416   return new ResultMemberCallback1_3<C, R, T0, T1, T2, X0>(false, c, fun, p0, p1, p2);
417 }
418 template<typename C, typename R, typename T0, typename T1, typename T2, typename X0>
419 ResultMemberCallback1_3<C, R, T0, T1, T2, X0>* NewPermanentCallback(C* c, R (C::*fun)(T0, T1, T2, X0), T0 p0, T1 p1, T2 p2) {
420   return new ResultMemberCallback1_3<C, R, T0, T1, T2, X0>(true, c, fun, p0, p1, p2);
421 }
422
423
424
425 template<typename R, typename T0, typename T1, typename T2, typename T3, typename X0>
426 class ResultCallback1_4 : public ResultCallback1<R, X0> {
427 public:
428   typedef R (*Fun)(T0, T1, T2, T3, X0);
429   ResultCallback1_4(bool is_permanent, Fun fun, T0 p0, T1 p1, T2 p2, T3 p3)
430     : ResultCallback1<R, X0>(is_permanent),
431     p0_(p0),
432 p1_(p1),
433 p2_(p2),
434 p3_(p3),
435       fun_(fun) {
436   }
437 protected:
438   virtual R RunInternal(X0 x0) {
439     return (*fun_)(p0_, p1_, p2_, p3_, x0);
440   }
441 private:
442   T0 p0_;
443 T1 p1_;
444 T2 p2_;
445 T3 p3_;
446   Fun fun_;
447 };
448 template<typename R, typename T0, typename T1, typename T2, typename T3, typename X0>
449 ResultCallback1_4<R, T0, T1, T2, T3, X0>* NewCallback(R (*fun)(T0, T1, T2, T3, X0), T0 p0, T1 p1, T2 p2, T3 p3) {
450   return new ResultCallback1_4<R, T0, T1, T2, T3, X0>(false, fun, p0, p1, p2, p3);
451 }
452 template<typename R, typename T0, typename T1, typename T2, typename T3, typename X0>
453 ResultCallback1_4<R, T0, T1, T2, T3, X0>* NewPermanentCallback(R (*fun)(T0, T1, T2, T3, X0), T0 p0, T1 p1, T2 p2, T3 p3) {
454   return new ResultCallback1_4<R, T0, T1, T2, T3, X0>(true, fun, p0, p1, p2, p3);
455 }
456
457
458 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename X0>
459 class ResultConstMemberCallback1_4 : public ResultCallback1<R, X0> {
460 public:
461   typedef R (C::*Fun)(T0, T1, T2, T3, X0) const;
462   ResultConstMemberCallback1_4 (bool is_permanent, const C* c, Fun fun, T0 p0, T1 p1, T2 p2, T3 p3)
463     : ResultCallback1<R, X0>(is_permanent),
464     c_(c),
465     p0_(p0),
466 p1_(p1),
467 p2_(p2),
468 p3_(p3),
469     fun_(fun) {
470   }
471 protected:
472   virtual R RunInternal(X0 x0) {
473     return (c_->*fun_)(p0_, p1_, p2_, p3_, x0);
474   }
475 private:
476   const C* c_;
477   T0 p0_;
478 T1 p1_;
479 T2 p2_;
480 T3 p3_;
481   Fun fun_;
482 };
483
484 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename X0>
485 ResultConstMemberCallback1_4<C, R, T0, T1, T2, T3, X0>* NewCallback(const C* c, R (C::*fun)(T0, T1, T2, T3, X0) const, T0 p0, T1 p1, T2 p2, T3 p3) {
486   return new ResultConstMemberCallback1_4<C, R, T0, T1, T2, T3, X0>(false, c, fun, p0, p1, p2, p3);
487 }
488 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename X0>
489 ResultConstMemberCallback1_4<C, R, T0, T1, T2, T3, X0>* NewPermanentCallback(const C* c, R (C::*fun)(T0, T1, T2, T3, X0) const, T0 p0, T1 p1, T2 p2, T3 p3) {
490   return new ResultConstMemberCallback1_4<C, R, T0, T1, T2, T3, X0>(true, c, fun, p0, p1, p2, p3);
491 }
492
493
494
495 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename X0>
496 class ResultMemberCallback1_4 : public ResultCallback1<R, X0> {
497 public:
498   typedef R (C::*Fun)(T0, T1, T2, T3, X0);
499   ResultMemberCallback1_4 (bool is_permanent, C* c, Fun fun, T0 p0, T1 p1, T2 p2, T3 p3)
500     : ResultCallback1<R, X0>(is_permanent),
501     c_(c),
502     p0_(p0),
503 p1_(p1),
504 p2_(p2),
505 p3_(p3),
506     fun_(fun) {
507   }
508 protected:
509   virtual R RunInternal(X0 x0) {
510     return (c_->*fun_)(p0_, p1_, p2_, p3_, x0);
511   }
512 private:
513   C* c_;
514   T0 p0_;
515 T1 p1_;
516 T2 p2_;
517 T3 p3_;
518   Fun fun_;
519 };
520
521 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename X0>
522 ResultMemberCallback1_4<C, R, T0, T1, T2, T3, X0>* NewCallback(C* c, R (C::*fun)(T0, T1, T2, T3, X0), T0 p0, T1 p1, T2 p2, T3 p3) {
523   return new ResultMemberCallback1_4<C, R, T0, T1, T2, T3, X0>(false, c, fun, p0, p1, p2, p3);
524 }
525 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename X0>
526 ResultMemberCallback1_4<C, R, T0, T1, T2, T3, X0>* NewPermanentCallback(C* c, R (C::*fun)(T0, T1, T2, T3, X0), T0 p0, T1 p1, T2 p2, T3 p3) {
527   return new ResultMemberCallback1_4<C, R, T0, T1, T2, T3, X0>(true, c, fun, p0, p1, p2, p3);
528 }
529
530
531
532 template<typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename X0>
533 class ResultCallback1_5 : public ResultCallback1<R, X0> {
534 public:
535   typedef R (*Fun)(T0, T1, T2, T3, T4, X0);
536   ResultCallback1_5(bool is_permanent, Fun fun, T0 p0, T1 p1, T2 p2, T3 p3, T4 p4)
537     : ResultCallback1<R, X0>(is_permanent),
538     p0_(p0),
539 p1_(p1),
540 p2_(p2),
541 p3_(p3),
542 p4_(p4),
543       fun_(fun) {
544   }
545 protected:
546   virtual R RunInternal(X0 x0) {
547     return (*fun_)(p0_, p1_, p2_, p3_, p4_, x0);
548   }
549 private:
550   T0 p0_;
551 T1 p1_;
552 T2 p2_;
553 T3 p3_;
554 T4 p4_;
555   Fun fun_;
556 };
557 template<typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename X0>
558 ResultCallback1_5<R, T0, T1, T2, T3, T4, X0>* NewCallback(R (*fun)(T0, T1, T2, T3, T4, X0), T0 p0, T1 p1, T2 p2, T3 p3, T4 p4) {
559   return new ResultCallback1_5<R, T0, T1, T2, T3, T4, X0>(false, fun, p0, p1, p2, p3, p4);
560 }
561 template<typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename X0>
562 ResultCallback1_5<R, T0, T1, T2, T3, T4, X0>* NewPermanentCallback(R (*fun)(T0, T1, T2, T3, T4, X0), T0 p0, T1 p1, T2 p2, T3 p3, T4 p4) {
563   return new ResultCallback1_5<R, T0, T1, T2, T3, T4, X0>(true, fun, p0, p1, p2, p3, p4);
564 }
565
566
567 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename X0>
568 class ResultConstMemberCallback1_5 : public ResultCallback1<R, X0> {
569 public:
570   typedef R (C::*Fun)(T0, T1, T2, T3, T4, X0) const;
571   ResultConstMemberCallback1_5 (bool is_permanent, const C* c, Fun fun, T0 p0, T1 p1, T2 p2, T3 p3, T4 p4)
572     : ResultCallback1<R, X0>(is_permanent),
573     c_(c),
574     p0_(p0),
575 p1_(p1),
576 p2_(p2),
577 p3_(p3),
578 p4_(p4),
579     fun_(fun) {
580   }
581 protected:
582   virtual R RunInternal(X0 x0) {
583     return (c_->*fun_)(p0_, p1_, p2_, p3_, p4_, x0);
584   }
585 private:
586   const C* c_;
587   T0 p0_;
588 T1 p1_;
589 T2 p2_;
590 T3 p3_;
591 T4 p4_;
592   Fun fun_;
593 };
594
595 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename X0>
596 ResultConstMemberCallback1_5<C, R, T0, T1, T2, T3, T4, X0>* NewCallback(const C* c, R (C::*fun)(T0, T1, T2, T3, T4, X0) const, T0 p0, T1 p1, T2 p2, T3 p3, T4 p4) {
597   return new ResultConstMemberCallback1_5<C, R, T0, T1, T2, T3, T4, X0>(false, c, fun, p0, p1, p2, p3, p4);
598 }
599 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename X0>
600 ResultConstMemberCallback1_5<C, R, T0, T1, T2, T3, T4, X0>* NewPermanentCallback(const C* c, R (C::*fun)(T0, T1, T2, T3, T4, X0) const, T0 p0, T1 p1, T2 p2, T3 p3, T4 p4) {
601   return new ResultConstMemberCallback1_5<C, R, T0, T1, T2, T3, T4, X0>(true, c, fun, p0, p1, p2, p3, p4);
602 }
603
604
605
606 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename X0>
607 class ResultMemberCallback1_5 : public ResultCallback1<R, X0> {
608 public:
609   typedef R (C::*Fun)(T0, T1, T2, T3, T4, X0);
610   ResultMemberCallback1_5 (bool is_permanent, C* c, Fun fun, T0 p0, T1 p1, T2 p2, T3 p3, T4 p4)
611     : ResultCallback1<R, X0>(is_permanent),
612     c_(c),
613     p0_(p0),
614 p1_(p1),
615 p2_(p2),
616 p3_(p3),
617 p4_(p4),
618     fun_(fun) {
619   }
620 protected:
621   virtual R RunInternal(X0 x0) {
622     return (c_->*fun_)(p0_, p1_, p2_, p3_, p4_, x0);
623   }
624 private:
625   C* c_;
626   T0 p0_;
627 T1 p1_;
628 T2 p2_;
629 T3 p3_;
630 T4 p4_;
631   Fun fun_;
632 };
633
634 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename X0>
635 ResultMemberCallback1_5<C, R, T0, T1, T2, T3, T4, X0>* NewCallback(C* c, R (C::*fun)(T0, T1, T2, T3, T4, X0), T0 p0, T1 p1, T2 p2, T3 p3, T4 p4) {
636   return new ResultMemberCallback1_5<C, R, T0, T1, T2, T3, T4, X0>(false, c, fun, p0, p1, p2, p3, p4);
637 }
638 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename X0>
639 ResultMemberCallback1_5<C, R, T0, T1, T2, T3, T4, X0>* NewPermanentCallback(C* c, R (C::*fun)(T0, T1, T2, T3, T4, X0), T0 p0, T1 p1, T2 p2, T3 p3, T4 p4) {
640   return new ResultMemberCallback1_5<C, R, T0, T1, T2, T3, T4, X0>(true, c, fun, p0, p1, p2, p3, p4);
641 }
642
643 #endif   // __COMMON_BASE_CALLBACK_RESULT_CALLBACK1_H__
Note: See TracBrowser for help on using the browser.