Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/boost/bind/mem_fn_template.hpp @ 32

Last change on this file since 32 was 29, checked in by landauf, 17 years ago

updated boost from 1_33_1 to 1_34_1

File size: 25.3 KB
Line 
1//
2//  bind/mem_fn_template.hpp
3//
4//  Do not include this header directly
5//
6//  Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
7//
8// Distributed under the Boost Software License, Version 1.0. (See
9// accompanying file LICENSE_1_0.txt or copy at
10// http://www.boost.org/LICENSE_1_0.txt)
11//
12//  See http://www.boost.org/libs/bind/mem_fn.html for documentation.
13//
14
15#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
16# define BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
17#endif
18
19// mf0
20
21template<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf0)
22{
23public:
24
25    typedef R result_type;
26    typedef T * argument_type;
27
28private:
29   
30    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) ())
31    F f_;
32
33    template<class U> R call(U & u, T const *) const
34    {
35        BOOST_MEM_FN_RETURN (u.*f_)();
36    }
37
38    template<class U> R call(U & u, void const *) const
39    {
40        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)();
41    }
42
43public:
44   
45    explicit BOOST_MEM_FN_NAME(mf0)(F f): f_(f) {}
46
47    R operator()(T * p) const
48    {
49        BOOST_MEM_FN_RETURN (p->*f_)();
50    }
51
52    template<class U> R operator()(U & u) const
53    {
54        BOOST_MEM_FN_RETURN call(u, &u);
55    }
56
57#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
58
59    template<class U> R operator()(U const & u) const
60    {
61        BOOST_MEM_FN_RETURN call(u, &u);
62    }
63
64#endif
65
66    R operator()(T & t) const
67    {
68        BOOST_MEM_FN_RETURN (t.*f_)();
69    }
70
71    bool operator==(BOOST_MEM_FN_NAME(mf0) const & rhs) const
72    {
73        return f_ == rhs.f_;
74    }
75
76    bool operator!=(BOOST_MEM_FN_NAME(mf0) const & rhs) const
77    {
78        return f_ != rhs.f_;
79    }
80};
81
82// cmf0
83
84template<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf0)
85{
86public:
87
88    typedef R result_type;
89    typedef T const * argument_type;
90
91private:
92   
93    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) () const)
94    F f_;
95
96    template<class U> R call(U & u, T const *) const
97    {
98        BOOST_MEM_FN_RETURN (u.*f_)();
99    }
100
101    template<class U> R call(U & u, void const *) const
102    {
103        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)();
104    }
105
106public:
107   
108    explicit BOOST_MEM_FN_NAME(cmf0)(F f): f_(f) {}
109
110    template<class U> R operator()(U const & u) const
111    {
112        BOOST_MEM_FN_RETURN call(u, &u);
113    }
114
115    R operator()(T const & t) const
116    {
117        BOOST_MEM_FN_RETURN (t.*f_)();
118    }
119
120    bool operator==(BOOST_MEM_FN_NAME(cmf0) const & rhs) const
121    {
122        return f_ == rhs.f_;
123    }
124
125    bool operator!=(BOOST_MEM_FN_NAME(cmf0) const & rhs) const
126    {
127        return f_ != rhs.f_;
128    }
129};
130
131// mf1
132
133template<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf1)
134{
135public:
136
137    typedef R result_type;
138    typedef T * first_argument_type;
139    typedef A1 second_argument_type;
140
141private:
142   
143    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1))
144    F f_;
145
146    template<class U, class B1> R call(U & u, T const *, B1 & b1) const
147    {
148        BOOST_MEM_FN_RETURN (u.*f_)(b1);
149    }
150
151    template<class U, class B1> R call(U & u, void const *, B1 & b1) const
152    {
153        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1);
154    }
155
156public:
157   
158    explicit BOOST_MEM_FN_NAME(mf1)(F f): f_(f) {}
159
160    R operator()(T * p, A1 a1) const
161    {
162        BOOST_MEM_FN_RETURN (p->*f_)(a1);
163    }
164
165    template<class U> R operator()(U & u, A1 a1) const
166    {
167        BOOST_MEM_FN_RETURN call(u, &u, a1);
168    }
169
170#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
171
172    template<class U> R operator()(U const & u, A1 a1) const
173    {
174        BOOST_MEM_FN_RETURN call(u, &u, a1);
175    }
176
177#endif
178
179    R operator()(T & t, A1 a1) const
180    {
181        BOOST_MEM_FN_RETURN (t.*f_)(a1);
182    }
183
184    bool operator==(BOOST_MEM_FN_NAME(mf1) const & rhs) const
185    {
186        return f_ == rhs.f_;
187    }
188
189    bool operator!=(BOOST_MEM_FN_NAME(mf1) const & rhs) const
190    {
191        return f_ != rhs.f_;
192    }
193};
194
195// cmf1
196
197template<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf1)
198{
199public:
200
201    typedef R result_type;
202    typedef T const * first_argument_type;
203    typedef A1 second_argument_type;
204
205private:
206   
207    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1) const)
208    F f_;
209
210    template<class U, class B1> R call(U & u, T const *, B1 & b1) const
211    {
212        BOOST_MEM_FN_RETURN (u.*f_)(b1);
213    }
214
215    template<class U, class B1> R call(U & u, void const *, B1 & b1) const
216    {
217        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1);
218    }
219
220public:
221   
222    explicit BOOST_MEM_FN_NAME(cmf1)(F f): f_(f) {}
223
224    template<class U> R operator()(U const & u, A1 a1) const
225    {
226        BOOST_MEM_FN_RETURN call(u, &u, a1);
227    }
228
229    R operator()(T const & t, A1 a1) const
230    {
231        BOOST_MEM_FN_RETURN (t.*f_)(a1);
232    }
233
234    bool operator==(BOOST_MEM_FN_NAME(cmf1) const & rhs) const
235    {
236        return f_ == rhs.f_;
237    }
238
239    bool operator!=(BOOST_MEM_FN_NAME(cmf1) const & rhs) const
240    {
241        return f_ != rhs.f_;
242    }
243};
244
245// mf2
246
247template<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf2)
248{
249public:
250
251    typedef R result_type;
252
253private:
254   
255    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2))
256    F f_;
257
258    template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const
259    {
260        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2);
261    }
262
263    template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const
264    {
265        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2);
266    }
267
268public:
269   
270    explicit BOOST_MEM_FN_NAME(mf2)(F f): f_(f) {}
271
272    R operator()(T * p, A1 a1, A2 a2) const
273    {
274        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2);
275    }
276
277    template<class U> R operator()(U & u, A1 a1, A2 a2) const
278    {
279        BOOST_MEM_FN_RETURN call(u, &u, a1, a2);
280    }
281
282#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
283
284    template<class U> R operator()(U const & u, A1 a1, A2 a2) const
285    {
286        BOOST_MEM_FN_RETURN call(u, &u, a1, a2);
287    }
288
289#endif
290
291    R operator()(T & t, A1 a1, A2 a2) const
292    {
293        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2);
294    }
295
296    bool operator==(BOOST_MEM_FN_NAME(mf2) const & rhs) const
297    {
298        return f_ == rhs.f_;
299    }
300
301    bool operator!=(BOOST_MEM_FN_NAME(mf2) const & rhs) const
302    {
303        return f_ != rhs.f_;
304    }
305};
306
307// cmf2
308
309template<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf2)
310{
311public:
312
313    typedef R result_type;
314
315private:
316   
317    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2) const)
318    F f_;
319
320    template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const
321    {
322        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2);
323    }
324
325    template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const
326    {
327        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2);
328    }
329
330public:
331   
332    explicit BOOST_MEM_FN_NAME(cmf2)(F f): f_(f) {}
333
334    template<class U> R operator()(U const & u, A1 a1, A2 a2) const
335    {
336        BOOST_MEM_FN_RETURN call(u, &u, a1, a2);
337    }
338
339    R operator()(T const & t, A1 a1, A2 a2) const
340    {
341        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2);
342    }
343
344    bool operator==(BOOST_MEM_FN_NAME(cmf2) const & rhs) const
345    {
346        return f_ == rhs.f_;
347    }
348
349    bool operator!=(BOOST_MEM_FN_NAME(cmf2) const & rhs) const
350    {
351        return f_ != rhs.f_;
352    }
353};
354
355// mf3
356
357template<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf3)
358{
359public:
360
361    typedef R result_type;
362
363private:
364   
365    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3))
366    F f_;
367
368    template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const
369    {
370        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3);
371    }
372
373    template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const
374    {
375        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3);
376    }
377
378public:
379   
380    explicit BOOST_MEM_FN_NAME(mf3)(F f): f_(f) {}
381
382    R operator()(T * p, A1 a1, A2 a2, A3 a3) const
383    {
384        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3);
385    }
386
387    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3) const
388    {
389        BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3);
390    }
391
392#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
393
394    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const
395    {
396        BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3);
397    }
398
399#endif
400
401    R operator()(T & t, A1 a1, A2 a2, A3 a3) const
402    {
403        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3);
404    }
405
406    bool operator==(BOOST_MEM_FN_NAME(mf3) const & rhs) const
407    {
408        return f_ == rhs.f_;
409    }
410
411    bool operator!=(BOOST_MEM_FN_NAME(mf3) const & rhs) const
412    {
413        return f_ != rhs.f_;
414    }
415};
416
417// cmf3
418
419template<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf3)
420{
421public:
422
423    typedef R result_type;
424
425private:
426
427    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3) const)
428    F f_;
429
430    template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const
431    {
432        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3);
433    }
434
435    template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const
436    {
437        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3);
438    }
439
440public:
441
442    explicit BOOST_MEM_FN_NAME(cmf3)(F f): f_(f) {}
443
444    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const
445    {
446        BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3);
447    }
448
449    R operator()(T const & t, A1 a1, A2 a2, A3 a3) const
450    {
451        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3);
452    }
453
454    bool operator==(BOOST_MEM_FN_NAME(cmf3) const & rhs) const
455    {
456        return f_ == rhs.f_;
457    }
458
459    bool operator!=(BOOST_MEM_FN_NAME(cmf3) const & rhs) const
460    {
461        return f_ != rhs.f_;
462    }
463};
464
465// mf4
466
467template<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf4)
468{
469public:
470
471    typedef R result_type;
472
473private:
474   
475    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4))
476    F f_;
477
478    template<class U, class B1, class B2, class B3, class B4> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const
479    {
480        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4);
481    }
482
483    template<class U, class B1, class B2, class B3, class B4> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const
484    {
485        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4);
486    }
487
488public:
489   
490    explicit BOOST_MEM_FN_NAME(mf4)(F f): f_(f) {}
491
492    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4) const
493    {
494        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4);
495    }
496
497    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4) const
498    {
499        BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4);
500    }
501
502#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
503
504    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const
505    {
506        BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4);
507    }
508
509#endif
510
511    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4) const
512    {
513        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4);
514    }
515
516    bool operator==(BOOST_MEM_FN_NAME(mf4) const & rhs) const
517    {
518        return f_ == rhs.f_;
519    }
520
521    bool operator!=(BOOST_MEM_FN_NAME(mf4) const & rhs) const
522    {
523        return f_ != rhs.f_;
524    }
525};
526
527// cmf4
528
529template<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf4)
530{
531public:
532
533    typedef R result_type;
534
535private:
536   
537    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4) const)
538    F f_;
539
540    template<class U, class B1, class B2, class B3, class B4> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const
541    {
542        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4);
543    }
544
545    template<class U, class B1, class B2, class B3, class B4> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const
546    {
547        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4);
548    }
549
550public:
551   
552    explicit BOOST_MEM_FN_NAME(cmf4)(F f): f_(f) {}
553
554    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const
555    {
556        BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4);
557    }
558
559    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4) const
560    {
561        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4);
562    }
563
564    bool operator==(BOOST_MEM_FN_NAME(cmf4) const & rhs) const
565    {
566        return f_ == rhs.f_;
567    }
568
569    bool operator!=(BOOST_MEM_FN_NAME(cmf4) const & rhs) const
570    {
571        return f_ != rhs.f_;
572    }
573};
574
575// mf5
576
577template<class R, class T, class A1, class A2, class A3, class A4, class A5 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf5)
578{
579public:
580
581    typedef R result_type;
582
583private:
584   
585    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5))
586    F f_;
587
588    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const
589    {
590        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5);
591    }
592
593    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const
594    {
595        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5);
596    }
597
598public:
599   
600    explicit BOOST_MEM_FN_NAME(mf5)(F f): f_(f) {}
601
602    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
603    {
604        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5);
605    }
606
607    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
608    {
609        BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5);
610    }
611
612#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
613
614    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
615    {
616        BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5);
617    }
618
619#endif
620
621    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
622    {
623        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5);
624    }
625
626    bool operator==(BOOST_MEM_FN_NAME(mf5) const & rhs) const
627    {
628        return f_ == rhs.f_;
629    }
630
631    bool operator!=(BOOST_MEM_FN_NAME(mf5) const & rhs) const
632    {
633        return f_ != rhs.f_;
634    }
635};
636
637// cmf5
638
639template<class R, class T, class A1, class A2, class A3, class A4, class A5 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf5)
640{
641public:
642
643    typedef R result_type;
644
645private:
646   
647    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5) const)
648    F f_;
649
650    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const
651    {
652        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5);
653    }
654
655    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const
656    {
657        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5);
658    }
659
660public:
661   
662    explicit BOOST_MEM_FN_NAME(cmf5)(F f): f_(f) {}
663
664    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
665    {
666        BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5);
667    }
668
669    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
670    {
671        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5);
672    }
673
674    bool operator==(BOOST_MEM_FN_NAME(cmf5) const & rhs) const
675    {
676        return f_ == rhs.f_;
677    }
678
679    bool operator!=(BOOST_MEM_FN_NAME(cmf5) const & rhs) const
680    {
681        return f_ != rhs.f_;
682    }
683};
684
685// mf6
686
687template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf6)
688{
689public:
690
691    typedef R result_type;
692
693private:
694
695    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6))
696    F f_;
697
698    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const
699    {
700        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6);
701    }
702
703    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const
704    {
705        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6);
706    }
707
708public:
709
710    explicit BOOST_MEM_FN_NAME(mf6)(F f): f_(f) {}
711
712    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
713    {
714        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6);
715    }
716
717    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
718    {
719        BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6);
720    }
721
722#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
723
724    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
725    {
726        BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6);
727    }
728
729#endif
730
731    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
732    {
733        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6);
734    }
735
736    bool operator==(BOOST_MEM_FN_NAME(mf6) const & rhs) const
737    {
738        return f_ == rhs.f_;
739    }
740
741    bool operator!=(BOOST_MEM_FN_NAME(mf6) const & rhs) const
742    {
743        return f_ != rhs.f_;
744    }
745};
746
747// cmf6
748
749template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf6)
750{
751public:
752
753    typedef R result_type;
754
755private:
756   
757    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6) const)
758    F f_;
759
760    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const
761    {
762        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6);
763    }
764
765    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const
766    {
767        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6);
768    }
769
770public:
771   
772    explicit BOOST_MEM_FN_NAME(cmf6)(F f): f_(f) {}
773
774    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
775    {
776        BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6);
777    }
778
779    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
780    {
781        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6);
782    }
783
784    bool operator==(BOOST_MEM_FN_NAME(cmf6) const & rhs) const
785    {
786        return f_ == rhs.f_;
787    }
788
789    bool operator!=(BOOST_MEM_FN_NAME(cmf6) const & rhs) const
790    {
791        return f_ != rhs.f_;
792    }
793};
794
795// mf7
796
797template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf7)
798{
799public:
800
801    typedef R result_type;
802
803private:
804   
805    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7))
806    F f_;
807
808    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const
809    {
810        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7);
811    }
812
813    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const
814    {
815        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7);
816    }
817
818public:
819   
820    explicit BOOST_MEM_FN_NAME(mf7)(F f): f_(f) {}
821
822    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
823    {
824        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7);
825    }
826
827    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
828    {
829        BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7);
830    }
831
832#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
833
834    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
835    {
836        BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7);
837    }
838
839#endif
840
841    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
842    {
843        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7);
844    }
845
846    bool operator==(BOOST_MEM_FN_NAME(mf7) const & rhs) const
847    {
848        return f_ == rhs.f_;
849    }
850
851    bool operator!=(BOOST_MEM_FN_NAME(mf7) const & rhs) const
852    {
853        return f_ != rhs.f_;
854    }
855};
856
857// cmf7
858
859template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf7)
860{
861public:
862
863    typedef R result_type;
864
865private:
866   
867    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7) const)
868    F f_;
869
870    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const
871    {
872        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7);
873    }
874
875    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const
876    {
877        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7);
878    }
879
880public:
881   
882    explicit BOOST_MEM_FN_NAME(cmf7)(F f): f_(f) {}
883
884    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
885    {
886        BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7);
887    }
888
889    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
890    {
891        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7);
892    }
893
894    bool operator==(BOOST_MEM_FN_NAME(cmf7) const & rhs) const
895    {
896        return f_ == rhs.f_;
897    }
898
899    bool operator!=(BOOST_MEM_FN_NAME(cmf7) const & rhs) const
900    {
901        return f_ != rhs.f_;
902    }
903};
904
905// mf8
906
907template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf8)
908{
909public:
910
911    typedef R result_type;
912
913private:
914   
915    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8))
916    F f_;
917
918    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const
919    {
920        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
921    }
922
923    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const
924    {
925        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
926    }
927
928public:
929   
930    explicit BOOST_MEM_FN_NAME(mf8)(F f): f_(f) {}
931
932    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
933    {
934        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
935    }
936
937    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
938    {
939        BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7, a8);
940    }
941
942#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
943
944    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
945    {
946        BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7, a8);
947    }
948
949#endif
950
951    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
952    {
953        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
954    }
955
956    bool operator==(BOOST_MEM_FN_NAME(mf8) const & rhs) const
957    {
958        return f_ == rhs.f_;
959    }
960
961    bool operator!=(BOOST_MEM_FN_NAME(mf8) const & rhs) const
962    {
963        return f_ != rhs.f_;
964    }
965};
966
967// cmf8
968
969template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf8)
970{
971public:
972
973    typedef R result_type;
974
975private:
976   
977    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8) const)
978    F f_;
979
980    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const
981    {
982        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
983    }
984
985    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const
986    {
987        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
988    }
989
990public:
991   
992    explicit BOOST_MEM_FN_NAME(cmf8)(F f): f_(f) {}
993
994    R operator()(T const * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
995    {
996        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
997    }
998
999    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
1000    {
1001        BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7, a8);
1002    }
1003
1004    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
1005    {
1006        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
1007    }
1008
1009    bool operator==(BOOST_MEM_FN_NAME(cmf8) const & rhs) const
1010    {
1011        return f_ == rhs.f_;
1012    }
1013
1014    bool operator!=(BOOST_MEM_FN_NAME(cmf8) const & rhs) const
1015    {
1016        return f_ != rhs.f_;
1017    }
1018};
1019
1020#undef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
Note: See TracBrowser for help on using the repository browser.