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/aux_/basic_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       int N, typename U1, typename U2, typename U3, typename U4, typename U5
0028     >
0029 struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
0030 {
0031     typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
0032 };
0033 
0034 template<
0035       typename F, typename T1, typename T2, typename T3, typename T4
0036     , typename T5, typename U1, typename U2, typename U3, typename U4
0037     , typename U5
0038     >
0039 struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
0040 {
0041     typedef bind< F,T1,T2,T3,T4,T5 > f_;
0042     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
0043 };
0044 
0045 } // namespace aux
0046 
0047 template<
0048       typename F, int dummy_
0049     >
0050 struct bind0
0051 {
0052     template<
0053           typename U1 = na, typename U2 = na, typename U3 = na
0054         , typename U4 = na, typename U5 = na
0055         >
0056     struct apply
0057     {
0058      private:
0059         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
0060 
0061      public:
0062         typedef typename apply_wrap0<
0063               f_
0064             >::type type;
0065 
0066     };
0067 };
0068 
0069 namespace aux {
0070 
0071 template<
0072       typename F, typename U1, typename U2, typename U3, typename U4
0073     , typename U5
0074     >
0075 struct resolve_bind_arg<
0076       bind0<F>, U1, U2, U3, U4, U5
0077     >
0078 {
0079     typedef bind0<F> f_;
0080     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
0081 };
0082 
0083 } // namespace aux
0084 
0085 BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
0086 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
0087 
0088 template<
0089       typename F, int dummy_
0090     >
0091 struct bind< F,na,na,na,na,na >
0092     : bind0<F>
0093 {
0094 };
0095 
0096 template<
0097       typename F, typename T1, int dummy_
0098     >
0099 struct bind1
0100 {
0101     template<
0102           typename U1 = na, typename U2 = na, typename U3 = na
0103         , typename U4 = na, typename U5 = na
0104         >
0105     struct apply
0106     {
0107      private:
0108         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
0109         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
0110 
0111      public:
0112         typedef typename apply_wrap1<
0113               f_
0114             , typename t1::type
0115             >::type type;
0116 
0117     };
0118 };
0119 
0120 namespace aux {
0121 
0122 template<
0123       typename F, typename T1, typename U1, typename U2, typename U3
0124     , typename U4, typename U5
0125     >
0126 struct resolve_bind_arg<
0127       bind1< F,T1 >, U1, U2, U3, U4, U5
0128     >
0129 {
0130     typedef bind1< F,T1 > f_;
0131     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
0132 };
0133 
0134 } // namespace aux
0135 
0136 BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
0137 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
0138 
0139 template<
0140       typename F, typename T1, int dummy_
0141     >
0142 struct bind< F,T1,na,na,na,na >
0143     : bind1< F,T1 >
0144 {
0145 };
0146 
0147 template<
0148       typename F, typename T1, typename T2, int dummy_
0149     >
0150 struct bind2
0151 {
0152     template<
0153           typename U1 = na, typename U2 = na, typename U3 = na
0154         , typename U4 = na, typename U5 = na
0155         >
0156     struct apply
0157     {
0158      private:
0159         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
0160         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
0161         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
0162 
0163      public:
0164         typedef typename apply_wrap2<
0165               f_
0166             , typename t1::type, typename t2::type
0167             >::type type;
0168 
0169     };
0170 };
0171 
0172 namespace aux {
0173 
0174 template<
0175       typename F, typename T1, typename T2, typename U1, typename U2
0176     , typename U3, typename U4, typename U5
0177     >
0178 struct resolve_bind_arg<
0179       bind2< F,T1,T2 >, U1, U2, U3, U4, U5
0180     >
0181 {
0182     typedef bind2< F,T1,T2 > f_;
0183     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
0184 };
0185 
0186 } // namespace aux
0187 
0188 BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
0189 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
0190 
0191 template<
0192       typename F, typename T1, typename T2, int dummy_
0193     >
0194 struct bind< F,T1,T2,na,na,na >
0195     : bind2< F,T1,T2 >
0196 {
0197 };
0198 
0199 template<
0200       typename F, typename T1, typename T2, typename T3, int dummy_
0201     >
0202 struct bind3
0203 {
0204     template<
0205           typename U1 = na, typename U2 = na, typename U3 = na
0206         , typename U4 = na, typename U5 = na
0207         >
0208     struct apply
0209     {
0210      private:
0211         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
0212         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
0213         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
0214         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
0215 
0216      public:
0217         typedef typename apply_wrap3<
0218               f_
0219             , typename t1::type, typename t2::type, typename t3::type
0220             >::type type;
0221 
0222     };
0223 };
0224 
0225 namespace aux {
0226 
0227 template<
0228       typename F, typename T1, typename T2, typename T3, typename U1
0229     , typename U2, typename U3, typename U4, typename U5
0230     >
0231 struct resolve_bind_arg<
0232       bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
0233     >
0234 {
0235     typedef bind3< F,T1,T2,T3 > f_;
0236     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
0237 };
0238 
0239 } // namespace aux
0240 
0241 BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
0242 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
0243 
0244 template<
0245       typename F, typename T1, typename T2, typename T3, int dummy_
0246     >
0247 struct bind< F,T1,T2,T3,na,na >
0248     : bind3< F,T1,T2,T3 >
0249 {
0250 };
0251 
0252 template<
0253       typename F, typename T1, typename T2, typename T3, typename T4
0254     , int dummy_
0255     >
0256 struct bind4
0257 {
0258     template<
0259           typename U1 = na, typename U2 = na, typename U3 = na
0260         , typename U4 = na, typename U5 = na
0261         >
0262     struct apply
0263     {
0264      private:
0265         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
0266         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
0267         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
0268         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
0269         typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
0270 
0271      public:
0272         typedef typename apply_wrap4<
0273               f_
0274             , typename t1::type, typename t2::type, typename t3::type
0275             , typename t4::type
0276             >::type type;
0277 
0278     };
0279 };
0280 
0281 namespace aux {
0282 
0283 template<
0284       typename F, typename T1, typename T2, typename T3, typename T4
0285     , typename U1, typename U2, typename U3, typename U4, typename U5
0286     >
0287 struct resolve_bind_arg<
0288       bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
0289     >
0290 {
0291     typedef bind4< F,T1,T2,T3,T4 > f_;
0292     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
0293 };
0294 
0295 } // namespace aux
0296 
0297 BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
0298 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
0299 
0300 template<
0301       typename F, typename T1, typename T2, typename T3, typename T4
0302     , int dummy_
0303     >
0304 struct bind< F,T1,T2,T3,T4,na >
0305     : bind4< F,T1,T2,T3,T4 >
0306 {
0307 };
0308 
0309 template<
0310       typename F, typename T1, typename T2, typename T3, typename T4
0311     , typename T5, int dummy_
0312     >
0313 struct bind5
0314 {
0315     template<
0316           typename U1 = na, typename U2 = na, typename U3 = na
0317         , typename U4 = na, typename U5 = na
0318         >
0319     struct apply
0320     {
0321      private:
0322         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
0323         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
0324         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
0325         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
0326         typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
0327         typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
0328 
0329      public:
0330         typedef typename apply_wrap5<
0331               f_
0332             , typename t1::type, typename t2::type, typename t3::type
0333             , typename t4::type, typename t5::type
0334             >::type type;
0335 
0336     };
0337 };
0338 
0339 namespace aux {
0340 
0341 template<
0342       typename F, typename T1, typename T2, typename T3, typename T4
0343     , typename T5, typename U1, typename U2, typename U3, typename U4
0344     , typename U5
0345     >
0346 struct resolve_bind_arg<
0347       bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
0348     >
0349 {
0350     typedef bind5< F,T1,T2,T3,T4,T5 > f_;
0351     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
0352 };
0353 
0354 } // namespace aux
0355 
0356 BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
0357 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
0358 
0359 /// primary template (not a specialization!)
0360 
0361 template<
0362       typename F, typename T1, typename T2, typename T3, typename T4
0363     , typename T5, int dummy_
0364     >
0365 struct bind
0366     : bind5< F,T1,T2,T3,T4,T5 >
0367 {
0368 };
0369 
0370 /// if_/eval_if specializations
0371 template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
0372 struct quote3;
0373 
0374 template< typename T1, typename T2, typename T3 > struct if_;
0375 
0376 template<
0377       typename Tag, typename T1, typename T2, typename T3
0378     >
0379 struct bind3<
0380       quote3< if_,Tag >
0381     , T1, T2, T3
0382     >
0383 {
0384     template<
0385           typename U1 = na, typename U2 = na, typename U3 = na
0386         , typename U4 = na, typename U5 = na
0387         >
0388     struct apply
0389     {
0390      private:
0391         typedef mpl::arg<1> n1;
0392         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
0393         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
0394         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
0395         typedef typename if_<
0396               typename t1::type
0397             , t2, t3
0398             >::type f_;
0399 
0400      public:
0401         typedef typename f_::type type;
0402     };
0403 };
0404 
0405 }}
0406