Added boost header
This commit is contained in:
191
test/external/boost/phoenix/scope/this.hpp
vendored
Normal file
191
test/external/boost/phoenix/scope/this.hpp
vendored
Normal file
@@ -0,0 +1,191 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2005-2011 Joel de Guzman
|
||||
Copyright (c) 2011 Thomas Heller
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#ifndef BOOST_PHOENIX_SCOPE_THIS_HPP
|
||||
#define BOOST_PHOENIX_SCOPE_THIS_HPP
|
||||
|
||||
#include <boost/phoenix/core/limits.hpp>
|
||||
#include <boost/phoenix/core/actor.hpp>
|
||||
#include <boost/phoenix/core/environment.hpp>
|
||||
#include <boost/phoenix/core/expression.hpp>
|
||||
#include <boost/phoenix/core/meta_grammar.hpp>
|
||||
#include <boost/phoenix/core/terminal.hpp>
|
||||
#include <boost/phoenix/scope/lambda.hpp>
|
||||
#include <boost/type_traits/remove_pointer.hpp>
|
||||
|
||||
BOOST_PHOENIX_DEFINE_EXPRESSION_VARARG(
|
||||
(boost)(phoenix)(this_)
|
||||
, (meta_grammar)(meta_grammar)
|
||||
, BOOST_PHOENIX_LIMIT
|
||||
)
|
||||
|
||||
namespace boost { namespace phoenix {
|
||||
namespace detail
|
||||
{
|
||||
/*
|
||||
struct infinite_recursion_detected {};
|
||||
|
||||
struct last_non_this_actor
|
||||
: proto::or_<
|
||||
proto::when<
|
||||
proto::nary_expr<
|
||||
proto::_
|
||||
, proto::_
|
||||
, proto::_
|
||||
>
|
||||
, proto::_child_c<1>
|
||||
>
|
||||
, proto::when<
|
||||
proto::nary_expr<
|
||||
proto::_
|
||||
, proto::_
|
||||
, proto::_
|
||||
, proto::_
|
||||
>
|
||||
, proto::_child_c<2>
|
||||
>
|
||||
>
|
||||
{};
|
||||
*/
|
||||
}
|
||||
struct this_eval
|
||||
{
|
||||
BOOST_PROTO_CALLABLE()
|
||||
|
||||
template <typename Sig>
|
||||
struct result;
|
||||
|
||||
template <typename This, typename A0, typename Context>
|
||||
struct result<This(A0, Context)>
|
||||
{
|
||||
typedef
|
||||
typename proto::detail::uncvref<
|
||||
typename result_of::env<
|
||||
Context
|
||||
>::type
|
||||
>::type
|
||||
outer_env_type;
|
||||
|
||||
typedef
|
||||
typename remove_pointer<
|
||||
typename remove_reference<
|
||||
typename fusion::result_of::at_c<
|
||||
outer_env_type
|
||||
, 0
|
||||
>::type
|
||||
>::type
|
||||
>::type
|
||||
actor_type;
|
||||
|
||||
typedef
|
||||
typename result_of::eval<
|
||||
A0 const &
|
||||
, Context const &
|
||||
>::type
|
||||
a0_type;
|
||||
|
||||
typedef
|
||||
vector2<actor_type const *, a0_type>
|
||||
inner_env_type;
|
||||
|
||||
typedef
|
||||
scoped_environment<
|
||||
inner_env_type
|
||||
, outer_env_type
|
||||
, vector0<>
|
||||
, detail::map_local_index_to_tuple<>
|
||||
>
|
||||
env_type;
|
||||
|
||||
typedef
|
||||
typename result_of::eval<
|
||||
actor_type const &
|
||||
, typename result_of::context<
|
||||
inner_env_type
|
||||
, typename result_of::actions<
|
||||
Context
|
||||
>::type
|
||||
>::type
|
||||
>::type
|
||||
type;
|
||||
};
|
||||
|
||||
template <typename A0, typename Context>
|
||||
typename result<this_eval(A0 const&, Context const &)>::type
|
||||
operator()(A0 const & a0, Context const & ctx) const
|
||||
{
|
||||
|
||||
//std::cout << typeid(checker).name() << "\n";
|
||||
//std::cout << typeid(checker).name() << "\n";
|
||||
typedef
|
||||
typename proto::detail::uncvref<
|
||||
typename result_of::env<
|
||||
Context
|
||||
>::type
|
||||
>::type
|
||||
outer_env_type;
|
||||
|
||||
typedef
|
||||
typename remove_pointer<
|
||||
typename remove_reference<
|
||||
typename fusion::result_of::at_c<
|
||||
outer_env_type
|
||||
, 0
|
||||
>::type
|
||||
>::type
|
||||
>::type
|
||||
actor_type;
|
||||
|
||||
typedef
|
||||
typename result_of::eval<
|
||||
A0 const &
|
||||
, Context const &
|
||||
>::type
|
||||
a0_type;
|
||||
|
||||
typedef
|
||||
vector2<actor_type const *, a0_type>
|
||||
inner_env_type;
|
||||
|
||||
typedef
|
||||
scoped_environment<
|
||||
inner_env_type
|
||||
, outer_env_type
|
||||
, vector0<>
|
||||
, detail::map_local_index_to_tuple<>
|
||||
>
|
||||
env_type;
|
||||
|
||||
inner_env_type inner_env = {fusion::at_c<0>(phoenix::env(ctx)), phoenix::eval(a0, ctx)};
|
||||
vector0<> locals;
|
||||
env_type env(inner_env, phoenix::env(ctx), locals);
|
||||
|
||||
return phoenix::eval(*fusion::at_c<0>(phoenix::env(ctx)), phoenix::context(inner_env, phoenix::actions(ctx)));
|
||||
//return (*fusion::at_c<0>(phoenix::env(ctx)))(eval(a0, ctx));
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Dummy>
|
||||
struct default_actions::when<rule::this_, Dummy>
|
||||
: call<this_eval>
|
||||
{};
|
||||
|
||||
template <typename Dummy>
|
||||
struct is_nullary::when<rule::this_, Dummy>
|
||||
: proto::make<mpl::false_()>
|
||||
{};
|
||||
|
||||
template <typename A0>
|
||||
typename expression::this_<A0>::type const
|
||||
this_(A0 const & a0)
|
||||
{
|
||||
return expression::this_<A0>::make(a0);
|
||||
}
|
||||
|
||||
}}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user