Back to home page

EIC code displayed by LXR

 
 

    


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

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, int dummy_
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, int dummy_
0112     >
0113 struct bind< F,na,na,na,na,na >
0114     : bind0<F>
0115 {
0116 };
0117 
0118 template<
0119       typename F, typename T1, int dummy_
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, int dummy_
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, int dummy_
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, int dummy_
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, int dummy_
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, int dummy_
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     , int dummy_
0310     >
0311 struct bind4
0312 {
0313     template<
0314           typename U1 = na, typename U2 = na, typename U3 = na
0315         , typename U4 = na, typename U5 = na
0316         >
0317     struct apply
0318     {
0319      private:
0320         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
0321         typedef typename r0::type a0;
0322         typedef typename r0::next n1;
0323         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
0324         ///
0325         typedef aux::replace_unnamed_arg< T1,n1 > r1;
0326         typedef typename r1::type a1;
0327         typedef typename r1::next n2;
0328         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
0329         ///
0330         typedef aux::replace_unnamed_arg< T2,n2 > r2;
0331         typedef typename r2::type a2;
0332         typedef typename r2::next n3;
0333         typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
0334         ///
0335         typedef aux::replace_unnamed_arg< T3,n3 > r3;
0336         typedef typename r3::type a3;
0337         typedef typename r3::next n4;
0338         typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
0339         ///
0340         typedef aux::replace_unnamed_arg< T4,n4 > r4;
0341         typedef typename r4::type a4;
0342         typedef typename r4::next n5;
0343         typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
0344         ///
0345      public:
0346         typedef typename apply_wrap4<
0347               f_
0348             , typename t1::type, typename t2::type, typename t3::type
0349             , typename t4::type
0350             >::type type;
0351 
0352     };
0353 };
0354 
0355 namespace aux {
0356 
0357 template<
0358       typename F, typename T1, typename T2, typename T3, typename T4
0359     , typename U1, typename U2, typename U3, typename U4, typename U5
0360     >
0361 struct resolve_bind_arg<
0362       bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
0363     >
0364 {
0365     typedef bind4< F,T1,T2,T3,T4 > f_;
0366     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
0367 };
0368 
0369 } // namespace aux
0370 
0371 BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
0372 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
0373 
0374 template<
0375       typename F, typename T1, typename T2, typename T3, typename T4
0376     , int dummy_
0377     >
0378 struct bind< F,T1,T2,T3,T4,na >
0379     : bind4< F,T1,T2,T3,T4 >
0380 {
0381 };
0382 
0383 template<
0384       typename F, typename T1, typename T2, typename T3, typename T4
0385     , typename T5, int dummy_
0386     >
0387 struct bind5
0388 {
0389     template<
0390           typename U1 = na, typename U2 = na, typename U3 = na
0391         , typename U4 = na, typename U5 = na
0392         >
0393     struct apply
0394     {
0395      private:
0396         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
0397         typedef typename r0::type a0;
0398         typedef typename r0::next n1;
0399         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
0400         ///
0401         typedef aux::replace_unnamed_arg< T1,n1 > r1;
0402         typedef typename r1::type a1;
0403         typedef typename r1::next n2;
0404         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
0405         ///
0406         typedef aux::replace_unnamed_arg< T2,n2 > r2;
0407         typedef typename r2::type a2;
0408         typedef typename r2::next n3;
0409         typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
0410         ///
0411         typedef aux::replace_unnamed_arg< T3,n3 > r3;
0412         typedef typename r3::type a3;
0413         typedef typename r3::next n4;
0414         typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
0415         ///
0416         typedef aux::replace_unnamed_arg< T4,n4 > r4;
0417         typedef typename r4::type a4;
0418         typedef typename r4::next n5;
0419         typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
0420         ///
0421         typedef aux::replace_unnamed_arg< T5,n5 > r5;
0422         typedef typename r5::type a5;
0423         typedef typename r5::next n6;
0424         typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
0425         ///
0426      public:
0427         typedef typename apply_wrap5<
0428               f_
0429             , typename t1::type, typename t2::type, typename t3::type
0430             , typename t4::type, typename t5::type
0431             >::type type;
0432 
0433     };
0434 };
0435 
0436 namespace aux {
0437 
0438 template<
0439       typename F, typename T1, typename T2, typename T3, typename T4
0440     , typename T5, typename U1, typename U2, typename U3, typename U4
0441     , typename U5
0442     >
0443 struct resolve_bind_arg<
0444       bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
0445     >
0446 {
0447     typedef bind5< F,T1,T2,T3,T4,T5 > f_;
0448     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
0449 };
0450 
0451 } // namespace aux
0452 
0453 BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
0454 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
0455 
0456 /// primary template (not a specialization!)
0457 
0458 template<
0459       typename F, typename T1, typename T2, typename T3, typename T4
0460     , typename T5, int dummy_
0461     >
0462 struct bind
0463     : bind5< F,T1,T2,T3,T4,T5 >
0464 {
0465 };
0466 
0467 /// if_/eval_if specializations
0468 template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
0469 struct quote3;
0470 
0471 template< typename T1, typename T2, typename T3 > struct if_;
0472 
0473 template<
0474       typename Tag, typename T1, typename T2, typename T3
0475     >
0476 struct bind3<
0477       quote3< if_,Tag >
0478     , T1, T2, T3
0479     >
0480 {
0481     template<
0482           typename U1 = na, typename U2 = na, typename U3 = na
0483         , typename U4 = na, typename U5 = na
0484         >
0485     struct apply
0486     {
0487      private:
0488         typedef mpl::arg<1> n1;
0489         typedef aux::replace_unnamed_arg< T1,n1 > r1;
0490         typedef typename r1::type a1;
0491         typedef typename r1::next n2;
0492         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
0493         ///
0494         typedef aux::replace_unnamed_arg< T2,n2 > r2;
0495         typedef typename r2::type a2;
0496         typedef typename r2::next n3;
0497         typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
0498         ///
0499         typedef aux::replace_unnamed_arg< T3,n3 > r3;
0500         typedef typename r3::type a3;
0501         typedef typename r3::next n4;
0502         typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
0503         ///
0504         typedef typename if_<
0505               typename t1::type
0506             , t2, t3
0507             >::type f_;
0508 
0509      public:
0510         typedef typename f_::type type;
0511     };
0512 };
0513 
0514 }}
0515