You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
75 lines
2.2 KiB
75 lines
2.2 KiB
/*============================================================================== |
|
Copyright (c) 2005-2010 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_CORE_CALL_HPP |
|
#define BOOST_PHOENIX_CORE_CALL_HPP |
|
|
|
#include <boost/phoenix/core/limits.hpp> |
|
#include <boost/phoenix/core/environment.hpp> |
|
#include <boost/proto/proto_fwd.hpp> |
|
#include <boost/proto/traits.hpp> |
|
#include <boost/proto/transform/impl.hpp> |
|
|
|
namespace boost { namespace phoenix |
|
{ |
|
namespace detail |
|
{ |
|
template < |
|
typename Fun |
|
, typename Expr |
|
, typename State |
|
, typename Data |
|
, long Arity = proto::arity_of<Expr>::value |
|
> |
|
struct call_impl; |
|
|
|
template <typename Fun, typename Expr, typename State, typename Data> |
|
struct call_impl<Fun, Expr, State, Data, 0> |
|
: proto::transform_impl<Expr, State, Data> |
|
{ |
|
typedef |
|
typename boost::phoenix::result_of::context<State, Data>::type |
|
context_type; |
|
|
|
typedef |
|
typename boost::result_of< |
|
Fun(Expr, context_type) |
|
>::type |
|
result_type; |
|
|
|
result_type operator()( |
|
typename call_impl::expr_param e |
|
, typename call_impl::state_param s |
|
, typename call_impl::data_param d |
|
) const |
|
{ |
|
return Fun()(e, boost::phoenix::context(s, d)); |
|
} |
|
}; |
|
} |
|
|
|
template <typename Fun, typename Dummy = void> |
|
struct call |
|
: proto::transform<call<Fun> > |
|
{ |
|
template <typename Expr, typename State, typename Data> |
|
struct impl |
|
: detail::call_impl<Fun, Expr, State, Data> |
|
{}; |
|
}; |
|
|
|
#include <boost/phoenix/core/detail/call.hpp> |
|
|
|
} |
|
namespace proto |
|
{ |
|
template <typename Fun, typename Dummy> |
|
struct is_callable<phoenix::call<Fun, Dummy> > : mpl::true_ {}; |
|
} |
|
} |
|
|
|
#endif
|
|
|