Back to home page

EIC code displayed by LXR

 
 

    


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

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
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
0090     >
0091 struct bind< F,na,na,na,na,na >
0092     : bind0<F>
0093 {
0094 };
0095 
0096 template<
0097       typename F, typename T1
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
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
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
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
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
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     >
0255 struct bind4
0256 {
0257     template<
0258           typename U1 = na, typename U2 = na, typename U3 = na
0259         , typename U4 = na, typename U5 = na
0260         >
0261     struct apply
0262     {
0263      private:
0264         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
0265         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
0266         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
0267         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
0268         typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
0269 
0270      public:
0271         typedef typename apply_wrap4<
0272               f_
0273             , typename t1::type, typename t2::type, typename t3::type
0274             , typename t4::type
0275             >::type type;
0276 
0277     };
0278 };
0279 
0280 namespace aux {
0281 
0282 template<
0283       typename F, typename T1, typename T2, typename T3, typename T4
0284     , typename U1, typename U2, typename U3, typename U4, typename U5
0285     >
0286 struct resolve_bind_arg<
0287       bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
0288     >
0289 {
0290     typedef bind4< F,T1,T2,T3,T4 > 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(5, bind4)
0297 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
0298 
0299 template<
0300       typename F, typename T1, typename T2, typename T3, typename T4
0301     >
0302 struct bind< F,T1,T2,T3,T4,na >
0303     : bind4< F,T1,T2,T3,T4 >
0304 {
0305 };
0306 
0307 template<
0308       typename F, typename T1, typename T2, typename T3, typename T4
0309     , typename T5
0310     >
0311 struct bind5
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 typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
0321         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
0322         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
0323         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
0324         typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
0325         typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
0326 
0327      public:
0328         typedef typename apply_wrap5<
0329               f_
0330             , typename t1::type, typename t2::type, typename t3::type
0331             , typename t4::type, typename t5::type
0332             >::type type;
0333 
0334     };
0335 };
0336 
0337 namespace aux {
0338 
0339 template<
0340       typename F, typename T1, typename T2, typename T3, typename T4
0341     , typename T5, typename U1, typename U2, typename U3, typename U4
0342     , typename U5
0343     >
0344 struct resolve_bind_arg<
0345       bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
0346     >
0347 {
0348     typedef bind5< F,T1,T2,T3,T4,T5 > f_;
0349     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
0350 };
0351 
0352 } // namespace aux
0353 
0354 BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
0355 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
0356 
0357 /// primary template (not a specialization!)
0358 
0359 template<
0360       typename F, typename T1, typename T2, typename T3, typename T4
0361     , typename T5
0362     >
0363 struct bind
0364     : bind5< F,T1,T2,T3,T4,T5 >
0365 {
0366 };
0367 
0368 /// if_/eval_if specializations
0369 template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
0370 struct quote3;
0371 
0372 template< typename T1, typename T2, typename T3 > struct if_;
0373 
0374 template<
0375       typename Tag, typename T1, typename T2, typename T3
0376     >
0377 struct bind3<
0378       quote3< if_,Tag >
0379     , T1, T2, T3
0380     >
0381 {
0382     template<
0383           typename U1 = na, typename U2 = na, typename U3 = na
0384         , typename U4 = na, typename U5 = na
0385         >
0386     struct apply
0387     {
0388      private:
0389         typedef mpl::arg<1> n1;
0390         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
0391         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
0392         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
0393         typedef typename if_<
0394               typename t1::type
0395             , t2, t3
0396             >::type f_;
0397 
0398      public:
0399         typedef typename f_::type type;
0400     };
0401 };
0402 
0403 template<
0404       template< typename T1, typename T2, typename T3 > class F, typename Tag
0405     >
0406 struct quote3;
0407 
0408 template< typename T1, typename T2, typename T3 > struct eval_if;
0409 
0410 template<
0411       typename Tag, typename T1, typename T2, typename T3
0412     >
0413 struct bind3<
0414       quote3< eval_if,Tag >
0415     , T1, T2, T3
0416     >
0417 {
0418     template<
0419           typename U1 = na, typename U2 = na, typename U3 = na
0420         , typename U4 = na, typename U5 = na
0421         >
0422     struct apply
0423     {
0424      private:
0425         typedef mpl::arg<1> n1;
0426         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
0427         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
0428         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
0429         typedef typename eval_if<
0430               typename t1::type
0431             , t2, t3
0432             >::type f_;
0433 
0434      public:
0435         typedef typename f_::type type;
0436     };
0437 };
0438 
0439 }}
0440