summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '3rdParty/Boost/src/boost/phoenix/core/value.hpp')
-rw-r--r--3rdParty/Boost/src/boost/phoenix/core/value.hpp112
1 files changed, 112 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/phoenix/core/value.hpp b/3rdParty/Boost/src/boost/phoenix/core/value.hpp
new file mode 100644
index 0000000..59cc369
--- /dev/null
+++ b/3rdParty/Boost/src/boost/phoenix/core/value.hpp
@@ -0,0 +1,112 @@
+/*==============================================================================
+ Copyright (c) 2001-2010 Joel de Guzman
+ Copyright (c) 2010 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_VALUE_HPP
+#define BOOST_PHOENIX_CORE_VALUE_HPP
+
+#include <boost/phoenix/core/limits.hpp>
+#include <boost/phoenix/core/actor.hpp>
+#include <boost/phoenix/core/as_actor.hpp>
+#include <boost/phoenix/core/terminal.hpp>
+#include <boost/utility/result_of.hpp>
+
+namespace boost { namespace phoenix
+{
+ ////////////////////////////////////////////////////////////////////////////
+ //
+ // values
+ //
+ // function for evaluating values, e.g. val(123)
+ //
+ ////////////////////////////////////////////////////////////////////////////
+
+ namespace expression
+ {
+ template <typename T>
+ struct value
+ : expression::terminal<T>
+ {};
+ }
+
+ template <typename T>
+ typename expression::value<T>::type const
+ inline val(T t)
+ {
+ return expression::value<T>::make(t);
+ }
+
+ // Call out actor for special handling
+ template<typename Expr>
+ struct is_custom_terminal<actor<Expr> >
+ : mpl::true_
+ {};
+
+ // Special handling for actor
+ template<typename Expr>
+ struct custom_terminal<actor<Expr> >
+ {
+ template <typename Sig>
+ struct result;
+
+ template <typename This, typename Actor, typename Context>
+ struct result<This(Actor, Context)>
+ : boost::remove_const<
+ typename boost::remove_reference<
+ typename evaluator::impl<Actor, Context, proto::empty_env>::result_type
+ >::type
+ >
+ {};
+
+ template <typename Context>
+ typename result<custom_terminal(actor<Expr> const &, Context &)>::type
+ operator()(actor<Expr> const & expr, Context & ctx) const
+ {
+ return boost::phoenix::eval(expr, ctx);
+ }
+ };
+
+ namespace meta
+ {
+ template<typename T>
+ struct const_ref
+ : add_reference<typename add_const<T>::type>
+ {};
+
+ template<typename T>
+ struct argument_type
+ : mpl::eval_if_c<
+ is_function<typename remove_pointer<T>::type>::value
+ , mpl::identity<T>
+ , const_ref<T>
+ >
+ {
+ typedef T type;
+ };
+
+ template <typename T>
+ struct decay
+ {
+ typedef T type;
+ };
+ template <typename T, int N>
+ struct decay<T[N]> : decay<T const *> {};
+ }
+
+ template <typename T>
+ struct as_actor<T, mpl::false_>
+ {
+ typedef typename expression::value<typename meta::decay<T>::type >::type type;
+
+ static type
+ convert(typename meta::argument_type<typename meta::decay<T>::type>::type t)
+ {
+ return expression::value<typename meta::decay<T>::type >::make(t);
+ }
+ };
+}}
+
+#endif