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

Revision 7, 22.4 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_CALLBACK2_H__
32 #define __COMMON_BASE_CALLBACK_RESULT_CALLBACK2_H__
33
34
35 template<typename R, typename X0, typename X1>
36 class ResultCallback2 {
37 public:
38   ResultCallback2(bool is_permanent)
39     : is_permanent_(is_permanent) {
40   }
41   virtual ~ResultCallback2() {
42   }
43   R Run(X0 x0, X1 x1) {
44     R ret = RunInternal(x0, x1);
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, X1 x1) = 0;
52 private:
53   bool is_permanent_;
54 };
55
56 //////////////////////////////////////////////////////////////////////
57
58 template<typename R, typename X0, typename X1>
59 class ResultCallback2_0 : public ResultCallback2<R, X0, X1> {
60 public:
61   typedef R (*Fun)(X0, X1);
62   ResultCallback2_0(bool is_permanent, Fun fun)
63     : ResultCallback2<R, X0, X1>(is_permanent),
64       fun_(fun) {
65   }
66 protected:
67   virtual R RunInternal(X0 x0, X1 x1) {
68     return (*fun_)(x0, x1);
69   }
70 private:
71   Fun fun_;
72 };
73 template<typename R, typename X0, typename X1>
74 ResultCallback2_0<R, X0, X1>* NewCallback(R (*fun)(X0, X1)) {
75   return new ResultCallback2_0<R, X0, X1>(false, fun);
76 }
77 template<typename R, typename X0, typename X1>
78 ResultCallback2_0<R, X0, X1>* NewPermanentCallback(R (*fun)(X0, X1)) {
79   return new ResultCallback2_0<R, X0, X1>(true, fun);
80 }
81
82
83 template<typename C, typename R, typename X0, typename X1>
84 class ResultConstMemberCallback2_0 : public ResultCallback2<R, X0, X1> {
85 public:
86   typedef R (C::*Fun)(X0, X1) const;
87   ResultConstMemberCallback2_0 (bool is_permanent, const C* c, Fun fun)
88     : ResultCallback2<R, X0, X1>(is_permanent),
89     c_(c),
90     fun_(fun) {
91   }
92 protected:
93   virtual R RunInternal(X0 x0, X1 x1) {
94     return (c_->*fun_)(x0, x1);
95   }
96 private:
97   const C* c_;
98   Fun fun_;
99 };
100
101 template<typename C, typename R, typename X0, typename X1>
102 ResultConstMemberCallback2_0<C, R, X0, X1>* NewCallback(const C* c, R (C::*fun)(X0, X1) const) {
103   return new ResultConstMemberCallback2_0<C, R, X0, X1>(false, c, fun);
104 }
105 template<typename C, typename R, typename X0, typename X1>
106 ResultConstMemberCallback2_0<C, R, X0, X1>* NewPermanentCallback(const C* c, R (C::*fun)(X0, X1) const) {
107   return new ResultConstMemberCallback2_0<C, R, X0, X1>(true, c, fun);
108 }
109
110
111
112 template<typename C, typename R, typename X0, typename X1>
113 class ResultMemberCallback2_0 : public ResultCallback2<R, X0, X1> {
114 public:
115   typedef R (C::*Fun)(X0, X1);
116   ResultMemberCallback2_0 (bool is_permanent, C* c, Fun fun)
117     : ResultCallback2<R, X0, X1>(is_permanent),
118     c_(c),
119     fun_(fun) {
120   }
121 protected:
122   virtual R RunInternal(X0 x0, X1 x1) {
123     return (c_->*fun_)(x0, x1);
124   }
125 private:
126   C* c_;
127   Fun fun_;
128 };
129
130 template<typename C, typename R, typename X0, typename X1>
131 ResultMemberCallback2_0<C, R, X0, X1>* NewCallback(C* c, R (C::*fun)(X0, X1)) {
132   return new ResultMemberCallback2_0<C, R, X0, X1>(false, c, fun);
133 }
134 template<typename C, typename R, typename X0, typename X1>
135 ResultMemberCallback2_0<C, R, X0, X1>* NewPermanentCallback(C* c, R (C::*fun)(X0, X1)) {
136   return new ResultMemberCallback2_0<C, R, X0, X1>(true, c, fun);
137 }
138
139 //////////////////////////////////////////////////////////////////////
140
141 template<typename R, typename T0, typename X0, typename X1>
142 class ResultCallback2_1 : public ResultCallback2<R, X0, X1> {
143 public:
144   typedef R (*Fun)(T0, X0, X1);
145   ResultCallback2_1(bool is_permanent, Fun fun, T0 p0)
146     : ResultCallback2<R, X0, X1>(is_permanent),
147     p0_(p0),
148       fun_(fun) {
149   }
150 protected:
151   virtual R RunInternal(X0 x0, X1 x1) {
152     return (*fun_)(p0_, x0, x1);
153   }
154 private:
155   T0 p0_;
156   Fun fun_;
157 };
158 template<typename R, typename T0, typename X0, typename X1>
159 ResultCallback2_1<R, T0, X0, X1>* NewCallback(R (*fun)(T0, X0, X1), T0 p0) {
160   return new ResultCallback2_1<R, T0, X0, X1>(false, fun, p0);
161 }
162 template<typename R, typename T0, typename X0, typename X1>
163 ResultCallback2_1<R, T0, X0, X1>* NewPermanentCallback(R (*fun)(T0, X0, X1), T0 p0) {
164   return new ResultCallback2_1<R, T0, X0, X1>(true, fun, p0);
165 }
166
167
168 template<typename C, typename R, typename T0, typename X0, typename X1>
169 class ResultConstMemberCallback2_1 : public ResultCallback2<R, X0, X1> {
170 public:
171   typedef R (C::*Fun)(T0, X0, X1) const;
172   ResultConstMemberCallback2_1 (bool is_permanent, const C* c, Fun fun, T0 p0)
173     : ResultCallback2<R, X0, X1>(is_permanent),
174     c_(c),
175     p0_(p0),
176     fun_(fun) {
177   }
178 protected:
179   virtual R RunInternal(X0 x0, X1 x1) {
180     return (c_->*fun_)(p0_, x0, x1);
181   }
182 private:
183   const C* c_;
184   T0 p0_;
185   Fun fun_;
186 };
187
188 template<typename C, typename R, typename T0, typename X0, typename X1>
189 ResultConstMemberCallback2_1<C, R, T0, X0, X1>* NewCallback(const C* c, R (C::*fun)(T0, X0, X1) const, T0 p0) {
190   return new ResultConstMemberCallback2_1<C, R, T0, X0, X1>(false, c, fun, p0);
191 }
192 template<typename C, typename R, typename T0, typename X0, typename X1>
193 ResultConstMemberCallback2_1<C, R, T0, X0, X1>* NewPermanentCallback(const C* c, R (C::*fun)(T0, X0, X1) const, T0 p0) {
194   return new ResultConstMemberCallback2_1<C, R, T0, X0, X1>(true, c, fun, p0);
195 }
196
197 template<typename C, typename R, typename T0, typename X0, typename X1>
198 class ResultMemberCallback2_1 : public ResultCallback2<R, X0, X1> {
199 public:
200   typedef R (C::*Fun)(T0, X0, X1);
201   ResultMemberCallback2_1 (bool is_permanent, C* c, Fun fun, T0 p0)
202     : ResultCallback2<R, X0, X1>(is_permanent),
203     c_(c),
204     p0_(p0),
205     fun_(fun) {
206   }
207 protected:
208   virtual R RunInternal(X0 x0, X1 x1) {
209     return (c_->*fun_)(p0_, x0, x1);
210   }
211 private:
212   C* c_;
213   T0 p0_;
214   Fun fun_;
215 };
216
217 template<typename C, typename R, typename T0, typename X0, typename X1>
218 ResultMemberCallback2_1<C, R, T0, X0, X1>* NewCallback(C* c, R (C::*fun)(T0, X0, X1), T0 p0) {
219   return new ResultMemberCallback2_1<C, R, T0, X0, X1>(false, c, fun, p0);
220 }
221 template<typename C, typename R, typename T0, typename X0, typename X1>
222 ResultMemberCallback2_1<C, R, T0, X0, X1>* NewPermanentCallback(C* c, R (C::*fun)(T0, X0, X1), T0 p0) {
223   return new ResultMemberCallback2_1<C, R, T0, X0, X1>(true, c, fun, p0);
224 }
225
226 //////////////////////////////////////////////////////////////////////
227
228 template<typename R, typename T0, typename T1, typename X0, typename X1>
229 class ResultCallback2_2 : public ResultCallback2<R, X0, X1> {
230 public:
231   typedef R (*Fun)(T0, T1, X0, X1);
232   ResultCallback2_2(bool is_permanent, Fun fun, T0 p0, T1 p1)
233     : ResultCallback2<R, X0, X1>(is_permanent),
234     p0_(p0),
235 p1_(p1),
236       fun_(fun) {
237   }
238 protected:
239   virtual R RunInternal(X0 x0, X1 x1) {
240     return (*fun_)(p0_, p1_, x0, x1);
241   }
242 private:
243   T0 p0_;
244 T1 p1_;
245   Fun fun_;
246 };
247 template<typename R, typename T0, typename T1, typename X0, typename X1>
248 ResultCallback2_2<R, T0, T1, X0, X1>* NewCallback(R (*fun)(T0, T1, X0, X1), T0 p0, T1 p1) {
249   return new ResultCallback2_2<R, T0, T1, X0, X1>(false, fun, p0, p1);
250 }
251 template<typename R, typename T0, typename T1, typename X0, typename X1>
252 ResultCallback2_2<R, T0, T1, X0, X1>* NewPermanentCallback(R (*fun)(T0, T1, X0, X1), T0 p0, T1 p1) {
253   return new ResultCallback2_2<R, T0, T1, X0, X1>(true, fun, p0, p1);
254 }
255
256
257 template<typename C, typename R, typename T0, typename T1, typename X0, typename X1>
258 class ResultConstMemberCallback2_2 : public ResultCallback2<R, X0, X1> {
259 public:
260   typedef R (C::*Fun)(T0, T1, X0, X1) const;
261   ResultConstMemberCallback2_2 (bool is_permanent, const C* c, Fun fun, T0 p0, T1 p1)
262     : ResultCallback2<R, X0, X1>(is_permanent),
263     c_(c),
264     p0_(p0),
265 p1_(p1),
266     fun_(fun) {
267   }
268 protected:
269   virtual R RunInternal(X0 x0, X1 x1) {
270     return (c_->*fun_)(p0_, p1_, x0, x1);
271   }
272 private:
273   const C* c_;
274   T0 p0_;
275 T1 p1_;
276   Fun fun_;
277 };
278
279 template<typename C, typename R, typename T0, typename T1, typename X0, typename X1>
280 ResultConstMemberCallback2_2<C, R, T0, T1, X0, X1>* NewCallback(const C* c, R (C::*fun)(T0, T1, X0, X1) const, T0 p0, T1 p1) {
281   return new ResultConstMemberCallback2_2<C, R, T0, T1, X0, X1>(false, c, fun, p0, p1);
282 }
283 template<typename C, typename R, typename T0, typename T1, typename X0, typename X1>
284 ResultConstMemberCallback2_2<C, R, T0, T1, X0, X1>* NewPermanentCallback(const C* c, R (C::*fun)(T0, T1, X0, X1) const, T0 p0, T1 p1) {
285   return new ResultConstMemberCallback2_2<C, R, T0, T1, X0, X1>(true, c, fun, p0, p1);
286 }
287
288
289
290 template<typename C, typename R, typename T0, typename T1, typename X0, typename X1>
291 class ResultMemberCallback2_2 : public ResultCallback2<R, X0, X1> {
292 public:
293   typedef R (C::*Fun)(T0, T1, X0, X1);
294   ResultMemberCallback2_2 (bool is_permanent, C* c, Fun fun, T0 p0, T1 p1)
295     : ResultCallback2<R, X0, X1>(is_permanent),
296     c_(c),
297     p0_(p0),
298 p1_(p1),
299     fun_(fun) {
300   }
301 protected:
302   virtual R RunInternal(X0 x0, X1 x1) {
303     return (c_->*fun_)(p0_, p1_, x0, x1);
304   }
305 private:
306   C* c_;
307   T0 p0_;
308 T1 p1_;
309   Fun fun_;
310 };
311
312 template<typename C, typename R, typename T0, typename T1, typename X0, typename X1>
313 ResultMemberCallback2_2<C, R, T0, T1, X0, X1>* NewCallback(C* c, R (C::*fun)(T0, T1, X0, X1), T0 p0, T1 p1) {
314   return new ResultMemberCallback2_2<C, R, T0, T1, X0, X1>(false, c, fun, p0, p1);
315 }
316 template<typename C, typename R, typename T0, typename T1, typename X0, typename X1>
317 ResultMemberCallback2_2<C, R, T0, T1, X0, X1>* NewPermanentCallback(C* c, R (C::*fun)(T0, T1, X0, X1), T0 p0, T1 p1) {
318   return new ResultMemberCallback2_2<C, R, T0, T1, X0, X1>(true, c, fun, p0, p1);
319 }
320
321 //////////////////////////////////////////////////////////////////////
322
323 template<typename R, typename T0, typename T1, typename T2, typename X0, typename X1>
324 class ResultCallback2_3 : public ResultCallback2<R, X0, X1> {
325 public:
326   typedef R (*Fun)(T0, T1, T2, X0, X1);
327   ResultCallback2_3(bool is_permanent, Fun fun, T0 p0, T1 p1, T2 p2)
328     : ResultCallback2<R, X0, X1>(is_permanent),
329     p0_(p0),
330 p1_(p1),
331 p2_(p2),
332       fun_(fun) {
333   }
334 protected:
335   virtual R RunInternal(X0 x0, X1 x1) {
336     return (*fun_)(p0_, p1_, p2_, x0, x1);
337   }
338 private:
339   T0 p0_;
340 T1 p1_;
341 T2 p2_;
342   Fun fun_;
343 };
344 template<typename R, typename T0, typename T1, typename T2, typename X0, typename X1>
345 ResultCallback2_3<R, T0, T1, T2, X0, X1>* NewCallback(R (*fun)(T0, T1, T2, X0, X1), T0 p0, T1 p1, T2 p2) {
346   return new ResultCallback2_3<R, T0, T1, T2, X0, X1>(false, fun, p0, p1, p2);
347 }
348 template<typename R, typename T0, typename T1, typename T2, typename X0, typename X1>
349 ResultCallback2_3<R, T0, T1, T2, X0, X1>* NewPermanentCallback(R (*fun)(T0, T1, T2, X0, X1), T0 p0, T1 p1, T2 p2) {
350   return new ResultCallback2_3<R, T0, T1, T2, X0, X1>(true, fun, p0, p1, p2);
351 }
352
353
354 template<typename C, typename R, typename T0, typename T1, typename T2, typename X0, typename X1>
355 class ResultConstMemberCallback2_3 : public ResultCallback2<R, X0, X1> {
356 public:
357   typedef R (C::*Fun)(T0, T1, T2, X0, X1) const;
358   ResultConstMemberCallback2_3 (bool is_permanent, const C* c, Fun fun, T0 p0, T1 p1, T2 p2)
359     : ResultCallback2<R, X0, X1>(is_permanent),
360     c_(c),
361     p0_(p0),
362 p1_(p1),
363 p2_(p2),
364     fun_(fun) {
365   }
366 protected:
367   virtual R RunInternal(X0 x0, X1 x1) {
368     return (c_->*fun_)(p0_, p1_, p2_, x0, x1);
369   }
370 private:
371   const C* c_;
372   T0 p0_;
373 T1 p1_;
374 T2 p2_;
375   Fun fun_;
376 };
377
378 template<typename C, typename R, typename T0, typename T1, typename T2, typename X0, typename X1>
379 ResultConstMemberCallback2_3<C, R, T0, T1, T2, X0, X1>* NewCallback(const C* c, R (C::*fun)(T0, T1, T2, X0, X1) const, T0 p0, T1 p1, T2 p2) {
380   return new ResultConstMemberCallback2_3<C, R, T0, T1, T2, X0, X1>(false, c, fun, p0, p1, p2);
381 }
382 template<typename C, typename R, typename T0, typename T1, typename T2, typename X0, typename X1>
383 ResultConstMemberCallback2_3<C, R, T0, T1, T2, X0, X1>* NewPermanentCallback(const C* c, R (C::*fun)(T0, T1, T2, X0, X1) const, T0 p0, T1 p1, T2 p2) {
384   return new ResultConstMemberCallback2_3<C, R, T0, T1, T2, X0, X1>(true, c, fun, p0, p1, p2);
385 }
386
387
388
389 template<typename C, typename R, typename T0, typename T1, typename T2, typename X0, typename X1>
390 class ResultMemberCallback2_3 : public ResultCallback2<R, X0, X1> {
391 public:
392   typedef R (C::*Fun)(T0, T1, T2, X0, X1);
393   ResultMemberCallback2_3 (bool is_permanent, C* c, Fun fun, T0 p0, T1 p1, T2 p2)
394     : ResultCallback2<R, X0, X1>(is_permanent),
395     c_(c),
396     p0_(p0),
397 p1_(p1),
398 p2_(p2),
399     fun_(fun) {
400   }
401 protected:
402   virtual R RunInternal(X0 x0, X1 x1) {
403     return (c_->*fun_)(p0_, p1_, p2_, x0, x1);
404   }
405 private:
406   C* c_;
407   T0 p0_;
408 T1 p1_;
409 T2 p2_;
410   Fun fun_;
411 };
412
413 template<typename C, typename R, typename T0, typename T1, typename T2, typename X0, typename X1>
414 ResultMemberCallback2_3<C, R, T0, T1, T2, X0, X1>* NewCallback(C* c, R (C::*fun)(T0, T1, T2, X0, X1), T0 p0, T1 p1, T2 p2) {
415   return new ResultMemberCallback2_3<C, R, T0, T1, T2, X0, X1>(false, c, fun, p0, p1, p2);
416 }
417 template<typename C, typename R, typename T0, typename T1, typename T2, typename X0, typename X1>
418 ResultMemberCallback2_3<C, R, T0, T1, T2, X0, X1>* NewPermanentCallback(C* c, R (C::*fun)(T0, T1, T2, X0, X1), T0 p0, T1 p1, T2 p2) {
419   return new ResultMemberCallback2_3<C, R, T0, T1, T2, X0, X1>(true, c, fun, p0, p1, p2);
420 }
421
422 //////////////////////////////////////////////////////////////////////
423
424 template<typename R, typename T0, typename T1, typename T2, typename T3, typename X0, typename X1>
425 class ResultCallback2_4 : public ResultCallback2<R, X0, X1> {
426 public:
427   typedef R (*Fun)(T0, T1, T2, T3, X0, X1);
428   ResultCallback2_4(bool is_permanent, Fun fun, T0 p0, T1 p1, T2 p2, T3 p3)
429     : ResultCallback2<R, X0, X1>(is_permanent),
430     p0_(p0),
431 p1_(p1),
432 p2_(p2),
433 p3_(p3),
434       fun_(fun) {
435   }
436 protected:
437   virtual R RunInternal(X0 x0, X1 x1) {
438     return (*fun_)(p0_, p1_, p2_, p3_, x0, x1);
439   }
440 private:
441   T0 p0_;
442 T1 p1_;
443 T2 p2_;
444 T3 p3_;
445   Fun fun_;
446 };
447 template<typename R, typename T0, typename T1, typename T2, typename T3, typename X0, typename X1>
448 ResultCallback2_4<R, T0, T1, T2, T3, X0, X1>* NewCallback(R (*fun)(T0, T1, T2, T3, X0, X1), T0 p0, T1 p1, T2 p2, T3 p3) {
449   return new ResultCallback2_4<R, T0, T1, T2, T3, X0, X1>(false, fun, p0, p1, p2, p3);
450 }
451 template<typename R, typename T0, typename T1, typename T2, typename T3, typename X0, typename X1>
452 ResultCallback2_4<R, T0, T1, T2, T3, X0, X1>* NewPermanentCallback(R (*fun)(T0, T1, T2, T3, X0, X1), T0 p0, T1 p1, T2 p2, T3 p3) {
453   return new ResultCallback2_4<R, T0, T1, T2, T3, X0, X1>(true, fun, p0, p1, p2, p3);
454 }
455
456
457 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename X0, typename X1>
458 class ResultConstMemberCallback2_4 : public ResultCallback2<R, X0, X1> {
459 public:
460   typedef R (C::*Fun)(T0, T1, T2, T3, X0, X1) const;
461   ResultConstMemberCallback2_4 (bool is_permanent, const C* c, Fun fun, T0 p0, T1 p1, T2 p2, T3 p3)
462     : ResultCallback2<R, X0, X1>(is_permanent),
463     c_(c),
464     p0_(p0),
465 p1_(p1),
466 p2_(p2),
467 p3_(p3),
468     fun_(fun) {
469   }
470 protected:
471   virtual R RunInternal(X0 x0, X1 x1) {
472     return (c_->*fun_)(p0_, p1_, p2_, p3_, x0, x1);
473   }
474 private:
475   const C* c_;
476   T0 p0_;
477 T1 p1_;
478 T2 p2_;
479 T3 p3_;
480   Fun fun_;
481 };
482
483 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename X0, typename X1>
484 ResultConstMemberCallback2_4<C, R, T0, T1, T2, T3, X0, X1>* NewCallback(const C* c, R (C::*fun)(T0, T1, T2, T3, X0, X1) const, T0 p0, T1 p1, T2 p2, T3 p3) {
485   return new ResultConstMemberCallback2_4<C, R, T0, T1, T2, T3, X0, X1>(false, c, fun, p0, p1, p2, p3);
486 }
487 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename X0, typename X1>
488 ResultConstMemberCallback2_4<C, R, T0, T1, T2, T3, X0, X1>* NewPermanentCallback(const C* c, R (C::*fun)(T0, T1, T2, T3, X0, X1) const, T0 p0, T1 p1, T2 p2, T3 p3) {
489   return new ResultConstMemberCallback2_4<C, R, T0, T1, T2, T3, X0, X1>(true, c, fun, p0, p1, p2, p3);
490 }
491
492
493
494 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename X0, typename X1>
495 class ResultMemberCallback2_4 : public ResultCallback2<R, X0, X1> {
496 public:
497   typedef R (C::*Fun)(T0, T1, T2, T3, X0, X1);
498   ResultMemberCallback2_4 (bool is_permanent, C* c, Fun fun, T0 p0, T1 p1, T2 p2, T3 p3)
499     : ResultCallback2<R, X0, X1>(is_permanent),
500     c_(c),
501     p0_(p0),
502 p1_(p1),
503 p2_(p2),
504 p3_(p3),
505     fun_(fun) {
506   }
507 protected:
508   virtual R RunInternal(X0 x0, X1 x1) {
509     return (c_->*fun_)(p0_, p1_, p2_, p3_, x0, x1);
510   }
511 private:
512   C* c_;
513   T0 p0_;
514 T1 p1_;
515 T2 p2_;
516 T3 p3_;
517   Fun fun_;
518 };
519
520 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename X0, typename X1>
521 ResultMemberCallback2_4<C, R, T0, T1, T2, T3, X0, X1>* NewCallback(C* c, R (C::*fun)(T0, T1, T2, T3, X0, X1), T0 p0, T1 p1, T2 p2, T3 p3) {
522   return new ResultMemberCallback2_4<C, R, T0, T1, T2, T3, X0, X1>(false, c, fun, p0, p1, p2, p3);
523 }
524 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename X0, typename X1>
525 ResultMemberCallback2_4<C, R, T0, T1, T2, T3, X0, X1>* NewPermanentCallback(C* c, R (C::*fun)(T0, T1, T2, T3, X0, X1), T0 p0, T1 p1, T2 p2, T3 p3) {
526   return new ResultMemberCallback2_4<C, R, T0, T1, T2, T3, X0, X1>(true, c, fun, p0, p1, p2, p3);
527 }
528
529 //////////////////////////////////////////////////////////////////////
530
531 template<typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename X0, typename X1>
532 class ResultCallback2_5 : public ResultCallback2<R, X0, X1> {
533 public:
534   typedef R (*Fun)(T0, T1, T2, T3, T4, X0, X1);
535   ResultCallback2_5(bool is_permanent, Fun fun, T0 p0, T1 p1, T2 p2, T3 p3, T4 p4)
536     : ResultCallback2<R, X0, X1>(is_permanent),
537     p0_(p0),
538 p1_(p1),
539 p2_(p2),
540 p3_(p3),
541 p4_(p4),
542       fun_(fun) {
543   }
544 protected:
545   virtual R RunInternal(X0 x0, X1 x1) {
546     return (*fun_)(p0_, p1_, p2_, p3_, p4_, x0, x1);
547   }
548 private:
549   T0 p0_;
550 T1 p1_;
551 T2 p2_;
552 T3 p3_;
553 T4 p4_;
554   Fun fun_;
555 };
556 template<typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename X0, typename X1>
557 ResultCallback2_5<R, T0, T1, T2, T3, T4, X0, X1>* NewCallback(R (*fun)(T0, T1, T2, T3, T4, X0, X1), T0 p0, T1 p1, T2 p2, T3 p3, T4 p4) {
558   return new ResultCallback2_5<R, T0, T1, T2, T3, T4, X0, X1>(false, fun, p0, p1, p2, p3, p4);
559 }
560 template<typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename X0, typename X1>
561 ResultCallback2_5<R, T0, T1, T2, T3, T4, X0, X1>* NewPermanentCallback(R (*fun)(T0, T1, T2, T3, T4, X0, X1), T0 p0, T1 p1, T2 p2, T3 p3, T4 p4) {
562   return new ResultCallback2_5<R, T0, T1, T2, T3, T4, X0, X1>(true, fun, p0, p1, p2, p3, p4);
563 }
564
565
566 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename X0, typename X1>
567 class ResultConstMemberCallback2_5 : public ResultCallback2<R, X0, X1> {
568 public:
569   typedef R (C::*Fun)(T0, T1, T2, T3, T4, X0, X1) const;
570   ResultConstMemberCallback2_5 (bool is_permanent, const C* c, Fun fun, T0 p0, T1 p1, T2 p2, T3 p3, T4 p4)
571     : ResultCallback2<R, X0, X1>(is_permanent),
572     c_(c),
573     p0_(p0),
574 p1_(p1),
575 p2_(p2),
576 p3_(p3),
577 p4_(p4),
578     fun_(fun) {
579   }
580 protected:
581   virtual R RunInternal(X0 x0, X1 x1) {
582     return (c_->*fun_)(p0_, p1_, p2_, p3_, p4_, x0, x1);
583   }
584 private:
585   const C* c_;
586   T0 p0_;
587 T1 p1_;
588 T2 p2_;
589 T3 p3_;
590 T4 p4_;
591   Fun fun_;
592 };
593
594 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename X0, typename X1>
595 ResultConstMemberCallback2_5<C, R, T0, T1, T2, T3, T4, X0, X1>* NewCallback(const C* c, R (C::*fun)(T0, T1, T2, T3, T4, X0, X1) const, T0 p0, T1 p1, T2 p2, T3 p3, T4 p4) {
596   return new ResultConstMemberCallback2_5<C, R, T0, T1, T2, T3, T4, X0, X1>(false, c, fun, p0, p1, p2, p3, p4);
597 }
598 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename X0, typename X1>
599 ResultConstMemberCallback2_5<C, R, T0, T1, T2, T3, T4, X0, X1>* NewPermanentCallback(const C* c, R (C::*fun)(T0, T1, T2, T3, T4, X0, X1) const, T0 p0, T1 p1, T2 p2, T3 p3, T4 p4) {
600   return new ResultConstMemberCallback2_5<C, R, T0, T1, T2, T3, T4, X0, X1>(true, c, fun, p0, p1, p2, p3, p4);
601 }
602
603
604
605 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename X0, typename X1>
606 class ResultMemberCallback2_5 : public ResultCallback2<R, X0, X1> {
607 public:
608   typedef R (C::*Fun)(T0, T1, T2, T3, T4, X0, X1);
609   ResultMemberCallback2_5 (bool is_permanent, C* c, Fun fun, T0 p0, T1 p1, T2 p2, T3 p3, T4 p4)
610     : ResultCallback2<R, X0, X1>(is_permanent),
611     c_(c),
612     p0_(p0),
613 p1_(p1),
614 p2_(p2),
615 p3_(p3),
616 p4_(p4),
617     fun_(fun) {
618   }
619 protected:
620   virtual R RunInternal(X0 x0, X1 x1) {
621     return (c_->*fun_)(p0_, p1_, p2_, p3_, p4_, x0, x1);
622   }
623 private:
624   C* c_;
625   T0 p0_;
626 T1 p1_;
627 T2 p2_;
628 T3 p3_;
629 T4 p4_;
630   Fun fun_;
631 };
632
633 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename X0, typename X1>
634 ResultMemberCallback2_5<C, R, T0, T1, T2, T3, T4, X0, X1>* NewCallback(C* c, R (C::*fun)(T0, T1, T2, T3, T4, X0, X1), T0 p0, T1 p1, T2 p2, T3 p3, T4 p4) {
635   return new ResultMemberCallback2_5<C, R, T0, T1, T2, T3, T4, X0, X1>(false, c, fun, p0, p1, p2, p3, p4);
636 }
637 template<typename C, typename R, typename T0, typename T1, typename T2, typename T3, typename T4, typename X0, typename X1>
638 ResultMemberCallback2_5<C, R, T0, T1, T2, T3, T4, X0, X1>* NewPermanentCallback(C* c, R (C::*fun)(T0, T1, T2, T3, T4, X0, X1), T0 p0, T1 p1, T2 p2, T3 p3, T4 p4) {
639   return new ResultMemberCallback2_5<C, R, T0, T1, T2, T3, T4, X0, X1>(true, c, fun, p0, p1, p2, p3, p4);
640 }
641
642 #endif   // __COMMON_BASE_CALLBACK_RESULT_CALLBACK2_H__
Note: See TracBrowser for help on using the browser.