178 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			178 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								/*=============================================================================
							 | 
						||
| 
								 | 
							
								    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
							 | 
						||
| 
								 | 
							
								
							 |