File indexing completed on 2025-01-18 09:41:34
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 namespace boost { namespace mpl {
0014
0015 namespace aux {
0016
0017 template<
0018 typename T, typename U1, typename U2, typename U3, typename U4
0019 , typename U5
0020 >
0021 struct resolve_bind_arg
0022 {
0023 typedef T type;
0024 };
0025
0026 template<
0027 typename T
0028 , typename Arg
0029 >
0030 struct replace_unnamed_arg
0031 {
0032 typedef Arg next;
0033 typedef T type;
0034 };
0035
0036 template<
0037 typename Arg
0038 >
0039 struct replace_unnamed_arg< arg< -1 >, Arg >
0040 {
0041 typedef typename Arg::next next;
0042 typedef Arg type;
0043 };
0044
0045 template<
0046 int N, typename U1, typename U2, typename U3, typename U4, typename U5
0047 >
0048 struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
0049 {
0050 typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
0051 };
0052
0053 template<
0054 typename F, typename T1, typename T2, typename T3, typename T4
0055 , typename T5, typename U1, typename U2, typename U3, typename U4
0056 , typename U5
0057 >
0058 struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
0059 {
0060 typedef bind< F,T1,T2,T3,T4,T5 > f_;
0061 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
0062 };
0063
0064 }
0065
0066 template<
0067 typename F
0068 >
0069 struct bind0
0070 {
0071 template<
0072 typename U1 = na, typename U2 = na, typename U3 = na
0073 , typename U4 = na, typename U5 = na
0074 >
0075 struct apply
0076 {
0077 private:
0078 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
0079 typedef typename r0::type a0;
0080 typedef typename r0::next n1;
0081 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
0082
0083 public:
0084 typedef typename apply_wrap0<
0085 f_
0086 >::type type;
0087
0088 };
0089 };
0090
0091 namespace aux {
0092
0093 template<
0094 typename F, typename U1, typename U2, typename U3, typename U4
0095 , typename U5
0096 >
0097 struct resolve_bind_arg<
0098 bind0<F>, U1, U2, U3, U4, U5
0099 >
0100 {
0101 typedef bind0<F> f_;
0102 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
0103 };
0104
0105 }
0106
0107 BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
0108 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
0109
0110 template<
0111 typename F
0112 >
0113 struct bind< F,na,na,na,na,na >
0114 : bind0<F>
0115 {
0116 };
0117
0118 template<
0119 typename F, typename T1
0120 >
0121 struct bind1
0122 {
0123 template<
0124 typename U1 = na, typename U2 = na, typename U3 = na
0125 , typename U4 = na, typename U5 = na
0126 >
0127 struct apply
0128 {
0129 private:
0130 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
0131 typedef typename r0::type a0;
0132 typedef typename r0::next n1;
0133 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
0134
0135 typedef aux::replace_unnamed_arg< T1,n1 > r1;
0136 typedef typename r1::type a1;
0137 typedef typename r1::next n2;
0138 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
0139
0140 public:
0141 typedef typename apply_wrap1<
0142 f_
0143 , typename t1::type
0144 >::type type;
0145
0146 };
0147 };
0148
0149 namespace aux {
0150
0151 template<
0152 typename F, typename T1, typename U1, typename U2, typename U3
0153 , typename U4, typename U5
0154 >
0155 struct resolve_bind_arg<
0156 bind1< F,T1 >, U1, U2, U3, U4, U5
0157 >
0158 {
0159 typedef bind1< F,T1 > f_;
0160 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
0161 };
0162
0163 }
0164
0165 BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
0166 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
0167
0168 template<
0169 typename F, typename T1
0170 >
0171 struct bind< F,T1,na,na,na,na >
0172 : bind1< F,T1 >
0173 {
0174 };
0175
0176 template<
0177 typename F, typename T1, typename T2
0178 >
0179 struct bind2
0180 {
0181 template<
0182 typename U1 = na, typename U2 = na, typename U3 = na
0183 , typename U4 = na, typename U5 = na
0184 >
0185 struct apply
0186 {
0187 private:
0188 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
0189 typedef typename r0::type a0;
0190 typedef typename r0::next n1;
0191 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
0192
0193 typedef aux::replace_unnamed_arg< T1,n1 > r1;
0194 typedef typename r1::type a1;
0195 typedef typename r1::next n2;
0196 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
0197
0198 typedef aux::replace_unnamed_arg< T2,n2 > r2;
0199 typedef typename r2::type a2;
0200 typedef typename r2::next n3;
0201 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
0202
0203 public:
0204 typedef typename apply_wrap2<
0205 f_
0206 , typename t1::type, typename t2::type
0207 >::type type;
0208
0209 };
0210 };
0211
0212 namespace aux {
0213
0214 template<
0215 typename F, typename T1, typename T2, typename U1, typename U2
0216 , typename U3, typename U4, typename U5
0217 >
0218 struct resolve_bind_arg<
0219 bind2< F,T1,T2 >, U1, U2, U3, U4, U5
0220 >
0221 {
0222 typedef bind2< F,T1,T2 > f_;
0223 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
0224 };
0225
0226 }
0227
0228 BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
0229 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
0230
0231 template<
0232 typename F, typename T1, typename T2
0233 >
0234 struct bind< F,T1,T2,na,na,na >
0235 : bind2< F,T1,T2 >
0236 {
0237 };
0238
0239 template<
0240 typename F, typename T1, typename T2, typename T3
0241 >
0242 struct bind3
0243 {
0244 template<
0245 typename U1 = na, typename U2 = na, typename U3 = na
0246 , typename U4 = na, typename U5 = na
0247 >
0248 struct apply
0249 {
0250 private:
0251 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
0252 typedef typename r0::type a0;
0253 typedef typename r0::next n1;
0254 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
0255
0256 typedef aux::replace_unnamed_arg< T1,n1 > r1;
0257 typedef typename r1::type a1;
0258 typedef typename r1::next n2;
0259 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
0260
0261 typedef aux::replace_unnamed_arg< T2,n2 > r2;
0262 typedef typename r2::type a2;
0263 typedef typename r2::next n3;
0264 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
0265
0266 typedef aux::replace_unnamed_arg< T3,n3 > r3;
0267 typedef typename r3::type a3;
0268 typedef typename r3::next n4;
0269 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
0270
0271 public:
0272 typedef typename apply_wrap3<
0273 f_
0274 , typename t1::type, typename t2::type, typename t3::type
0275 >::type type;
0276
0277 };
0278 };
0279
0280 namespace aux {
0281
0282 template<
0283 typename F, typename T1, typename T2, typename T3, typename U1
0284 , typename U2, typename U3, typename U4, typename U5
0285 >
0286 struct resolve_bind_arg<
0287 bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
0288 >
0289 {
0290 typedef bind3< F,T1,T2,T3 > f_;
0291 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
0292 };
0293
0294 }
0295
0296 BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
0297 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
0298
0299 template<
0300 typename F, typename T1, typename T2, typename T3
0301 >
0302 struct bind< F,T1,T2,T3,na,na >
0303 : bind3< F,T1,T2,T3 >
0304 {
0305 };
0306
0307 template<
0308 typename F, typename T1, typename T2, typename T3, typename T4
0309 >
0310 struct bind4
0311 {
0312 template<
0313 typename U1 = na, typename U2 = na, typename U3 = na
0314 , typename U4 = na, typename U5 = na
0315 >
0316 struct apply
0317 {
0318 private:
0319 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
0320 typedef typename r0::type a0;
0321 typedef typename r0::next n1;
0322 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
0323
0324 typedef aux::replace_unnamed_arg< T1,n1 > r1;
0325 typedef typename r1::type a1;
0326 typedef typename r1::next n2;
0327 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
0328
0329 typedef aux::replace_unnamed_arg< T2,n2 > r2;
0330 typedef typename r2::type a2;
0331 typedef typename r2::next n3;
0332 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
0333
0334 typedef aux::replace_unnamed_arg< T3,n3 > r3;
0335 typedef typename r3::type a3;
0336 typedef typename r3::next n4;
0337 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
0338
0339 typedef aux::replace_unnamed_arg< T4,n4 > r4;
0340 typedef typename r4::type a4;
0341 typedef typename r4::next n5;
0342 typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
0343
0344 public:
0345 typedef typename apply_wrap4<
0346 f_
0347 , typename t1::type, typename t2::type, typename t3::type
0348 , typename t4::type
0349 >::type type;
0350
0351 };
0352 };
0353
0354 namespace aux {
0355
0356 template<
0357 typename F, typename T1, typename T2, typename T3, typename T4
0358 , typename U1, typename U2, typename U3, typename U4, typename U5
0359 >
0360 struct resolve_bind_arg<
0361 bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
0362 >
0363 {
0364 typedef bind4< F,T1,T2,T3,T4 > f_;
0365 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
0366 };
0367
0368 }
0369
0370 BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
0371 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
0372
0373 template<
0374 typename F, typename T1, typename T2, typename T3, typename T4
0375 >
0376 struct bind< F,T1,T2,T3,T4,na >
0377 : bind4< F,T1,T2,T3,T4 >
0378 {
0379 };
0380
0381 template<
0382 typename F, typename T1, typename T2, typename T3, typename T4
0383 , typename T5
0384 >
0385 struct bind5
0386 {
0387 template<
0388 typename U1 = na, typename U2 = na, typename U3 = na
0389 , typename U4 = na, typename U5 = na
0390 >
0391 struct apply
0392 {
0393 private:
0394 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
0395 typedef typename r0::type a0;
0396 typedef typename r0::next n1;
0397 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
0398
0399 typedef aux::replace_unnamed_arg< T1,n1 > r1;
0400 typedef typename r1::type a1;
0401 typedef typename r1::next n2;
0402 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
0403
0404 typedef aux::replace_unnamed_arg< T2,n2 > r2;
0405 typedef typename r2::type a2;
0406 typedef typename r2::next n3;
0407 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
0408
0409 typedef aux::replace_unnamed_arg< T3,n3 > r3;
0410 typedef typename r3::type a3;
0411 typedef typename r3::next n4;
0412 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
0413
0414 typedef aux::replace_unnamed_arg< T4,n4 > r4;
0415 typedef typename r4::type a4;
0416 typedef typename r4::next n5;
0417 typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
0418
0419 typedef aux::replace_unnamed_arg< T5,n5 > r5;
0420 typedef typename r5::type a5;
0421 typedef typename r5::next n6;
0422 typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
0423
0424 public:
0425 typedef typename apply_wrap5<
0426 f_
0427 , typename t1::type, typename t2::type, typename t3::type
0428 , typename t4::type, typename t5::type
0429 >::type type;
0430
0431 };
0432 };
0433
0434 namespace aux {
0435
0436 template<
0437 typename F, typename T1, typename T2, typename T3, typename T4
0438 , typename T5, typename U1, typename U2, typename U3, typename U4
0439 , typename U5
0440 >
0441 struct resolve_bind_arg<
0442 bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
0443 >
0444 {
0445 typedef bind5< F,T1,T2,T3,T4,T5 > f_;
0446 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
0447 };
0448
0449 }
0450
0451 BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
0452 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
0453
0454
0455
0456 template<
0457 typename F, typename T1, typename T2, typename T3, typename T4
0458 , typename T5
0459 >
0460 struct bind
0461 : bind5< F,T1,T2,T3,T4,T5 >
0462 {
0463 };
0464
0465
0466 template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
0467 struct quote3;
0468
0469 template< typename T1, typename T2, typename T3 > struct if_;
0470
0471 template<
0472 typename Tag, typename T1, typename T2, typename T3
0473 >
0474 struct bind3<
0475 quote3< if_,Tag >
0476 , T1, T2, T3
0477 >
0478 {
0479 template<
0480 typename U1 = na, typename U2 = na, typename U3 = na
0481 , typename U4 = na, typename U5 = na
0482 >
0483 struct apply
0484 {
0485 private:
0486 typedef mpl::arg<1> n1;
0487 typedef aux::replace_unnamed_arg< T1,n1 > r1;
0488 typedef typename r1::type a1;
0489 typedef typename r1::next n2;
0490 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
0491
0492 typedef aux::replace_unnamed_arg< T2,n2 > r2;
0493 typedef typename r2::type a2;
0494 typedef typename r2::next n3;
0495 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
0496
0497 typedef aux::replace_unnamed_arg< T3,n3 > r3;
0498 typedef typename r3::type a3;
0499 typedef typename r3::next n4;
0500 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
0501
0502 typedef typename if_<
0503 typename t1::type
0504 , t2, t3
0505 >::type f_;
0506
0507 public:
0508 typedef typename f_::type type;
0509 };
0510 };
0511
0512 template<
0513 template< typename T1, typename T2, typename T3 > class F, typename Tag
0514 >
0515 struct quote3;
0516
0517 template< typename T1, typename T2, typename T3 > struct eval_if;
0518
0519 template<
0520 typename Tag, typename T1, typename T2, typename T3
0521 >
0522 struct bind3<
0523 quote3< eval_if,Tag >
0524 , T1, T2, T3
0525 >
0526 {
0527 template<
0528 typename U1 = na, typename U2 = na, typename U3 = na
0529 , typename U4 = na, typename U5 = na
0530 >
0531 struct apply
0532 {
0533 private:
0534 typedef mpl::arg<1> n1;
0535 typedef aux::replace_unnamed_arg< T1,n1 > r1;
0536 typedef typename r1::type a1;
0537 typedef typename r1::next n2;
0538 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
0539
0540 typedef aux::replace_unnamed_arg< T2,n2 > r2;
0541 typedef typename r2::type a2;
0542 typedef typename r2::next n3;
0543 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
0544
0545 typedef aux::replace_unnamed_arg< T3,n3 > r3;
0546 typedef typename r3::type a3;
0547 typedef typename r3::next n4;
0548 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
0549
0550 typedef typename eval_if<
0551 typename t1::type
0552 , t2, t3
0553 >::type f_;
0554
0555 public:
0556 typedef typename f_::type type;
0557 };
0558 };
0559
0560 }}
0561