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