]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/bind/include/boost/bind/mem_fn_template.hpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / bind / include / boost / bind / mem_fn_template.hpp
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
21 template<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf0)
22 {
23 public:
24
25 typedef R result_type;
26 typedef T * argument_type;
27
28 private:
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
43 public:
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
86 template<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf0)
87 {
88 public:
89
90 typedef R result_type;
91 typedef T const * argument_type;
92
93 private:
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
108 public:
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
136 template<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf1)
137 {
138 public:
139
140 typedef R result_type;
141 typedef T * first_argument_type;
142 typedef A1 second_argument_type;
143
144 private:
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
159 public:
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
202 template<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf1)
203 {
204 public:
205
206 typedef R result_type;
207 typedef T const * first_argument_type;
208 typedef A1 second_argument_type;
209
210 private:
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
225 public:
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
253 template<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf2)
254 {
255 public:
256
257 typedef R result_type;
258
259 private:
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
274 public:
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
317 template<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf2)
318 {
319 public:
320
321 typedef R result_type;
322
323 private:
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
338 public:
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
366 template<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf3)
367 {
368 public:
369
370 typedef R result_type;
371
372 private:
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
387 public:
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
430 template<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf3)
431 {
432 public:
433
434 typedef R result_type;
435
436 private:
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
451 public:
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
479 template<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf4)
480 {
481 public:
482
483 typedef R result_type;
484
485 private:
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
500 public:
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
543 template<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf4)
544 {
545 public:
546
547 typedef R result_type;
548
549 private:
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
564 public:
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
592 template<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 {
594 public:
595
596 typedef R result_type;
597
598 private:
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
613 public:
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
656 template<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 {
658 public:
659
660 typedef R result_type;
661
662 private:
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
677 public:
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
705 template<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 {
707 public:
708
709 typedef R result_type;
710
711 private:
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
726 public:
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
769 template<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 {
771 public:
772
773 typedef R result_type;
774
775 private:
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
790 public:
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
818 template<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 {
820 public:
821
822 typedef R result_type;
823
824 private:
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
839 public:
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
882 template<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 {
884 public:
885
886 typedef R result_type;
887
888 private:
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
903 public:
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
931 template<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 {
933 public:
934
935 typedef R result_type;
936
937 private:
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
952 public:
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
995 template<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 {
997 public:
998
999 typedef R result_type;
1000
1001 private:
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
1016 public:
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