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 1048