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 13 namespace boost { namespace mpl { 14 15 namespace aux { 16 17 template< 18 typename T, typename U1, typename U2, typename U3, typename U4 19 , typename U5 20 > 21 struct resolve_bind_arg 22 { 23 typedef T type; 24 }; 25 26 template< 27 typename T 28 , typename Arg 29 > 30 struct replace_unnamed_arg 31 { 32 typedef Arg next; 33 typedef T type; 34 }; 35 36 template< 37 typename Arg 38 > 39 struct replace_unnamed_arg< arg< -1 >, Arg > 40 { 41 typedef typename Arg::next next; 42 typedef Arg type; 43 }; 44 45 template< 46 int N, typename U1, typename U2, typename U3, typename U4, typename U5 47 > 48 struct 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 53 template< 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 > 58 struct 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 66 template< 67 typename F, int dummy_ 68 > 69 struct 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 91 namespace aux { 92 93 template< 94 typename F, typename U1, typename U2, typename U3, typename U4 95 , typename U5 96 > 97 struct 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 107 BOOST_MPL_AUX_ARITY_SPEC(1, bind0) 108 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) 109 110 template< 111 typename F, int dummy_ 112 > 113 struct bind< F,na,na,na,na,na > 114 : bind0<F> 115 { 116 }; 117 118 template< 119 typename F, typename T1, int dummy_ 120 > 121 struct 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 149 namespace aux { 150 151 template< 152 typename F, typename T1, typename U1, typename U2, typename U3 153 , typename U4, typename U5 154 > 155 struct 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 165 BOOST_MPL_AUX_ARITY_SPEC(2, bind1) 166 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) 167 168 template< 169 typename F, typename T1, int dummy_ 170 > 171 struct bind< F,T1,na,na,na,na > 172 : bind1< F,T1 > 173 { 174 }; 175 176 template< 177 typename F, typename T1, typename T2, int dummy_ 178 > 179 struct 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 212 namespace aux { 213 214 template< 215 typename F, typename T1, typename T2, typename U1, typename U2 216 , typename U3, typename U4, typename U5 217 > 218 struct 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 228 BOOST_MPL_AUX_ARITY_SPEC(3, bind2) 229 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) 230 231 template< 232 typename F, typename T1, typename T2, int dummy_ 233 > 234 struct bind< F,T1,T2,na,na,na > 235 : bind2< F,T1,T2 > 236 { 237 }; 238 239 template< 240 typename F, typename T1, typename T2, typename T3, int dummy_ 241 > 242 struct 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 280 namespace aux { 281 282 template< 283 typename F, typename T1, typename T2, typename T3, typename U1 284 , typename U2, typename U3, typename U4, typename U5 285 > 286 struct 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 296 BOOST_MPL_AUX_ARITY_SPEC(4, bind3) 297 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) 298 299 template< 300 typename F, typename T1, typename T2, typename T3, int dummy_ 301 > 302 struct bind< F,T1,T2,T3,na,na > 303 : bind3< F,T1,T2,T3 > 304 { 305 }; 306 307 template< 308 typename F, typename T1, typename T2, typename T3, typename T4 309 , int dummy_ 310 > 311 struct bind4 312 { 313 template< 314 typename U1 = na, typename U2 = na, typename U3 = na 315 , typename U4 = na, typename U5 = na 316 > 317 struct apply 318 { 319 private: 320 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; 321 typedef typename r0::type a0; 322 typedef typename r0::next n1; 323 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; 324 /// 325 typedef aux::replace_unnamed_arg< T1,n1 > r1; 326 typedef typename r1::type a1; 327 typedef typename r1::next n2; 328 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; 329 /// 330 typedef aux::replace_unnamed_arg< T2,n2 > r2; 331 typedef typename r2::type a2; 332 typedef typename r2::next n3; 333 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; 334 /// 335 typedef aux::replace_unnamed_arg< T3,n3 > r3; 336 typedef typename r3::type a3; 337 typedef typename r3::next n4; 338 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; 339 /// 340 typedef aux::replace_unnamed_arg< T4,n4 > r4; 341 typedef typename r4::type a4; 342 typedef typename r4::next n5; 343 typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; 344 /// 345 public: 346 typedef typename apply_wrap4< 347 f_ 348 , typename t1::type, typename t2::type, typename t3::type 349 , typename t4::type 350 >::type type; 351 352 }; 353 }; 354 355 namespace aux { 356 357 template< 358 typename F, typename T1, typename T2, typename T3, typename T4 359 , typename U1, typename U2, typename U3, typename U4, typename U5 360 > 361 struct resolve_bind_arg< 362 bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 363 > 364 { 365 typedef bind4< F,T1,T2,T3,T4 > f_; 366 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; 367 }; 368 369 } // namespace aux 370 371 BOOST_MPL_AUX_ARITY_SPEC(5, bind4) 372 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) 373 374 template< 375 typename F, typename T1, typename T2, typename T3, typename T4 376 , int dummy_ 377 > 378 struct bind< F,T1,T2,T3,T4,na > 379 : bind4< F,T1,T2,T3,T4 > 380 { 381 }; 382 383 template< 384 typename F, typename T1, typename T2, typename T3, typename T4 385 , typename T5, int dummy_ 386 > 387 struct bind5 388 { 389 template< 390 typename U1 = na, typename U2 = na, typename U3 = na 391 , typename U4 = na, typename U5 = na 392 > 393 struct apply 394 { 395 private: 396 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; 397 typedef typename r0::type a0; 398 typedef typename r0::next n1; 399 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; 400 /// 401 typedef aux::replace_unnamed_arg< T1,n1 > r1; 402 typedef typename r1::type a1; 403 typedef typename r1::next n2; 404 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; 405 /// 406 typedef aux::replace_unnamed_arg< T2,n2 > r2; 407 typedef typename r2::type a2; 408 typedef typename r2::next n3; 409 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; 410 /// 411 typedef aux::replace_unnamed_arg< T3,n3 > r3; 412 typedef typename r3::type a3; 413 typedef typename r3::next n4; 414 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; 415 /// 416 typedef aux::replace_unnamed_arg< T4,n4 > r4; 417 typedef typename r4::type a4; 418 typedef typename r4::next n5; 419 typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; 420 /// 421 typedef aux::replace_unnamed_arg< T5,n5 > r5; 422 typedef typename r5::type a5; 423 typedef typename r5::next n6; 424 typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5; 425 /// 426 public: 427 typedef typename apply_wrap5< 428 f_ 429 , typename t1::type, typename t2::type, typename t3::type 430 , typename t4::type, typename t5::type 431 >::type type; 432 433 }; 434 }; 435 436 namespace aux { 437 438 template< 439 typename F, typename T1, typename T2, typename T3, typename T4 440 , typename T5, typename U1, typename U2, typename U3, typename U4 441 , typename U5 442 > 443 struct resolve_bind_arg< 444 bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 445 > 446 { 447 typedef bind5< F,T1,T2,T3,T4,T5 > f_; 448 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; 449 }; 450 451 } // namespace aux 452 453 BOOST_MPL_AUX_ARITY_SPEC(6, bind5) 454 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) 455 456 /// primary template (not a specialization!) 457 458 template< 459 typename F, typename T1, typename T2, typename T3, typename T4 460 , typename T5, int dummy_ 461 > 462 struct bind 463 : bind5< F,T1,T2,T3,T4,T5 > 464 { 465 }; 466 467 /// if_/eval_if specializations 468 template< template< typename T1, typename T2, typename T3 > class F, typename Tag > 469 struct quote3; 470 471 template< typename T1, typename T2, typename T3 > struct if_; 472 473 template< 474 typename Tag, typename T1, typename T2, typename T3 475 > 476 struct bind3< 477 quote3< if_,Tag > 478 , T1, T2, T3 479 > 480 { 481 template< 482 typename U1 = na, typename U2 = na, typename U3 = na 483 , typename U4 = na, typename U5 = na 484 > 485 struct apply 486 { 487 private: 488 typedef mpl::arg<1> n1; 489 typedef aux::replace_unnamed_arg< T1,n1 > r1; 490 typedef typename r1::type a1; 491 typedef typename r1::next n2; 492 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; 493 /// 494 typedef aux::replace_unnamed_arg< T2,n2 > r2; 495 typedef typename r2::type a2; 496 typedef typename r2::next n3; 497 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; 498 /// 499 typedef aux::replace_unnamed_arg< T3,n3 > r3; 500 typedef typename r3::type a3; 501 typedef typename r3::next n4; 502 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; 503 /// 504 typedef typename if_< 505 typename t1::type 506 , t2, t3 507 >::type f_; 508 509 public: 510 typedef typename f_::type type; 511 }; 512 }; 513 514 }} 515 516