annotate DEPENDENCIES/generic/include/boost/phoenix/scope/scoped_environment.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 Copyright (c) 2005-2010 Joel de Guzman
Chris@16 3 Copyright (c) 2010 Thomas Heller
Chris@16 4
Chris@16 5 Distributed under the Boost Software License, Version 1.0. (See accompanying
Chris@16 6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 7 ==============================================================================*/
Chris@16 8 #ifndef BOOST_PHOENIX_SCOPE_SCOPED_ENVIRONMENT_HPP
Chris@16 9 #define BOOST_PHOENIX_SCOPE_SCOPED_ENVIRONMENT_HPP
Chris@16 10
Chris@16 11 #include <boost/phoenix/core/limits.hpp>
Chris@16 12 #include <boost/mpl/int.hpp>
Chris@16 13 #include <boost/fusion/sequence/sequence_facade.hpp>
Chris@16 14 #include <boost/fusion/sequence/intrinsic/begin.hpp>
Chris@16 15 #include <boost/fusion/sequence/intrinsic/end.hpp>
Chris@16 16 #include <boost/fusion/sequence/intrinsic/size.hpp>
Chris@16 17 #include <boost/fusion/sequence/intrinsic/value_at.hpp>
Chris@16 18 #include <boost/fusion/sequence/intrinsic/at.hpp>
Chris@16 19 #include <boost/fusion/support/category_of.hpp>
Chris@16 20 #include <boost/fusion/include/pop_front.hpp>
Chris@16 21 #include <boost/utility/result_of.hpp>
Chris@16 22
Chris@16 23 namespace boost { namespace phoenix
Chris@16 24 {
Chris@16 25 template<typename Env, typename OuterEnv, typename Locals, typename Map>
Chris@16 26 struct scoped_environment
Chris@16 27 : fusion::sequence_facade<
Chris@16 28 scoped_environment<Env, OuterEnv, Locals, Map>
Chris@16 29 , fusion::random_access_traversal_tag
Chris@16 30 >
Chris@16 31 {
Chris@16 32 typedef Env env_type;
Chris@16 33 typedef OuterEnv outer_env_type;
Chris@16 34 typedef Locals locals_type;
Chris@16 35 typedef Map map_type;
Chris@16 36
Chris@16 37 scoped_environment(
Chris@101 38 Env const & env_
Chris@101 39 , OuterEnv const &outer_env_
Chris@101 40 , Locals const &locals_
Chris@16 41 )
Chris@101 42 : env(env_)
Chris@101 43 , outer_env(outer_env_)
Chris@101 44 , locals(locals_)
Chris@16 45 {}
Chris@16 46
Chris@101 47 scoped_environment(scoped_environment const & o)
Chris@101 48 : env(o.env)
Chris@16 49 , outer_env(o.outer_env)
Chris@101 50 , locals(o.locals)
Chris@101 51 {};
Chris@16 52
Chris@16 53 Env const & env;
Chris@16 54 OuterEnv const & outer_env;
Chris@16 55 Locals const & locals;
Chris@16 56
Chris@16 57 typedef typename
Chris@16 58 fusion::result_of::pop_front<
Chris@16 59 typename add_const<
Chris@16 60 typename proto::detail::uncvref<Env>::type
Chris@16 61 >::type
Chris@16 62 >::type
Chris@16 63 args_type;
Chris@16 64
Chris@16 65 args_type args() const
Chris@16 66 {
Chris@16 67 return fusion::pop_front(env);
Chris@16 68 }
Chris@16 69
Chris@16 70 #define BOOST_PHOENIX_ADAPT_SCOPED_ENVIRONMENT(INTRINSIC) \
Chris@16 71 template <typename Seq> \
Chris@16 72 struct INTRINSIC \
Chris@16 73 { \
Chris@16 74 typedef \
Chris@16 75 typename fusion::result_of::INTRINSIC< \
Chris@16 76 typename mpl::eval_if_c< \
Chris@16 77 is_const< \
Chris@16 78 typename remove_reference< \
Chris@16 79 typename Seq::env_type \
Chris@16 80 >::type \
Chris@16 81 >::value \
Chris@16 82 , add_const< \
Chris@16 83 typename proto::detail::uncvref< \
Chris@16 84 typename Seq::env_type \
Chris@16 85 >::type \
Chris@16 86 > \
Chris@16 87 , proto::detail::uncvref< \
Chris@16 88 typename Seq::env_type \
Chris@16 89 > \
Chris@16 90 >::type \
Chris@16 91 >::type \
Chris@16 92 type; \
Chris@16 93 \
Chris@16 94 static type call(Seq & seq) \
Chris@16 95 { \
Chris@16 96 return fusion::INTRINSIC(seq.env); \
Chris@16 97 } \
Chris@16 98 } \
Chris@16 99 /**/
Chris@16 100 BOOST_PHOENIX_ADAPT_SCOPED_ENVIRONMENT(begin);
Chris@16 101 BOOST_PHOENIX_ADAPT_SCOPED_ENVIRONMENT(end);
Chris@16 102 BOOST_PHOENIX_ADAPT_SCOPED_ENVIRONMENT(size);
Chris@16 103 #undef BOOST_PHOENIX_ADAPT_SCOPED_ENVIRONMENT
Chris@16 104
Chris@16 105 template <typename Seq, typename N>
Chris@16 106 struct value_at
Chris@16 107 {
Chris@16 108 typedef
Chris@16 109 typename fusion::result_of::value_at<
Chris@16 110 typename mpl::eval_if_c<
Chris@16 111 is_const<
Chris@16 112 typename remove_reference<
Chris@16 113 typename Seq::env_type
Chris@16 114 >::type
Chris@16 115 >::value
Chris@16 116 , add_const<
Chris@16 117 typename proto::detail::uncvref<
Chris@16 118 typename Seq::env_type
Chris@16 119 >::type
Chris@16 120 >
Chris@16 121 , proto::detail::uncvref<
Chris@16 122 typename Seq::env_type
Chris@16 123 >
Chris@16 124 >::type
Chris@16 125 , N
Chris@16 126 >::type
Chris@16 127 type;
Chris@16 128 };
Chris@16 129
Chris@16 130 template <typename Seq, typename N>
Chris@16 131 struct at
Chris@16 132 {
Chris@16 133 typedef
Chris@16 134 typename fusion::result_of::at<
Chris@16 135 typename mpl::eval_if_c<
Chris@16 136 is_const<
Chris@16 137 typename remove_reference<
Chris@16 138 typename Seq::env_type
Chris@16 139 >::type
Chris@16 140 >::value
Chris@16 141 , add_const<
Chris@16 142 typename proto::detail::uncvref<
Chris@16 143 typename Seq::env_type
Chris@16 144 >::type
Chris@16 145 >
Chris@16 146 , proto::detail::uncvref<
Chris@16 147 typename Seq::env_type
Chris@16 148 >
Chris@16 149 >::type
Chris@16 150 , N
Chris@16 151 >::type
Chris@16 152 type;
Chris@16 153
Chris@16 154 static type call(Seq & seq)
Chris@16 155 {
Chris@16 156 return fusion::at<N>(seq.env);
Chris@16 157 }
Chris@16 158 };
Chris@16 159 };
Chris@16 160
Chris@16 161 template <typename Env, typename Dummy = void>
Chris@16 162 struct is_scoped_environment : mpl::false_ {};
Chris@16 163
Chris@16 164 template <typename Env>
Chris@16 165 struct is_scoped_environment<Env&> : is_scoped_environment<Env> {};
Chris@16 166
Chris@16 167 template <typename Env, typename OuterEnv, typename Locals, typename Map>
Chris@16 168 struct is_scoped_environment<scoped_environment<Env, OuterEnv, Locals, Map> >
Chris@16 169 : mpl::true_
Chris@16 170 {};
Chris@16 171
Chris@16 172 template <typename Env, typename OuterEnv, typename Locals, typename Map>
Chris@16 173 struct is_scoped_environment<scoped_environment<Env, OuterEnv, Locals, Map> const>
Chris@16 174 : mpl::true_
Chris@16 175 {};
Chris@16 176 }}
Chris@16 177
Chris@16 178 #endif