/usr/include/boost/phoenix/core
Edit: /usr/include/boost/phoenix/core/environment.hpp (14939B)
/*==============================================================================
Copyright (c) 2005-2010 Joel de Guzman
Copyright (c) 2010-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_CORE_ENVIRONMENT_HPP
#define BOOST_PHOENIX_CORE_ENVIRONMENT_HPP
#include
#include
#include
#include
#include
#include
#include
#include
namespace boost { namespace phoenix
{
struct unused {};
namespace result_of
{
template
struct context
{
typedef vector2 type;
};
template
struct make_context
: context
{};
template
struct env
{
typedef
typename fusion::result_of::at_c<
typename boost::remove_reference::type
, 0
>::type
type;
};
template
struct actions
{
typedef
typename fusion::result_of::at_c<
typename boost::remove_reference::type
, 1
>::type
type;
};
}
namespace functional
{
struct context
{
BOOST_PROTO_CALLABLE()
template
struct result;
template
struct result
: result
{};
template
struct result
: result
{};
template
struct result
: result
{};
template
struct result
: result_of::context
{};
template
typename result_of::context::type
operator()(Env & env, Actions & actions) const
{
vector2 e = {env, actions};
return e;
}
template
typename result_of::context::type
operator()(Env const & env, Actions & actions) const
{
vector2 e = {env, actions};
return e;
}
template
typename result_of::context::type
operator()(Env & env, Actions const & actions) const
{
vector2 e = {env, actions};
return e;
}
template
typename result_of::context::type
operator()(Env const & env, Actions const & actions) const
{
vector2 e = {env, actions};
return e;
}
};
struct make_context
: context
{};
struct env
{
BOOST_PROTO_CALLABLE()
template
struct result;
template
struct result
: result
{};
template
struct result
: result_of::env
{};
template
typename result_of::env::type
operator()(Context const & ctx) const
{
return fusion::at_c<0>(ctx);
}
template
typename result_of::env::type
operator()(Context & ctx) const
{
return fusion::at_c<0>(ctx);
}
};
struct actions
{
BOOST_PROTO_CALLABLE()
template
struct result;
template
struct result
: result
{};
template
struct result
: result_of::actions
{};
template
typename result_of::actions::type
operator()(Context const & ctx) const
{
return fusion::at_c<1>(ctx);
}
template
typename result_of::actions::type
operator()(Context & ctx) const
{
return fusion::at_c<1>(ctx);
}
};
}
struct _context
: proto::transform<_context>
{
template
struct impl
: proto::transform_impl
{
typedef vector2 result_type;
result_type operator()(
typename impl::expr_param
, typename impl::state_param s
, typename impl::data_param d
) const
{
vector2 e = {s, d};
return e;
}
};
};
template
inline
typename result_of::context::type const
context(Env const& env, Actions const& actions)
{
vector2 e = {env, actions};
return e;
}
template
inline
typename result_of::context::type const
make_context(Env const& env, Actions const& actions)
{
return context(env, actions);
}
template
inline
typename result_of::context::type const
context(Env & env, Actions const& actions)
{
vector2 e = {env, actions};
return e;
}
template
inline
typename result_of::context::type const
make_context(Env & env, Actions const& actions)
{
return context(env, actions);
}
template
inline
typename result_of::context::type const
context(Env const& env, Actions & actions)
{
vector2 e = {env, actions};
return e;
}
template
inline
typename result_of::context::type const
make_context(Env const& env, Actions & actions)
{
return context(env, actions);
}
template
inline
typename result_of::context::type const
context(Env & env, Actions & actions)
{
vector2 e = {env, actions};
return e;
}
template
inline
typename result_of::context::type const
make_context(Env & env, Actions & actions)
{
return context(env, actions);
}
struct _env
: proto::transform<_env>
{
template
struct impl
: proto::transform_impl
{
typedef State result_type;
result_type operator()(
typename impl::expr_param
, typename impl::state_param s
, typename impl::data_param
) const
{
return s;
}
};
};
template
struct _env::impl
: proto::transform_impl
{
typedef
typename fusion::result_of::at_c<
typename boost::remove_reference::type
, 0
>::type
result_type;
result_type operator()(
typename impl::expr_param
, typename impl::state_param s
, typename impl::data_param
) const
{
return fusion::at_c<0>(s);
}
};
template
struct _env::impl
: _env::impl
{};
template
inline
typename fusion::result_of::at_c::type
env(Context & ctx)
{
return fusion::at_c<0>(ctx);
}
template
inline
typename fusion::result_of::at_c::type
env(Context const & ctx)
{
return fusion::at_c<0>(ctx);
}
struct _actions
: proto::transform<_actions>
{
template
struct impl
: proto::transform_impl
{
typedef Data result_type;
result_type operator()(
typename impl::expr_param
, typename impl::state_param
, typename impl::data_param d
) const
{
return d;
}
};
};
template
struct _actions::impl
: proto::transform_impl
{
typedef
typename fusion::result_of::at_c<
typename boost::remove_reference::type
, 1
>::type
result_type;
result_type operator()(
typename impl::expr_param
, typename impl::state_param s
, typename impl::data_param
) const
{
return fusion::at_c<1>(s);
}
};
template
struct _actions::impl
: _actions::impl
{};
template
inline
typename fusion::result_of::at_c::type
actions(Context & ctx)
{
return fusion::at_c<1>(ctx);
}
template
inline
typename fusion::result_of::at_c::type
actions(Context const & ctx)
{
return fusion::at_c<1>(ctx);
}
namespace result_of
{
template <
BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
BOOST_PHOENIX_LIMIT
, typename A
, mpl::void_
)
, typename Dummy = void
>
struct make_env;
#define M0(Z, N, D) \
template \
struct make_env \
{ \
typedef BOOST_PP_CAT(vector, N) type; \
}; \
/**/
BOOST_PP_REPEAT_FROM_TO(1, BOOST_PHOENIX_LIMIT, M0, _)
#undef M0
}
inline
result_of::make_env<>::type
make_env()
{
return result_of::make_env<>::type();
}
#define M0(Z, N, D) \
template \
inline \
typename result_of::make_env::type \
make_env(BOOST_PHOENIX_A_ref_a(N)) \
{ \
typename result_of::make_env::type \
env = \
{ \
BOOST_PHOENIX_a(N) \
}; \
return env; \
} \
template \
inline \
typename result_of::make_env::type \
make_env(BOOST_PHOENIX_A_const_ref_a(N)) \
{ \
typename result_of::make_env::type \
env = \
{ \
BOOST_PHOENIX_a(N) \
}; \
return env; \
} \
/**/
BOOST_PP_REPEAT_FROM_TO(1, BOOST_PHOENIX_LIMIT, M0, _)
#undef M0
template
struct is_environment : fusion::traits::is_sequence {};
}}
#endif