1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/epoc32/include/stdapis/boost/mpl/aux_/full_lambda.hpp Wed Mar 31 12:27:01 2010 +0100
1.3 @@ -0,0 +1,554 @@
1.4 +
1.5 +// Copyright Aleksey Gurtovoy 2001-2004
1.6 +//
1.7 +// Distributed under the Boost Software License, Version 1.0.
1.8 +// (See accompanying file LICENSE_1_0.txt or copy at
1.9 +// http://www.boost.org/LICENSE_1_0.txt)
1.10 +//
1.11 +
1.12 +// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
1.13 +// -- DO NOT modify by hand!
1.14 +
1.15 +namespace boost { namespace mpl {
1.16 +
1.17 +namespace aux {
1.18 +
1.19 +template<
1.20 + bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
1.21 + , bool C5 = false
1.22 + >
1.23 +struct lambda_or
1.24 + : true_
1.25 +{
1.26 +};
1.27 +
1.28 +template<>
1.29 +struct lambda_or< false,false,false,false,false >
1.30 + : false_
1.31 +{
1.32 +};
1.33 +
1.34 +} // namespace aux
1.35 +
1.36 +template<
1.37 + typename T
1.38 + , typename Tag
1.39 +
1.40 + >
1.41 +struct lambda
1.42 +{
1.43 + typedef false_ is_le;
1.44 + typedef T result_;
1.45 + typedef T type;
1.46 +};
1.47 +
1.48 +template<
1.49 + typename T
1.50 + >
1.51 +struct is_lambda_expression
1.52 + : lambda<T>::is_le
1.53 +{
1.54 +};
1.55 +
1.56 +template< int N, typename Tag >
1.57 +struct lambda< arg<N>, Tag >
1.58 +{
1.59 + typedef true_ is_le;
1.60 + typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
1.61 + typedef mpl::protect<result_> type;
1.62 +};
1.63 +
1.64 +template<
1.65 + typename F
1.66 + , typename Tag
1.67 + >
1.68 +struct lambda<
1.69 + bind0<F>
1.70 + , Tag
1.71 +
1.72 + >
1.73 +{
1.74 + typedef false_ is_le;
1.75 + typedef bind0<
1.76 + F
1.77 + > result_;
1.78 +
1.79 + typedef result_ type;
1.80 +};
1.81 +
1.82 +namespace aux {
1.83 +
1.84 +template<
1.85 + typename IsLE, typename Tag
1.86 + , template< typename P1 > class F
1.87 + , typename L1
1.88 + >
1.89 +struct le_result1
1.90 +{
1.91 + typedef F<
1.92 + typename L1::type
1.93 + > result_;
1.94 +
1.95 + typedef result_ type;
1.96 +};
1.97 +
1.98 +template<
1.99 + typename Tag
1.100 + , template< typename P1 > class F
1.101 + , typename L1
1.102 + >
1.103 +struct le_result1< true_,Tag,F,L1 >
1.104 +{
1.105 + typedef bind1<
1.106 + quote1< F,Tag >
1.107 + , typename L1::result_
1.108 + > result_;
1.109 +
1.110 + typedef mpl::protect<result_> type;
1.111 +};
1.112 +
1.113 +} // namespace aux
1.114 +
1.115 +template<
1.116 + template< typename P1 > class F
1.117 + , typename T1
1.118 + , typename Tag
1.119 + >
1.120 +struct lambda<
1.121 + F<T1>
1.122 + , Tag
1.123 +
1.124 + >
1.125 +{
1.126 + typedef lambda< T1,Tag > l1;
1.127 + typedef typename l1::is_le is_le1;
1.128 + typedef typename aux::lambda_or<
1.129 + is_le1::value
1.130 + >::type is_le;
1.131 +
1.132 + typedef aux::le_result1<
1.133 + is_le, Tag, F, l1
1.134 + > le_result_;
1.135 +
1.136 + typedef typename le_result_::result_ result_;
1.137 + typedef typename le_result_::type type;
1.138 +};
1.139 +
1.140 +template<
1.141 + typename F, typename T1
1.142 + , typename Tag
1.143 + >
1.144 +struct lambda<
1.145 + bind1< F,T1 >
1.146 + , Tag
1.147 +
1.148 + >
1.149 +{
1.150 + typedef false_ is_le;
1.151 + typedef bind1<
1.152 + F
1.153 + , T1
1.154 + > result_;
1.155 +
1.156 + typedef result_ type;
1.157 +};
1.158 +
1.159 +namespace aux {
1.160 +
1.161 +template<
1.162 + typename IsLE, typename Tag
1.163 + , template< typename P1, typename P2 > class F
1.164 + , typename L1, typename L2
1.165 + >
1.166 +struct le_result2
1.167 +{
1.168 + typedef F<
1.169 + typename L1::type, typename L2::type
1.170 + > result_;
1.171 +
1.172 + typedef result_ type;
1.173 +};
1.174 +
1.175 +template<
1.176 + typename Tag
1.177 + , template< typename P1, typename P2 > class F
1.178 + , typename L1, typename L2
1.179 + >
1.180 +struct le_result2< true_,Tag,F,L1,L2 >
1.181 +{
1.182 + typedef bind2<
1.183 + quote2< F,Tag >
1.184 + , typename L1::result_, typename L2::result_
1.185 + > result_;
1.186 +
1.187 + typedef mpl::protect<result_> type;
1.188 +};
1.189 +
1.190 +} // namespace aux
1.191 +
1.192 +template<
1.193 + template< typename P1, typename P2 > class F
1.194 + , typename T1, typename T2
1.195 + , typename Tag
1.196 + >
1.197 +struct lambda<
1.198 + F< T1,T2 >
1.199 + , Tag
1.200 +
1.201 + >
1.202 +{
1.203 + typedef lambda< T1,Tag > l1;
1.204 + typedef lambda< T2,Tag > l2;
1.205 +
1.206 + typedef typename l1::is_le is_le1;
1.207 + typedef typename l2::is_le is_le2;
1.208 +
1.209 +
1.210 + typedef typename aux::lambda_or<
1.211 + is_le1::value, is_le2::value
1.212 + >::type is_le;
1.213 +
1.214 + typedef aux::le_result2<
1.215 + is_le, Tag, F, l1, l2
1.216 + > le_result_;
1.217 +
1.218 + typedef typename le_result_::result_ result_;
1.219 + typedef typename le_result_::type type;
1.220 +};
1.221 +
1.222 +template<
1.223 + typename F, typename T1, typename T2
1.224 + , typename Tag
1.225 + >
1.226 +struct lambda<
1.227 + bind2< F,T1,T2 >
1.228 + , Tag
1.229 +
1.230 + >
1.231 +{
1.232 + typedef false_ is_le;
1.233 + typedef bind2<
1.234 + F
1.235 + , T1, T2
1.236 + > result_;
1.237 +
1.238 + typedef result_ type;
1.239 +};
1.240 +
1.241 +namespace aux {
1.242 +
1.243 +template<
1.244 + typename IsLE, typename Tag
1.245 + , template< typename P1, typename P2, typename P3 > class F
1.246 + , typename L1, typename L2, typename L3
1.247 + >
1.248 +struct le_result3
1.249 +{
1.250 + typedef F<
1.251 + typename L1::type, typename L2::type, typename L3::type
1.252 + > result_;
1.253 +
1.254 + typedef result_ type;
1.255 +};
1.256 +
1.257 +template<
1.258 + typename Tag
1.259 + , template< typename P1, typename P2, typename P3 > class F
1.260 + , typename L1, typename L2, typename L3
1.261 + >
1.262 +struct le_result3< true_,Tag,F,L1,L2,L3 >
1.263 +{
1.264 + typedef bind3<
1.265 + quote3< F,Tag >
1.266 + , typename L1::result_, typename L2::result_, typename L3::result_
1.267 + > result_;
1.268 +
1.269 + typedef mpl::protect<result_> type;
1.270 +};
1.271 +
1.272 +} // namespace aux
1.273 +
1.274 +template<
1.275 + template< typename P1, typename P2, typename P3 > class F
1.276 + , typename T1, typename T2, typename T3
1.277 + , typename Tag
1.278 + >
1.279 +struct lambda<
1.280 + F< T1,T2,T3 >
1.281 + , Tag
1.282 +
1.283 + >
1.284 +{
1.285 + typedef lambda< T1,Tag > l1;
1.286 + typedef lambda< T2,Tag > l2;
1.287 + typedef lambda< T3,Tag > l3;
1.288 +
1.289 + typedef typename l1::is_le is_le1;
1.290 + typedef typename l2::is_le is_le2;
1.291 + typedef typename l3::is_le is_le3;
1.292 +
1.293 +
1.294 + typedef typename aux::lambda_or<
1.295 + is_le1::value, is_le2::value, is_le3::value
1.296 + >::type is_le;
1.297 +
1.298 + typedef aux::le_result3<
1.299 + is_le, Tag, F, l1, l2, l3
1.300 + > le_result_;
1.301 +
1.302 + typedef typename le_result_::result_ result_;
1.303 + typedef typename le_result_::type type;
1.304 +};
1.305 +
1.306 +template<
1.307 + typename F, typename T1, typename T2, typename T3
1.308 + , typename Tag
1.309 + >
1.310 +struct lambda<
1.311 + bind3< F,T1,T2,T3 >
1.312 + , Tag
1.313 +
1.314 + >
1.315 +{
1.316 + typedef false_ is_le;
1.317 + typedef bind3<
1.318 + F
1.319 + , T1, T2, T3
1.320 + > result_;
1.321 +
1.322 + typedef result_ type;
1.323 +};
1.324 +
1.325 +namespace aux {
1.326 +
1.327 +template<
1.328 + typename IsLE, typename Tag
1.329 + , template< typename P1, typename P2, typename P3, typename P4 > class F
1.330 + , typename L1, typename L2, typename L3, typename L4
1.331 + >
1.332 +struct le_result4
1.333 +{
1.334 + typedef F<
1.335 + typename L1::type, typename L2::type, typename L3::type
1.336 + , typename L4::type
1.337 + > result_;
1.338 +
1.339 + typedef result_ type;
1.340 +};
1.341 +
1.342 +template<
1.343 + typename Tag
1.344 + , template< typename P1, typename P2, typename P3, typename P4 > class F
1.345 + , typename L1, typename L2, typename L3, typename L4
1.346 + >
1.347 +struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
1.348 +{
1.349 + typedef bind4<
1.350 + quote4< F,Tag >
1.351 + , typename L1::result_, typename L2::result_, typename L3::result_
1.352 + , typename L4::result_
1.353 + > result_;
1.354 +
1.355 + typedef mpl::protect<result_> type;
1.356 +};
1.357 +
1.358 +} // namespace aux
1.359 +
1.360 +template<
1.361 + template< typename P1, typename P2, typename P3, typename P4 > class F
1.362 + , typename T1, typename T2, typename T3, typename T4
1.363 + , typename Tag
1.364 + >
1.365 +struct lambda<
1.366 + F< T1,T2,T3,T4 >
1.367 + , Tag
1.368 +
1.369 + >
1.370 +{
1.371 + typedef lambda< T1,Tag > l1;
1.372 + typedef lambda< T2,Tag > l2;
1.373 + typedef lambda< T3,Tag > l3;
1.374 + typedef lambda< T4,Tag > l4;
1.375 +
1.376 + typedef typename l1::is_le is_le1;
1.377 + typedef typename l2::is_le is_le2;
1.378 + typedef typename l3::is_le is_le3;
1.379 + typedef typename l4::is_le is_le4;
1.380 +
1.381 +
1.382 + typedef typename aux::lambda_or<
1.383 + is_le1::value, is_le2::value, is_le3::value, is_le4::value
1.384 + >::type is_le;
1.385 +
1.386 + typedef aux::le_result4<
1.387 + is_le, Tag, F, l1, l2, l3, l4
1.388 + > le_result_;
1.389 +
1.390 + typedef typename le_result_::result_ result_;
1.391 + typedef typename le_result_::type type;
1.392 +};
1.393 +
1.394 +template<
1.395 + typename F, typename T1, typename T2, typename T3, typename T4
1.396 + , typename Tag
1.397 + >
1.398 +struct lambda<
1.399 + bind4< F,T1,T2,T3,T4 >
1.400 + , Tag
1.401 +
1.402 + >
1.403 +{
1.404 + typedef false_ is_le;
1.405 + typedef bind4<
1.406 + F
1.407 + , T1, T2, T3, T4
1.408 + > result_;
1.409 +
1.410 + typedef result_ type;
1.411 +};
1.412 +
1.413 +namespace aux {
1.414 +
1.415 +template<
1.416 + typename IsLE, typename Tag
1.417 + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
1.418 + , typename L1, typename L2, typename L3, typename L4, typename L5
1.419 + >
1.420 +struct le_result5
1.421 +{
1.422 + typedef F<
1.423 + typename L1::type, typename L2::type, typename L3::type
1.424 + , typename L4::type, typename L5::type
1.425 + > result_;
1.426 +
1.427 + typedef result_ type;
1.428 +};
1.429 +
1.430 +template<
1.431 + typename Tag
1.432 + , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
1.433 + , typename L1, typename L2, typename L3, typename L4, typename L5
1.434 + >
1.435 +struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
1.436 +{
1.437 + typedef bind5<
1.438 + quote5< F,Tag >
1.439 + , typename L1::result_, typename L2::result_, typename L3::result_
1.440 + , typename L4::result_, typename L5::result_
1.441 + > result_;
1.442 +
1.443 + typedef mpl::protect<result_> type;
1.444 +};
1.445 +
1.446 +} // namespace aux
1.447 +
1.448 +template<
1.449 + template<
1.450 + typename P1, typename P2, typename P3, typename P4
1.451 + , typename P5
1.452 + >
1.453 + class F
1.454 + , typename T1, typename T2, typename T3, typename T4, typename T5
1.455 + , typename Tag
1.456 + >
1.457 +struct lambda<
1.458 + F< T1,T2,T3,T4,T5 >
1.459 + , Tag
1.460 +
1.461 + >
1.462 +{
1.463 + typedef lambda< T1,Tag > l1;
1.464 + typedef lambda< T2,Tag > l2;
1.465 + typedef lambda< T3,Tag > l3;
1.466 + typedef lambda< T4,Tag > l4;
1.467 + typedef lambda< T5,Tag > l5;
1.468 +
1.469 + typedef typename l1::is_le is_le1;
1.470 + typedef typename l2::is_le is_le2;
1.471 + typedef typename l3::is_le is_le3;
1.472 + typedef typename l4::is_le is_le4;
1.473 + typedef typename l5::is_le is_le5;
1.474 +
1.475 +
1.476 + typedef typename aux::lambda_or<
1.477 + is_le1::value, is_le2::value, is_le3::value, is_le4::value
1.478 + , is_le5::value
1.479 + >::type is_le;
1.480 +
1.481 + typedef aux::le_result5<
1.482 + is_le, Tag, F, l1, l2, l3, l4, l5
1.483 + > le_result_;
1.484 +
1.485 + typedef typename le_result_::result_ result_;
1.486 + typedef typename le_result_::type type;
1.487 +};
1.488 +
1.489 +template<
1.490 + typename F, typename T1, typename T2, typename T3, typename T4
1.491 + , typename T5
1.492 + , typename Tag
1.493 + >
1.494 +struct lambda<
1.495 + bind5< F,T1,T2,T3,T4,T5 >
1.496 + , Tag
1.497 +
1.498 + >
1.499 +{
1.500 + typedef false_ is_le;
1.501 + typedef bind5<
1.502 + F
1.503 + , T1, T2, T3, T4, T5
1.504 + > result_;
1.505 +
1.506 + typedef result_ type;
1.507 +};
1.508 +
1.509 +/// special case for 'protect'
1.510 +template< typename T, typename Tag >
1.511 +struct lambda< mpl::protect<T>, Tag >
1.512 +{
1.513 + typedef false_ is_le;
1.514 + typedef mpl::protect<T> result_;
1.515 + typedef result_ type;
1.516 +};
1.517 +
1.518 +/// specializations for the main 'bind' form
1.519 +
1.520 +template<
1.521 + typename F, typename T1, typename T2, typename T3, typename T4
1.522 + , typename T5
1.523 + , typename Tag
1.524 + >
1.525 +struct lambda<
1.526 + bind< F,T1,T2,T3,T4,T5 >
1.527 + , Tag
1.528 +
1.529 + >
1.530 +{
1.531 + typedef false_ is_le;
1.532 + typedef bind< F,T1,T2,T3,T4,T5 > result_;
1.533 + typedef result_ type;
1.534 +};
1.535 +
1.536 +/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars
1.537 +
1.538 +template<
1.539 + typename F, typename Tag1, typename Tag2
1.540 + >
1.541 +struct lambda<
1.542 + lambda< F,Tag1 >
1.543 + , Tag2
1.544 + >
1.545 +{
1.546 + typedef lambda< F,Tag2 > l1;
1.547 + typedef lambda< Tag1,Tag2 > l2;
1.548 + typedef typename l1::is_le is_le;
1.549 + typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;
1.550 + typedef typename le_result_::result_ result_;
1.551 + typedef typename le_result_::type type;
1.552 +};
1.553 +
1.554 +BOOST_MPL_AUX_NA_SPEC(2, lambda)
1.555 +
1.556 +}}
1.557 +