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