summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '3rdParty/Boost/src/boost/phoenix/core/is_nullary.hpp')
-rw-r--r--3rdParty/Boost/src/boost/phoenix/core/is_nullary.hpp177
1 files changed, 177 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/phoenix/core/is_nullary.hpp b/3rdParty/Boost/src/boost/phoenix/core/is_nullary.hpp
new file mode 100644
index 0000000..509c4d2
--- /dev/null
+++ b/3rdParty/Boost/src/boost/phoenix/core/is_nullary.hpp
@@ -0,0 +1,177 @@
+/*=============================================================================
+ Copyright (c) 2005-2010 Joel de Guzman
+ Copyright (c) 2010 Eric Niebler
+ 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_IS_NULLARY_HPP
+#define BOOST_PHOENIX_CORE_IS_NULLARY_HPP
+
+#include <boost/phoenix/core/limits.hpp>
+#include <boost/phoenix/core/environment.hpp>
+#include <boost/phoenix/core/is_actor.hpp>
+#include <boost/phoenix/core/meta_grammar.hpp>
+#include <boost/phoenix/core/terminal_fwd.hpp>
+#include <boost/phoenix/support/vector.hpp>
+#include <boost/proto/transform/fold.hpp>
+#include <boost/proto/transform/lazy.hpp>
+
+namespace boost { namespace phoenix
+{
+ namespace result_of
+ {
+ template <typename Expr, typename Enable = void>
+ struct is_nullary;
+ }
+
+ struct is_nullary
+ {
+ template <typename Rule, typename Dummy = void>
+ struct when
+ : proto::fold<
+ proto::_
+ , mpl::true_()
+ , mpl::and_<
+ proto::_state
+ , proto::call<evaluator(proto::_, _context)>
+ >()
+ >
+ {};
+ };
+
+ template <typename Dummy>
+ struct is_nullary::when<rule::argument, Dummy>
+ {
+ BOOST_PROTO_TRANSFORM(is_nullary::when<rule::argument>)
+ template <typename Expr, typename State, typename Data>
+ struct impl
+ {
+ typedef mpl::false_ result_type;
+ };
+ };
+
+ template <
+ typename Trait
+ , typename Expr
+ , typename State
+ , typename Data
+ , bool IsTransform = proto::is_transform<Trait>::value
+ >
+ struct is_nullary_custom_terminal_impl
+ {
+ typedef typename Trait::type result_type;
+ };
+
+ template <typename Transform, typename Expr, typename State, typename Data>
+ struct is_nullary_custom_terminal_impl<Transform, Expr, State, Data, true>
+ {
+ typedef
+ typename Transform::template impl<
+ Expr
+ , State
+ , Data
+ >::result_type
+ result_type;
+ };
+
+ template <typename Dummy>
+ struct is_nullary::when<rule::custom_terminal, Dummy>
+ {
+ BOOST_PROTO_TRANSFORM(is_nullary::when<rule::custom_terminal>)
+
+ template <typename Expr, typename State, typename Data>
+ struct impl
+ : is_nullary_custom_terminal_impl<
+ result_of::is_nullary<
+ custom_terminal<
+ typename proto::detail::uncvref<
+ typename proto::result_of::value<Expr>::type
+ >::type
+ >
+ >
+ , typename proto::result_of::value<Expr>::type
+ , State
+ , Data
+ >
+ {};
+ };
+
+ template <typename Dummy>
+ struct is_nullary::when<rule::terminal, Dummy>
+ {
+ BOOST_PROTO_TRANSFORM(is_nullary::when<rule::terminal>)
+ template <typename Expr, typename State, typename Data>
+ struct impl
+ {
+ typedef mpl::true_ result_type;
+ };
+ };
+
+ namespace result_of
+ {
+ template <typename Expr, typename Enable>
+ struct is_nullary
+ : boost::phoenix::evaluator::impl<
+ Expr const &
+ , vector2<
+ mpl::true_
+ , boost::phoenix::is_nullary
+ >
+ , proto::empty_env
+ >::result_type
+ {};
+
+ template <typename T>
+ struct is_nullary<T & >
+ : is_nullary<T>
+ {};
+
+ template <typename T>
+ struct is_nullary<T const & >
+ : is_nullary<T>
+ {};
+
+ template <typename T>
+ struct is_nullary<T const >
+ : is_nullary<T>
+ {};
+
+ template <typename T>
+ struct is_nullary<custom_terminal<T> >
+ : mpl::true_
+ {};
+
+ template <typename T>
+ struct is_nullary<custom_terminal<actor<T> > >
+ : evaluator
+ {};
+
+ template <typename T>
+ struct is_nullary<custom_terminal<boost::reference_wrapper<actor<T> > > >
+ {
+ BOOST_PROTO_TRANSFORM(is_nullary<custom_terminal<boost::reference_wrapper<actor<T> > > >)
+ template <typename Expr, typename State, typename Data>
+ struct impl
+ {
+ typedef typename evaluator::template impl<actor<T>, State, Data>::result_type result_type;
+ };
+ };
+
+ template <typename T>
+ struct is_nullary<custom_terminal<boost::reference_wrapper<actor<T> const> > >
+ {
+ BOOST_PROTO_TRANSFORM(is_nullary<custom_terminal<boost::reference_wrapper<actor<T> const> > >)
+ template <typename Expr, typename State, typename Data>
+ struct impl
+ {
+ typedef typename evaluator::template impl<actor<T> const, State, Data>::result_type result_type;
+ };
+ };
+ }
+
+}}
+
+#endif
+