Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:41:34

0001 
0002 // Copyright Peter Dimov 2001
0003 // Copyright Aleksey Gurtovoy 2001-2004
0004 //
0005 // Distributed under the Boost Software License, Version 1.0. 
0006 // (See accompanying file LICENSE_1_0.txt or copy at 
0007 // http://www.boost.org/LICENSE_1_0.txt)
0008 //
0009 
0010 // Preprocessed version of "boost/mpl/bind.hpp" header
0011 // -- DO NOT modify by hand!
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 } // namespace aux
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 } // namespace aux
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 } // namespace aux
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 } // namespace aux
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 } // namespace aux
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 } // namespace aux
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 } // namespace aux
0450 
0451 BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
0452 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
0453 
0454 /// primary template (not a specialization!)
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 /// if_/eval_if specializations
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