annotate DEPENDENCIES/generic/include/boost/proto/transform/detail/fold_impl.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 2665513ce2d3
children
rev   line source
Chris@16 1 #if !defined(BOOST_PROTO_DONT_USE_PREPROCESSED_FILES)
Chris@16 2
Chris@16 3 #include <boost/proto/transform/detail/preprocessed/fold_impl.hpp>
Chris@16 4
Chris@16 5 #elif !defined(BOOST_PP_IS_ITERATING)
Chris@16 6
Chris@16 7 #define BOOST_PROTO_CHILD_N_TYPE(N) \
Chris@16 8 BOOST_PP_CAT(proto_child, N) \
Chris@16 9 /**/
Chris@16 10
Chris@16 11 #define BOOST_PROTO_FOLD_STATE_TYPE(Z, N, DATA) \
Chris@16 12 typedef \
Chris@16 13 typename when<_, Fun>::template impl< \
Chris@16 14 typename result_of::child_c<Expr, N>::type \
Chris@16 15 , BOOST_PP_CAT(state, N) \
Chris@16 16 , Data \
Chris@16 17 >::result_type \
Chris@16 18 BOOST_PP_CAT(state, BOOST_PP_INC(N)); \
Chris@16 19 /**/
Chris@16 20
Chris@16 21 #define BOOST_PROTO_FOLD_STATE(Z, N, DATA) \
Chris@16 22 BOOST_PP_CAT(state, BOOST_PP_INC(N)) \
Chris@16 23 BOOST_PP_CAT(s, BOOST_PP_INC(N)) \
Chris@16 24 = typename when<_, Fun>::template impl< \
Chris@16 25 typename result_of::child_c<Expr, N>::type \
Chris@16 26 , BOOST_PP_CAT(state, N) \
Chris@16 27 , Data \
Chris@16 28 >()( \
Chris@16 29 proto::child_c<N>(e) \
Chris@16 30 , BOOST_PP_CAT(s, N) \
Chris@16 31 , d \
Chris@16 32 ); \
Chris@16 33 /**/
Chris@16 34
Chris@16 35 #define BOOST_PROTO_REVERSE_FOLD_STATE_TYPE(Z, N, DATA) \
Chris@16 36 typedef \
Chris@16 37 typename when<_, Fun>::template impl< \
Chris@16 38 typename result_of::child_c< \
Chris@16 39 Expr \
Chris@16 40 , BOOST_PP_SUB(DATA, BOOST_PP_INC(N)) \
Chris@16 41 >::type \
Chris@16 42 , BOOST_PP_CAT(state, BOOST_PP_SUB(DATA, N)) \
Chris@16 43 , Data \
Chris@16 44 >::result_type \
Chris@16 45 BOOST_PP_CAT(state, BOOST_PP_SUB(DATA, BOOST_PP_INC(N))); \
Chris@16 46 /**/
Chris@16 47
Chris@16 48 #define BOOST_PROTO_REVERSE_FOLD_STATE(Z, N, DATA) \
Chris@16 49 BOOST_PP_CAT(state, BOOST_PP_SUB(DATA, BOOST_PP_INC(N))) \
Chris@16 50 BOOST_PP_CAT(s, BOOST_PP_SUB(DATA, BOOST_PP_INC(N))) \
Chris@16 51 = typename when<_, Fun>::template impl< \
Chris@16 52 typename result_of::child_c< \
Chris@16 53 Expr \
Chris@16 54 , BOOST_PP_SUB(DATA, BOOST_PP_INC(N)) \
Chris@16 55 >::type \
Chris@16 56 , BOOST_PP_CAT(state, BOOST_PP_SUB(DATA, N)) \
Chris@16 57 , Data \
Chris@16 58 >()( \
Chris@16 59 proto::child_c<BOOST_PP_SUB(DATA, BOOST_PP_INC(N))>(e) \
Chris@16 60 , BOOST_PP_CAT(s, BOOST_PP_SUB(DATA, N)) \
Chris@16 61 , d \
Chris@16 62 ); \
Chris@16 63 /**/
Chris@16 64
Chris@16 65 #if defined(__WAVE__) && defined(BOOST_PROTO_CREATE_PREPROCESSED_FILES)
Chris@16 66 #pragma wave option(preserve: 2, line: 0, output: "preprocessed/fold_impl.hpp")
Chris@16 67 #endif
Chris@16 68
Chris@16 69 ///////////////////////////////////////////////////////////////////////////////
Chris@16 70 /// \file fold_impl.hpp
Chris@16 71 /// Contains definition of fold_impl<> and reverse_fold_impl<> templates.
Chris@16 72 //
Chris@16 73 // Copyright 2008 Eric Niebler. Distributed under the Boost
Chris@16 74 // Software License, Version 1.0. (See accompanying file
Chris@16 75 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 76
Chris@16 77 #if defined(__WAVE__) && defined(BOOST_PROTO_CREATE_PREPROCESSED_FILES)
Chris@16 78 #pragma wave option(preserve: 1)
Chris@16 79 #endif
Chris@16 80
Chris@16 81 #define BOOST_PP_ITERATION_PARAMS_1 \
Chris@16 82 (3, (1, BOOST_PROTO_MAX_ARITY, <boost/proto/transform/detail/fold_impl.hpp>))
Chris@16 83 #include BOOST_PP_ITERATE()
Chris@16 84
Chris@16 85 #if defined(__WAVE__) && defined(BOOST_PROTO_CREATE_PREPROCESSED_FILES)
Chris@16 86 #pragma wave option(output: null)
Chris@16 87 #endif
Chris@16 88
Chris@16 89 #undef BOOST_PROTO_REVERSE_FOLD_STATE
Chris@16 90 #undef BOOST_PROTO_REVERSE_FOLD_STATE_TYPE
Chris@16 91 #undef BOOST_PROTO_FOLD_STATE
Chris@16 92 #undef BOOST_PROTO_FOLD_STATE_TYPE
Chris@16 93 #undef BOOST_PROTO_CHILD_N_TYPE
Chris@16 94
Chris@16 95 #else
Chris@16 96
Chris@16 97 #define N BOOST_PP_ITERATION()
Chris@16 98
Chris@16 99 template<typename State0, typename Fun, typename Expr, typename State, typename Data>
Chris@16 100 struct fold_impl<State0, Fun, Expr, State, Data, N>
Chris@16 101 : transform_impl<Expr, State, Data>
Chris@16 102 {
Chris@16 103 typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type state0;
Chris@16 104 BOOST_PP_REPEAT(N, BOOST_PROTO_FOLD_STATE_TYPE, N)
Chris@16 105 typedef BOOST_PP_CAT(state, N) result_type;
Chris@16 106
Chris@16 107 result_type operator ()(
Chris@16 108 typename fold_impl::expr_param e
Chris@16 109 , typename fold_impl::state_param s
Chris@16 110 , typename fold_impl::data_param d
Chris@16 111 ) const
Chris@16 112 {
Chris@16 113 state0 s0 =
Chris@16 114 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d);
Chris@16 115 BOOST_PP_REPEAT(N, BOOST_PROTO_FOLD_STATE, N)
Chris@16 116 return BOOST_PP_CAT(s, N);
Chris@16 117 }
Chris@16 118 };
Chris@16 119
Chris@16 120 template<typename State0, typename Fun, typename Expr, typename State, typename Data>
Chris@16 121 struct reverse_fold_impl<State0, Fun, Expr, State, Data, N>
Chris@16 122 : transform_impl<Expr, State, Data>
Chris@16 123 {
Chris@16 124 typedef typename when<_, State0>::template impl<Expr, State, Data>::result_type BOOST_PP_CAT(state, N);
Chris@16 125 BOOST_PP_REPEAT(N, BOOST_PROTO_REVERSE_FOLD_STATE_TYPE, N)
Chris@16 126 typedef state0 result_type;
Chris@16 127
Chris@16 128 result_type operator ()(
Chris@16 129 typename reverse_fold_impl::expr_param e
Chris@16 130 , typename reverse_fold_impl::state_param s
Chris@16 131 , typename reverse_fold_impl::data_param d
Chris@16 132 ) const
Chris@16 133 {
Chris@16 134 BOOST_PP_CAT(state, N) BOOST_PP_CAT(s, N) =
Chris@16 135 typename when<_, State0>::template impl<Expr, State, Data>()(e, s, d);
Chris@16 136 BOOST_PP_REPEAT(N, BOOST_PROTO_REVERSE_FOLD_STATE, N)
Chris@16 137 return s0;
Chris@16 138 }
Chris@16 139 };
Chris@16 140
Chris@16 141 #undef N
Chris@16 142
Chris@16 143 #endif