File indexing completed on 2025-01-18 09:41:20
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 namespace boost { namespace mpl {
0014
0015 namespace aux {
0016 template< bool >
0017 struct resolve_arg_impl
0018 {
0019 template<
0020 typename T, typename U1, typename U2, typename U3
0021 , typename U4, typename U5
0022 >
0023 struct result_
0024 {
0025 typedef T type;
0026 };
0027 };
0028
0029 template<>
0030 struct resolve_arg_impl<true>
0031 {
0032 template<
0033 typename T, typename U1, typename U2, typename U3
0034 , typename U4, typename U5
0035 >
0036 struct result_
0037 {
0038 typedef typename apply_wrap5<
0039 T
0040 , U1, U2, U3, U4, U5
0041 >::type type;
0042 };
0043 };
0044
0045 template< typename T > struct is_bind_template;
0046
0047 template<
0048 typename T, typename U1, typename U2, typename U3, typename U4
0049 , typename U5
0050 >
0051 struct resolve_bind_arg
0052 : resolve_arg_impl< is_bind_template<T>::value >
0053 ::template result_< T,U1,U2,U3,U4,U5 >
0054 {
0055 };
0056
0057 template< typename T >
0058 struct replace_unnamed_arg_impl
0059 {
0060 template< typename Arg > struct result_
0061 {
0062 typedef Arg next;
0063 typedef T type;
0064 };
0065 };
0066
0067 template<>
0068 struct replace_unnamed_arg_impl< arg< -1 > >
0069 {
0070 template< typename Arg > struct result_
0071 {
0072 typedef typename next<Arg>::type next;
0073 typedef Arg type;
0074 };
0075 };
0076
0077 template< typename T, typename Arg >
0078 struct replace_unnamed_arg
0079 : replace_unnamed_arg_impl<T>::template result_<Arg>
0080 {
0081 };
0082
0083 template< int arity_ > struct bind_chooser;
0084
0085 aux::no_tag is_bind_helper(...);
0086 template< typename T > aux::no_tag is_bind_helper(protect<T>*);
0087
0088 template< int N >
0089 aux::yes_tag is_bind_helper(arg<N>*);
0090
0091 template< bool is_ref_ = true >
0092 struct is_bind_template_impl
0093 {
0094 template< typename T > struct result_
0095 {
0096 BOOST_STATIC_CONSTANT(bool, value = false);
0097 };
0098 };
0099
0100 template<>
0101 struct is_bind_template_impl<false>
0102 {
0103 template< typename T > struct result_
0104 {
0105 BOOST_STATIC_CONSTANT(bool, value =
0106 sizeof(aux::is_bind_helper(static_cast<T*>(0)))
0107 == sizeof(aux::yes_tag)
0108 );
0109 };
0110 };
0111
0112 template< typename T > struct is_bind_template
0113 : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >
0114 ::template result_<T>
0115 {
0116 };
0117
0118 }
0119
0120 template<
0121 typename F
0122 >
0123 struct bind0
0124 {
0125 template<
0126 typename U1 = na, typename U2 = na, typename U3 = na
0127 , typename U4 = na, typename U5 = na
0128 >
0129 struct apply
0130 {
0131 private:
0132 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
0133 typedef typename r0::type a0;
0134 typedef typename r0::next n1;
0135 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
0136
0137 public:
0138 typedef typename apply_wrap0<
0139 f_
0140 >::type type;
0141
0142 };
0143 };
0144
0145 namespace aux {
0146
0147 template<
0148 typename F
0149 >
0150 aux::yes_tag
0151 is_bind_helper(bind0<F>*);
0152
0153 }
0154
0155 BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
0156 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
0157
0158 template<
0159 typename F, typename T1
0160 >
0161 struct bind1
0162 {
0163 template<
0164 typename U1 = na, typename U2 = na, typename U3 = na
0165 , typename U4 = na, typename U5 = na
0166 >
0167 struct apply
0168 {
0169 private:
0170 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
0171 typedef typename r0::type a0;
0172 typedef typename r0::next n1;
0173 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
0174
0175 typedef aux::replace_unnamed_arg< T1,n1 > r1;
0176 typedef typename r1::type a1;
0177 typedef typename r1::next n2;
0178 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
0179
0180 public:
0181 typedef typename apply_wrap1<
0182 f_
0183 , typename t1::type
0184 >::type type;
0185
0186 };
0187 };
0188
0189 namespace aux {
0190
0191 template<
0192 typename F, typename T1
0193 >
0194 aux::yes_tag
0195 is_bind_helper(bind1< F,T1 >*);
0196
0197 }
0198
0199 BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
0200 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
0201
0202 template<
0203 typename F, typename T1, typename T2
0204 >
0205 struct bind2
0206 {
0207 template<
0208 typename U1 = na, typename U2 = na, typename U3 = na
0209 , typename U4 = na, typename U5 = na
0210 >
0211 struct apply
0212 {
0213 private:
0214 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
0215 typedef typename r0::type a0;
0216 typedef typename r0::next n1;
0217 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
0218
0219 typedef aux::replace_unnamed_arg< T1,n1 > r1;
0220 typedef typename r1::type a1;
0221 typedef typename r1::next n2;
0222 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
0223
0224 typedef aux::replace_unnamed_arg< T2,n2 > r2;
0225 typedef typename r2::type a2;
0226 typedef typename r2::next n3;
0227 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
0228
0229 public:
0230 typedef typename apply_wrap2<
0231 f_
0232 , typename t1::type, typename t2::type
0233 >::type type;
0234
0235 };
0236 };
0237
0238 namespace aux {
0239
0240 template<
0241 typename F, typename T1, typename T2
0242 >
0243 aux::yes_tag
0244 is_bind_helper(bind2< F,T1,T2 >*);
0245
0246 }
0247
0248 BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
0249 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
0250
0251 template<
0252 typename F, typename T1, typename T2, typename T3
0253 >
0254 struct bind3
0255 {
0256 template<
0257 typename U1 = na, typename U2 = na, typename U3 = na
0258 , typename U4 = na, typename U5 = na
0259 >
0260 struct apply
0261 {
0262 private:
0263 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
0264 typedef typename r0::type a0;
0265 typedef typename r0::next n1;
0266 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
0267
0268 typedef aux::replace_unnamed_arg< T1,n1 > r1;
0269 typedef typename r1::type a1;
0270 typedef typename r1::next n2;
0271 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
0272
0273 typedef aux::replace_unnamed_arg< T2,n2 > r2;
0274 typedef typename r2::type a2;
0275 typedef typename r2::next n3;
0276 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
0277
0278 typedef aux::replace_unnamed_arg< T3,n3 > r3;
0279 typedef typename r3::type a3;
0280 typedef typename r3::next n4;
0281 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
0282
0283 public:
0284 typedef typename apply_wrap3<
0285 f_
0286 , typename t1::type, typename t2::type, typename t3::type
0287 >::type type;
0288
0289 };
0290 };
0291
0292 namespace aux {
0293
0294 template<
0295 typename F, typename T1, typename T2, typename T3
0296 >
0297 aux::yes_tag
0298 is_bind_helper(bind3< F,T1,T2,T3 >*);
0299
0300 }
0301
0302 BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
0303 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
0304
0305 template<
0306 typename F, typename T1, typename T2, typename T3, typename T4
0307 >
0308 struct bind4
0309 {
0310 template<
0311 typename U1 = na, typename U2 = na, typename U3 = na
0312 , typename U4 = na, typename U5 = na
0313 >
0314 struct apply
0315 {
0316 private:
0317 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
0318 typedef typename r0::type a0;
0319 typedef typename r0::next n1;
0320 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
0321
0322 typedef aux::replace_unnamed_arg< T1,n1 > r1;
0323 typedef typename r1::type a1;
0324 typedef typename r1::next n2;
0325 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
0326
0327 typedef aux::replace_unnamed_arg< T2,n2 > r2;
0328 typedef typename r2::type a2;
0329 typedef typename r2::next n3;
0330 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
0331
0332 typedef aux::replace_unnamed_arg< T3,n3 > r3;
0333 typedef typename r3::type a3;
0334 typedef typename r3::next n4;
0335 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
0336
0337 typedef aux::replace_unnamed_arg< T4,n4 > r4;
0338 typedef typename r4::type a4;
0339 typedef typename r4::next n5;
0340 typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
0341
0342 public:
0343 typedef typename apply_wrap4<
0344 f_
0345 , typename t1::type, typename t2::type, typename t3::type
0346 , typename t4::type
0347 >::type type;
0348
0349 };
0350 };
0351
0352 namespace aux {
0353
0354 template<
0355 typename F, typename T1, typename T2, typename T3, typename T4
0356 >
0357 aux::yes_tag
0358 is_bind_helper(bind4< F,T1,T2,T3,T4 >*);
0359
0360 }
0361
0362 BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
0363 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
0364
0365 template<
0366 typename F, typename T1, typename T2, typename T3, typename T4
0367 , typename T5
0368 >
0369 struct bind5
0370 {
0371 template<
0372 typename U1 = na, typename U2 = na, typename U3 = na
0373 , typename U4 = na, typename U5 = na
0374 >
0375 struct apply
0376 {
0377 private:
0378 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
0379 typedef typename r0::type a0;
0380 typedef typename r0::next n1;
0381 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
0382
0383 typedef aux::replace_unnamed_arg< T1,n1 > r1;
0384 typedef typename r1::type a1;
0385 typedef typename r1::next n2;
0386 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
0387
0388 typedef aux::replace_unnamed_arg< T2,n2 > r2;
0389 typedef typename r2::type a2;
0390 typedef typename r2::next n3;
0391 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
0392
0393 typedef aux::replace_unnamed_arg< T3,n3 > r3;
0394 typedef typename r3::type a3;
0395 typedef typename r3::next n4;
0396 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
0397
0398 typedef aux::replace_unnamed_arg< T4,n4 > r4;
0399 typedef typename r4::type a4;
0400 typedef typename r4::next n5;
0401 typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
0402
0403 typedef aux::replace_unnamed_arg< T5,n5 > r5;
0404 typedef typename r5::type a5;
0405 typedef typename r5::next n6;
0406 typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
0407
0408 public:
0409 typedef typename apply_wrap5<
0410 f_
0411 , typename t1::type, typename t2::type, typename t3::type
0412 , typename t4::type, typename t5::type
0413 >::type type;
0414
0415 };
0416 };
0417
0418 namespace aux {
0419
0420 template<
0421 typename F, typename T1, typename T2, typename T3, typename T4
0422 , typename T5
0423 >
0424 aux::yes_tag
0425 is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);
0426
0427 }
0428
0429 BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
0430 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
0431 }}
0432