File indexing completed on 2025-01-18 09:41:10
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 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 }
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 }
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 }
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 }
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 }
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 }
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 }
0355
0356 BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
0357 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
0358
0359
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
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