/extlibs/Boost/include/boost/mpl/aux_/preprocessed/mwcw/bind.hpp
C++ Header | 561 lines | 460 code | 63 blank | 38 comment | 0 complexity | 006c39af316cfdd6dd2723ad85e4baad MD5 | raw file
1 2// Copyright Peter Dimov 2001 3// Copyright Aleksey Gurtovoy 2001-2004 4// 5// Distributed under the Boost Software License, Version 1.0. 6// (See accompanying file LICENSE_1_0.txt or copy at 7// http://www.boost.org/LICENSE_1_0.txt) 8// 9 10// Preprocessed version of "boost/mpl/bind.hpp" header 11// -- DO NOT modify by hand! 12 13namespace boost { namespace mpl { 14 15namespace aux { 16 17template< 18 typename T, typename U1, typename U2, typename U3, typename U4 19 , typename U5 20 > 21struct resolve_bind_arg 22{ 23 typedef T type; 24}; 25 26template< 27 typename T 28 , typename Arg 29 > 30struct replace_unnamed_arg 31{ 32 typedef Arg next; 33 typedef T type; 34}; 35 36template< 37 typename Arg 38 > 39struct replace_unnamed_arg< arg< -1 >, Arg > 40{ 41 typedef typename Arg::next next; 42 typedef Arg type; 43}; 44 45template< 46 int N, typename U1, typename U2, typename U3, typename U4, typename U5 47 > 48struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 > 49{ 50 typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type; 51}; 52 53template< 54 typename F, typename T1, typename T2, typename T3, typename T4 55 , typename T5, typename U1, typename U2, typename U3, typename U4 56 , typename U5 57 > 58struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 > 59{ 60 typedef bind< F,T1,T2,T3,T4,T5 > f_; 61 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; 62}; 63 64} // namespace aux 65 66template< 67 typename F 68 > 69struct bind0 70{ 71 template< 72 typename U1 = na, typename U2 = na, typename U3 = na 73 , typename U4 = na, typename U5 = na 74 > 75 struct apply 76 { 77 private: 78 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; 79 typedef typename r0::type a0; 80 typedef typename r0::next n1; 81 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; 82 /// 83 public: 84 typedef typename apply_wrap0< 85 f_ 86 >::type type; 87 88 }; 89}; 90 91namespace aux { 92 93template< 94 typename F, typename U1, typename U2, typename U3, typename U4 95 , typename U5 96 > 97struct resolve_bind_arg< 98 bind0<F>, U1, U2, U3, U4, U5 99 > 100{ 101 typedef bind0<F> f_; 102 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; 103}; 104 105} // namespace aux 106 107BOOST_MPL_AUX_ARITY_SPEC(1, bind0) 108BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) 109 110template< 111 typename F 112 > 113struct bind< F,na,na,na,na,na > 114 : bind0<F> 115{ 116}; 117 118template< 119 typename F, typename T1 120 > 121struct bind1 122{ 123 template< 124 typename U1 = na, typename U2 = na, typename U3 = na 125 , typename U4 = na, typename U5 = na 126 > 127 struct apply 128 { 129 private: 130 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; 131 typedef typename r0::type a0; 132 typedef typename r0::next n1; 133 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; 134 /// 135 typedef aux::replace_unnamed_arg< T1,n1 > r1; 136 typedef typename r1::type a1; 137 typedef typename r1::next n2; 138 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; 139 /// 140 public: 141 typedef typename apply_wrap1< 142 f_ 143 , typename t1::type 144 >::type type; 145 146 }; 147}; 148 149namespace aux { 150 151template< 152 typename F, typename T1, typename U1, typename U2, typename U3 153 , typename U4, typename U5 154 > 155struct resolve_bind_arg< 156 bind1< F,T1 >, U1, U2, U3, U4, U5 157 > 158{ 159 typedef bind1< F,T1 > f_; 160 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; 161}; 162 163} // namespace aux 164 165BOOST_MPL_AUX_ARITY_SPEC(2, bind1) 166BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) 167 168template< 169 typename F, typename T1 170 > 171struct bind< F,T1,na,na,na,na > 172 : bind1< F,T1 > 173{ 174}; 175 176template< 177 typename F, typename T1, typename T2 178 > 179struct bind2 180{ 181 template< 182 typename U1 = na, typename U2 = na, typename U3 = na 183 , typename U4 = na, typename U5 = na 184 > 185 struct apply 186 { 187 private: 188 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; 189 typedef typename r0::type a0; 190 typedef typename r0::next n1; 191 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; 192 /// 193 typedef aux::replace_unnamed_arg< T1,n1 > r1; 194 typedef typename r1::type a1; 195 typedef typename r1::next n2; 196 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; 197 /// 198 typedef aux::replace_unnamed_arg< T2,n2 > r2; 199 typedef typename r2::type a2; 200 typedef typename r2::next n3; 201 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; 202 /// 203 public: 204 typedef typename apply_wrap2< 205 f_ 206 , typename t1::type, typename t2::type 207 >::type type; 208 209 }; 210}; 211 212namespace aux { 213 214template< 215 typename F, typename T1, typename T2, typename U1, typename U2 216 , typename U3, typename U4, typename U5 217 > 218struct resolve_bind_arg< 219 bind2< F,T1,T2 >, U1, U2, U3, U4, U5 220 > 221{ 222 typedef bind2< F,T1,T2 > f_; 223 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; 224}; 225 226} // namespace aux 227 228BOOST_MPL_AUX_ARITY_SPEC(3, bind2) 229BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) 230 231template< 232 typename F, typename T1, typename T2 233 > 234struct bind< F,T1,T2,na,na,na > 235 : bind2< F,T1,T2 > 236{ 237}; 238 239template< 240 typename F, typename T1, typename T2, typename T3 241 > 242struct bind3 243{ 244 template< 245 typename U1 = na, typename U2 = na, typename U3 = na 246 , typename U4 = na, typename U5 = na 247 > 248 struct apply 249 { 250 private: 251 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; 252 typedef typename r0::type a0; 253 typedef typename r0::next n1; 254 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; 255 /// 256 typedef aux::replace_unnamed_arg< T1,n1 > r1; 257 typedef typename r1::type a1; 258 typedef typename r1::next n2; 259 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; 260 /// 261 typedef aux::replace_unnamed_arg< T2,n2 > r2; 262 typedef typename r2::type a2; 263 typedef typename r2::next n3; 264 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; 265 /// 266 typedef aux::replace_unnamed_arg< T3,n3 > r3; 267 typedef typename r3::type a3; 268 typedef typename r3::next n4; 269 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; 270 /// 271 public: 272 typedef typename apply_wrap3< 273 f_ 274 , typename t1::type, typename t2::type, typename t3::type 275 >::type type; 276 277 }; 278}; 279 280namespace aux { 281 282template< 283 typename F, typename T1, typename T2, typename T3, typename U1 284 , typename U2, typename U3, typename U4, typename U5 285 > 286struct resolve_bind_arg< 287 bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5 288 > 289{ 290 typedef bind3< F,T1,T2,T3 > f_; 291 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; 292}; 293 294} // namespace aux 295 296BOOST_MPL_AUX_ARITY_SPEC(4, bind3) 297BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) 298 299template< 300 typename F, typename T1, typename T2, typename T3 301 > 302struct bind< F,T1,T2,T3,na,na > 303 : bind3< F,T1,T2,T3 > 304{ 305}; 306 307template< 308 typename F, typename T1, typename T2, typename T3, typename T4 309 > 310struct bind4 311{ 312 template< 313 typename U1 = na, typename U2 = na, typename U3 = na 314 , typename U4 = na, typename U5 = na 315 > 316 struct apply 317 { 318 private: 319 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; 320 typedef typename r0::type a0; 321 typedef typename r0::next n1; 322 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; 323 /// 324 typedef aux::replace_unnamed_arg< T1,n1 > r1; 325 typedef typename r1::type a1; 326 typedef typename r1::next n2; 327 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; 328 /// 329 typedef aux::replace_unnamed_arg< T2,n2 > r2; 330 typedef typename r2::type a2; 331 typedef typename r2::next n3; 332 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; 333 /// 334 typedef aux::replace_unnamed_arg< T3,n3 > r3; 335 typedef typename r3::type a3; 336 typedef typename r3::next n4; 337 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; 338 /// 339 typedef aux::replace_unnamed_arg< T4,n4 > r4; 340 typedef typename r4::type a4; 341 typedef typename r4::next n5; 342 typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; 343 /// 344 public: 345 typedef typename apply_wrap4< 346 f_ 347 , typename t1::type, typename t2::type, typename t3::type 348 , typename t4::type 349 >::type type; 350 351 }; 352}; 353 354namespace aux { 355 356template< 357 typename F, typename T1, typename T2, typename T3, typename T4 358 , typename U1, typename U2, typename U3, typename U4, typename U5 359 > 360struct resolve_bind_arg< 361 bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 362 > 363{ 364 typedef bind4< F,T1,T2,T3,T4 > f_; 365 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; 366}; 367 368} // namespace aux 369 370BOOST_MPL_AUX_ARITY_SPEC(5, bind4) 371BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) 372 373template< 374 typename F, typename T1, typename T2, typename T3, typename T4 375 > 376struct bind< F,T1,T2,T3,T4,na > 377 : bind4< F,T1,T2,T3,T4 > 378{ 379}; 380 381template< 382 typename F, typename T1, typename T2, typename T3, typename T4 383 , typename T5 384 > 385struct bind5 386{ 387 template< 388 typename U1 = na, typename U2 = na, typename U3 = na 389 , typename U4 = na, typename U5 = na 390 > 391 struct apply 392 { 393 private: 394 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; 395 typedef typename r0::type a0; 396 typedef typename r0::next n1; 397 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; 398 /// 399 typedef aux::replace_unnamed_arg< T1,n1 > r1; 400 typedef typename r1::type a1; 401 typedef typename r1::next n2; 402 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; 403 /// 404 typedef aux::replace_unnamed_arg< T2,n2 > r2; 405 typedef typename r2::type a2; 406 typedef typename r2::next n3; 407 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; 408 /// 409 typedef aux::replace_unnamed_arg< T3,n3 > r3; 410 typedef typename r3::type a3; 411 typedef typename r3::next n4; 412 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; 413 /// 414 typedef aux::replace_unnamed_arg< T4,n4 > r4; 415 typedef typename r4::type a4; 416 typedef typename r4::next n5; 417 typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; 418 /// 419 typedef aux::replace_unnamed_arg< T5,n5 > r5; 420 typedef typename r5::type a5; 421 typedef typename r5::next n6; 422 typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5; 423 /// 424 public: 425 typedef typename apply_wrap5< 426 f_ 427 , typename t1::type, typename t2::type, typename t3::type 428 , typename t4::type, typename t5::type 429 >::type type; 430 431 }; 432}; 433 434namespace aux { 435 436template< 437 typename F, typename T1, typename T2, typename T3, typename T4 438 , typename T5, typename U1, typename U2, typename U3, typename U4 439 , typename U5 440 > 441struct resolve_bind_arg< 442 bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 443 > 444{ 445 typedef bind5< F,T1,T2,T3,T4,T5 > f_; 446 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; 447}; 448 449} // namespace aux 450 451BOOST_MPL_AUX_ARITY_SPEC(6, bind5) 452BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) 453 454/// primary template (not a specialization!) 455 456template< 457 typename F, typename T1, typename T2, typename T3, typename T4 458 , typename T5 459 > 460struct bind 461 : bind5< F,T1,T2,T3,T4,T5 > 462{ 463}; 464 465/// if_/eval_if specializations 466template< template< typename T1, typename T2, typename T3 > class F, typename Tag > 467struct quote3; 468 469template< typename T1, typename T2, typename T3 > struct if_; 470 471template< 472 typename Tag, typename T1, typename T2, typename T3 473 > 474struct bind3< 475 quote3< if_,Tag > 476 , T1, T2, T3 477 > 478{ 479 template< 480 typename U1 = na, typename U2 = na, typename U3 = na 481 , typename U4 = na, typename U5 = na 482 > 483 struct apply 484 { 485 private: 486 typedef mpl::arg<1> n1; 487 typedef aux::replace_unnamed_arg< T1,n1 > r1; 488 typedef typename r1::type a1; 489 typedef typename r1::next n2; 490 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; 491 /// 492 typedef aux::replace_unnamed_arg< T2,n2 > r2; 493 typedef typename r2::type a2; 494 typedef typename r2::next n3; 495 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; 496 /// 497 typedef aux::replace_unnamed_arg< T3,n3 > r3; 498 typedef typename r3::type a3; 499 typedef typename r3::next n4; 500 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; 501 /// 502 typedef typename if_< 503 typename t1::type 504 , t2, t3 505 >::type f_; 506 507 public: 508 typedef typename f_::type type; 509 }; 510}; 511 512template< 513 template< typename T1, typename T2, typename T3 > class F, typename Tag 514 > 515struct quote3; 516 517template< typename T1, typename T2, typename T3 > struct eval_if; 518 519template< 520 typename Tag, typename T1, typename T2, typename T3 521 > 522struct bind3< 523 quote3< eval_if,Tag > 524 , T1, T2, T3 525 > 526{ 527 template< 528 typename U1 = na, typename U2 = na, typename U3 = na 529 , typename U4 = na, typename U5 = na 530 > 531 struct apply 532 { 533 private: 534 typedef mpl::arg<1> n1; 535 typedef aux::replace_unnamed_arg< T1,n1 > r1; 536 typedef typename r1::type a1; 537 typedef typename r1::next n2; 538 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; 539 /// 540 typedef aux::replace_unnamed_arg< T2,n2 > r2; 541 typedef typename r2::type a2; 542 typedef typename r2::next n3; 543 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; 544 /// 545 typedef aux::replace_unnamed_arg< T3,n3 > r3; 546 typedef typename r3::type a3; 547 typedef typename r3::next n4; 548 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; 549 /// 550 typedef typename eval_if< 551 typename t1::type 552 , t2, t3 553 >::type f_; 554 555 public: 556 typedef typename f_::type type; 557 }; 558}; 559 560}} 561