annotate DEPENDENCIES/generic/include/boost/mpl/aux_/full_lambda.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1
Chris@16 2 #if !defined(BOOST_PP_IS_ITERATING)
Chris@16 3
Chris@16 4 ///// header body
Chris@16 5
Chris@16 6 #ifndef BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED
Chris@16 7 #define BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED
Chris@16 8
Chris@16 9 // Copyright Aleksey Gurtovoy 2001-2004
Chris@16 10 //
Chris@16 11 // Distributed under the Boost Software License, Version 1.0.
Chris@16 12 // (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 13 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 14 //
Chris@16 15 // See http://www.boost.org/libs/mpl for documentation.
Chris@16 16
Chris@101 17 // $Id$
Chris@101 18 // $Date$
Chris@101 19 // $Revision$
Chris@16 20
Chris@16 21 #if !defined(BOOST_MPL_PREPROCESSING_MODE)
Chris@16 22 # include <boost/mpl/lambda_fwd.hpp>
Chris@16 23 # include <boost/mpl/bind_fwd.hpp>
Chris@16 24 # include <boost/mpl/protect.hpp>
Chris@16 25 # include <boost/mpl/quote.hpp>
Chris@16 26 # include <boost/mpl/arg.hpp>
Chris@16 27 # include <boost/mpl/bool.hpp>
Chris@16 28 # include <boost/mpl/int_fwd.hpp>
Chris@16 29 # include <boost/mpl/aux_/template_arity.hpp>
Chris@16 30 # include <boost/mpl/aux_/na_spec.hpp>
Chris@16 31 # include <boost/mpl/aux_/config/ttp.hpp>
Chris@16 32 # if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)
Chris@16 33 # include <boost/mpl/if.hpp>
Chris@16 34 # endif
Chris@16 35 #endif
Chris@16 36
Chris@16 37 #include <boost/mpl/aux_/lambda_arity_param.hpp>
Chris@16 38 #include <boost/mpl/aux_/config/use_preprocessed.hpp>
Chris@16 39
Chris@16 40 #if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
Chris@16 41 && !defined(BOOST_MPL_PREPROCESSING_MODE)
Chris@16 42
Chris@16 43 # define BOOST_MPL_PREPROCESSED_HEADER full_lambda.hpp
Chris@16 44 # include <boost/mpl/aux_/include_preprocessed.hpp>
Chris@16 45
Chris@16 46 #else
Chris@16 47
Chris@16 48 # include <boost/mpl/limits/arity.hpp>
Chris@16 49 # include <boost/mpl/aux_/preprocessor/default_params.hpp>
Chris@16 50 # include <boost/mpl/aux_/preprocessor/params.hpp>
Chris@16 51 # include <boost/mpl/aux_/preprocessor/enum.hpp>
Chris@16 52 # include <boost/mpl/aux_/preprocessor/repeat.hpp>
Chris@16 53 # include <boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp>
Chris@16 54
Chris@16 55 # include <boost/preprocessor/iterate.hpp>
Chris@16 56 # include <boost/preprocessor/comma_if.hpp>
Chris@16 57 # include <boost/preprocessor/inc.hpp>
Chris@16 58 # include <boost/preprocessor/cat.hpp>
Chris@16 59
Chris@16 60 namespace boost { namespace mpl {
Chris@16 61
Chris@16 62 // local macros, #undef-ined at the end of the header
Chris@16 63 # define AUX778076_LAMBDA_PARAMS(i_, param) \
Chris@16 64 BOOST_MPL_PP_PARAMS(i_, param) \
Chris@16 65 /**/
Chris@16 66
Chris@16 67 # define AUX778076_BIND_PARAMS(param) \
Chris@16 68 BOOST_MPL_PP_PARAMS( \
Chris@16 69 BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
Chris@16 70 , param \
Chris@16 71 ) \
Chris@16 72 /**/
Chris@16 73
Chris@16 74 # define AUX778076_BIND_N_PARAMS(i_, param) \
Chris@16 75 BOOST_PP_COMMA_IF(i_) \
Chris@16 76 BOOST_MPL_PP_PARAMS(i_, param) \
Chris@16 77 /**/
Chris@16 78
Chris@16 79 # define AUX778076_ARITY_PARAM(param) \
Chris@16 80 BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(param) \
Chris@16 81 /**/
Chris@16 82
Chris@16 83
Chris@16 84 #define n_ BOOST_MPL_LIMIT_METAFUNCTION_ARITY
Chris@16 85 namespace aux {
Chris@16 86
Chris@16 87 template<
Chris@16 88 BOOST_MPL_PP_DEFAULT_PARAMS(n_,bool C,false)
Chris@16 89 >
Chris@16 90 struct lambda_or
Chris@16 91 : true_
Chris@16 92 {
Chris@16 93 };
Chris@16 94
Chris@16 95 template<>
Chris@16 96 struct lambda_or< BOOST_MPL_PP_ENUM(n_,false) >
Chris@16 97 : false_
Chris@16 98 {
Chris@16 99 };
Chris@16 100
Chris@16 101 } // namespace aux
Chris@16 102 #undef n_
Chris@16 103
Chris@16 104 template<
Chris@16 105 typename T
Chris@16 106 , typename Tag
Chris@16 107 AUX778076_ARITY_PARAM(typename Arity)
Chris@16 108 >
Chris@16 109 struct lambda
Chris@16 110 {
Chris@16 111 typedef false_ is_le;
Chris@16 112 typedef T result_;
Chris@16 113 typedef T type;
Chris@16 114 };
Chris@16 115
Chris@16 116 template<
Chris@16 117 typename T
Chris@16 118 >
Chris@16 119 struct is_lambda_expression
Chris@16 120 : lambda<T>::is_le
Chris@16 121 {
Chris@16 122 };
Chris@16 123
Chris@16 124
Chris@16 125 template< int N, typename Tag >
Chris@16 126 struct lambda< arg<N>,Tag AUX778076_ARITY_PARAM(int_<-1>) >
Chris@16 127 {
Chris@16 128 typedef true_ is_le;
Chris@16 129 typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
Chris@16 130 typedef mpl::protect<result_> type;
Chris@16 131 };
Chris@16 132
Chris@16 133
Chris@16 134 #define BOOST_PP_ITERATION_PARAMS_1 \
Chris@16 135 (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/aux_/full_lambda.hpp>))
Chris@16 136 #include BOOST_PP_ITERATE()
Chris@16 137
Chris@16 138 /// special case for 'protect'
Chris@16 139 template< typename T, typename Tag >
Chris@16 140 struct lambda< mpl::protect<T>,Tag AUX778076_ARITY_PARAM(int_<1>) >
Chris@16 141 {
Chris@16 142 typedef false_ is_le;
Chris@16 143 typedef mpl::protect<T> result_;
Chris@16 144 typedef result_ type;
Chris@16 145 };
Chris@16 146
Chris@16 147 /// specializations for the main 'bind' form
Chris@16 148 template<
Chris@16 149 typename F, AUX778076_BIND_PARAMS(typename T)
Chris@16 150 , typename Tag
Chris@16 151 >
Chris@16 152 struct lambda<
Chris@16 153 bind<F,AUX778076_BIND_PARAMS(T)>
Chris@16 154 , Tag
Chris@16 155 AUX778076_ARITY_PARAM(int_<BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)>)
Chris@16 156 >
Chris@16 157 {
Chris@16 158 typedef false_ is_le;
Chris@16 159 typedef bind<F, AUX778076_BIND_PARAMS(T)> result_;
Chris@16 160 typedef result_ type;
Chris@16 161 };
Chris@16 162
Chris@16 163
Chris@16 164 #if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)
Chris@16 165
Chris@16 166 template<
Chris@16 167 typename F
Chris@16 168 , typename Tag1
Chris@16 169 , typename Tag2
Chris@16 170 , typename Arity
Chris@16 171 >
Chris@16 172 struct lambda<
Chris@16 173 lambda<F,Tag1,Arity>
Chris@16 174 , Tag2
Chris@16 175 , int_<3>
Chris@16 176 >
Chris@16 177 {
Chris@16 178 typedef lambda< F,Tag2 > l1;
Chris@16 179 typedef lambda< Tag1,Tag2 > l2;
Chris@16 180
Chris@16 181 typedef typename l1::is_le is_le;
Chris@16 182 typedef bind1< quote1<aux::template_arity>, typename l1::result_ > arity_;
Chris@16 183 typedef lambda< typename if_<is_le,arity_,Arity>::type,Tag2 > l3;
Chris@16 184
Chris@16 185 typedef aux::le_result3<is_le, Tag2, mpl::lambda, l1, l2, l3> le_result_;
Chris@16 186 typedef typename le_result_::result_ result_;
Chris@16 187 typedef typename le_result_::type type;
Chris@16 188 };
Chris@16 189
Chris@16 190 #elif !defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)
Chris@16 191
Chris@16 192 /// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars
Chris@16 193 template<
Chris@16 194 typename F, typename Tag1, typename Tag2
Chris@16 195 >
Chris@16 196 struct lambda<
Chris@16 197 lambda< F,Tag1 >
Chris@16 198 , Tag2
Chris@16 199 >
Chris@16 200 {
Chris@16 201 typedef lambda< F,Tag2 > l1;
Chris@16 202 typedef lambda< Tag1,Tag2 > l2;
Chris@16 203
Chris@16 204 typedef typename l1::is_le is_le;
Chris@16 205 typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;
Chris@16 206 typedef typename le_result_::result_ result_;
Chris@16 207 typedef typename le_result_::type type;
Chris@16 208 };
Chris@16 209
Chris@16 210 #endif
Chris@16 211
Chris@16 212 # undef AUX778076_ARITY_PARAM
Chris@16 213 # undef AUX778076_BIND_N_PARAMS
Chris@16 214 # undef AUX778076_BIND_PARAMS
Chris@16 215 # undef AUX778076_LAMBDA_PARAMS
Chris@16 216
Chris@16 217 #if !defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)
Chris@16 218 BOOST_MPL_AUX_NA_SPEC(2, lambda)
Chris@16 219 #else
Chris@16 220 BOOST_MPL_AUX_NA_SPEC2(2, 3, lambda)
Chris@16 221 #endif
Chris@16 222
Chris@16 223 }}
Chris@16 224
Chris@16 225 #endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
Chris@16 226 #endif // BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED
Chris@16 227
Chris@16 228 ///// iteration, depth == 1
Chris@16 229
Chris@16 230 // For gcc 4.4 compatability, we must include the
Chris@16 231 // BOOST_PP_ITERATION_DEPTH test inside an #else clause.
Chris@16 232 #else // BOOST_PP_IS_ITERATING
Chris@16 233 #if BOOST_PP_ITERATION_DEPTH() == 1
Chris@16 234 #define i_ BOOST_PP_FRAME_ITERATION(1)
Chris@16 235
Chris@16 236 #if i_ > 0
Chris@16 237
Chris@16 238 namespace aux {
Chris@16 239
Chris@16 240 # define AUX778076_RESULT(unused, i_, T) \
Chris@16 241 BOOST_PP_COMMA_IF(i_) \
Chris@16 242 typename BOOST_PP_CAT(T, BOOST_PP_INC(i_))::result_ \
Chris@16 243 /**/
Chris@16 244
Chris@16 245 # define AUX778076_TYPE(unused, i_, T) \
Chris@16 246 BOOST_PP_COMMA_IF(i_) \
Chris@16 247 typename BOOST_PP_CAT(T, BOOST_PP_INC(i_))::type \
Chris@16 248 /**/
Chris@16 249
Chris@16 250 template<
Chris@16 251 typename IsLE, typename Tag
Chris@16 252 , template< AUX778076_LAMBDA_PARAMS(i_, typename P) > class F
Chris@16 253 , AUX778076_LAMBDA_PARAMS(i_, typename L)
Chris@16 254 >
Chris@16 255 struct BOOST_PP_CAT(le_result,i_)
Chris@16 256 {
Chris@16 257 typedef F<
Chris@16 258 BOOST_MPL_PP_REPEAT(i_, AUX778076_TYPE, L)
Chris@16 259 > result_;
Chris@16 260
Chris@16 261 typedef result_ type;
Chris@16 262 };
Chris@16 263
Chris@16 264 template<
Chris@16 265 typename Tag
Chris@16 266 , template< AUX778076_LAMBDA_PARAMS(i_, typename P) > class F
Chris@16 267 , AUX778076_LAMBDA_PARAMS(i_, typename L)
Chris@16 268 >
Chris@16 269 struct BOOST_PP_CAT(le_result,i_)< true_,Tag,F,AUX778076_LAMBDA_PARAMS(i_, L) >
Chris@16 270 {
Chris@16 271 typedef BOOST_PP_CAT(bind,i_)<
Chris@16 272 BOOST_PP_CAT(quote,i_)<F,Tag>
Chris@16 273 , BOOST_MPL_PP_REPEAT(i_, AUX778076_RESULT, L)
Chris@16 274 > result_;
Chris@16 275
Chris@16 276 typedef mpl::protect<result_> type;
Chris@16 277 };
Chris@16 278
Chris@16 279 # undef AUX778076_TYPE
Chris@16 280 # undef AUX778076_RESULT
Chris@16 281
Chris@16 282 } // namespace aux
Chris@16 283
Chris@16 284
Chris@16 285 # define AUX778076_LAMBDA_TYPEDEF(unused, i_, T) \
Chris@16 286 typedef lambda< BOOST_PP_CAT(T, BOOST_PP_INC(i_)), Tag > \
Chris@16 287 BOOST_PP_CAT(l,BOOST_PP_INC(i_)); \
Chris@16 288 /**/
Chris@16 289
Chris@16 290 # define AUX778076_IS_LE_TYPEDEF(unused, i_, unused2) \
Chris@16 291 typedef typename BOOST_PP_CAT(l,BOOST_PP_INC(i_))::is_le \
Chris@16 292 BOOST_PP_CAT(is_le,BOOST_PP_INC(i_)); \
Chris@16 293 /**/
Chris@16 294
Chris@16 295 # define AUX778076_IS_LAMBDA_EXPR(unused, i_, unused2) \
Chris@16 296 BOOST_PP_COMMA_IF(i_) \
Chris@16 297 BOOST_PP_CAT(is_le,BOOST_PP_INC(i_))::value \
Chris@16 298 /**/
Chris@16 299
Chris@16 300 template<
Chris@16 301 template< AUX778076_LAMBDA_PARAMS(i_, typename P) > class F
Chris@16 302 , AUX778076_LAMBDA_PARAMS(i_, typename T)
Chris@16 303 , typename Tag
Chris@16 304 >
Chris@16 305 struct lambda<
Chris@16 306 F<AUX778076_LAMBDA_PARAMS(i_, T)>
Chris@16 307 , Tag
Chris@16 308 AUX778076_ARITY_PARAM(int_<i_>)
Chris@16 309 >
Chris@16 310 {
Chris@16 311 BOOST_MPL_PP_REPEAT(i_, AUX778076_LAMBDA_TYPEDEF, T)
Chris@16 312 BOOST_MPL_PP_REPEAT(i_, AUX778076_IS_LE_TYPEDEF, unused)
Chris@16 313
Chris@16 314 typedef typename aux::lambda_or<
Chris@16 315 BOOST_MPL_PP_REPEAT(i_, AUX778076_IS_LAMBDA_EXPR, unused)
Chris@16 316 >::type is_le;
Chris@16 317
Chris@16 318 typedef aux::BOOST_PP_CAT(le_result,i_)<
Chris@16 319 is_le, Tag, F, AUX778076_LAMBDA_PARAMS(i_, l)
Chris@16 320 > le_result_;
Chris@16 321
Chris@16 322 typedef typename le_result_::result_ result_;
Chris@16 323 typedef typename le_result_::type type;
Chris@16 324 };
Chris@16 325
Chris@16 326
Chris@16 327 # undef AUX778076_IS_LAMBDA_EXPR
Chris@16 328 # undef AUX778076_IS_LE_TYPEDEF
Chris@16 329 # undef AUX778076_LAMBDA_TYPEDEF
Chris@16 330
Chris@16 331 #endif // i_ > 0
Chris@16 332
Chris@16 333 template<
Chris@16 334 typename F AUX778076_BIND_N_PARAMS(i_, typename T)
Chris@16 335 , typename Tag
Chris@16 336 >
Chris@16 337 struct lambda<
Chris@16 338 BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_, T)>
Chris@16 339 , Tag
Chris@16 340 AUX778076_ARITY_PARAM(int_<BOOST_PP_INC(i_)>)
Chris@16 341 >
Chris@16 342 {
Chris@16 343 typedef false_ is_le;
Chris@16 344 typedef BOOST_PP_CAT(bind,i_)<
Chris@16 345 F
Chris@16 346 AUX778076_BIND_N_PARAMS(i_, T)
Chris@16 347 > result_;
Chris@16 348
Chris@16 349 typedef result_ type;
Chris@16 350 };
Chris@16 351
Chris@16 352 #undef i_
Chris@16 353 #endif // BOOST_PP_ITERATION_DEPTH()
Chris@16 354 #endif // BOOST_PP_IS_ITERATING