125 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			125 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								#if !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/phoenix/core/detail/cpp03/preprocessed/function_eval.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if !BOOST_PHOENIX_IS_ITERATING
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
							 | 
						||
| 
								 | 
							
								#pragma wave option(preserve: 2, line: 0, output: "preprocessed/function_eval_" BOOST_PHOENIX_LIMIT_STR ".hpp")
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								/*=============================================================================
							 | 
						||
| 
								 | 
							
								    Copyright (c) 2001-2007 Joel de Guzman
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    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)
							 | 
						||
| 
								 | 
							
								==============================================================================*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
							 | 
						||
| 
								 | 
							
								#pragma wave option(preserve: 1)
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #define PHOENIX_GET_ARG(z, n, data)                                     \
							 | 
						||
| 
								 | 
							
								            typedef                                                             \
							 | 
						||
| 
								 | 
							
								                typename boost::add_reference<                                  \
							 | 
						||
| 
								 | 
							
								                    typename boost::add_const<                                  \
							 | 
						||
| 
								 | 
							
								                        typename boost::result_of<                              \
							 | 
						||
| 
								 | 
							
								                            boost::phoenix::evaluator(                          \
							 | 
						||
| 
								 | 
							
								                                BOOST_PP_CAT(A, n)                              \
							 | 
						||
| 
								 | 
							
								                              , Context                                         \
							 | 
						||
| 
								 | 
							
								                            )                                                   \
							 | 
						||
| 
								 | 
							
								                        >::type                                                 \
							 | 
						||
| 
								 | 
							
								                    >::type                                                     \
							 | 
						||
| 
								 | 
							
								                >::type                                                         \
							 | 
						||
| 
								 | 
							
								                BOOST_PP_CAT(a, n);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #define PHOENIX_EVAL_ARG(z, n, data)                                    \
							 | 
						||
| 
								 | 
							
								            help_rvalue_deduction(boost::phoenix::eval(BOOST_PP_CAT(a, n), ctx))
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        #define M0(z, n, data)                                     \
							 | 
						||
| 
								 | 
							
								            typename proto::detail::uncvref<BOOST_PP_CAT(a, n)>::type
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #define BOOST_PHOENIX_ITERATION_PARAMS                                  \
							 | 
						||
| 
								 | 
							
								            (3, (1, BOOST_PP_DEC(BOOST_PHOENIX_ACTOR_LIMIT),                    \
							 | 
						||
| 
								 | 
							
								            <boost/phoenix/core/detail/cpp03/function_eval.hpp>))
							 | 
						||
| 
								 | 
							
								#include BOOST_PHOENIX_ITERATE()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #undef PHOENIX_GET_ARG
							 | 
						||
| 
								 | 
							
								        #undef PHOENIX_EVAL_ARG
							 | 
						||
| 
								 | 
							
								        #undef M0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
							 | 
						||
| 
								 | 
							
								#pragma wave option(output: null)
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								            template <
							 | 
						||
| 
								 | 
							
								                typename This
							 | 
						||
| 
								 | 
							
								              , typename F
							 | 
						||
| 
								 | 
							
								              , BOOST_PHOENIX_typename_A
							 | 
						||
| 
								 | 
							
								              , typename Context
							 | 
						||
| 
								 | 
							
								            >
							 | 
						||
| 
								 | 
							
								            struct result<This(F, BOOST_PHOENIX_A, Context)>
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                typedef typename
							 | 
						||
| 
								 | 
							
								                    remove_reference<
							 | 
						||
| 
								 | 
							
								                        typename boost::result_of<evaluator(F, Context)>::type
							 | 
						||
| 
								 | 
							
								                    >::type
							 | 
						||
| 
								 | 
							
								                    fn;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, PHOENIX_GET_ARG, _)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                typedef typename
							 | 
						||
| 
								 | 
							
								                    boost::result_of<fn(BOOST_PHOENIX_a)>::type
							 | 
						||
| 
								 | 
							
								                    type;
							 | 
						||
| 
								 | 
							
								                /*
							 | 
						||
| 
								 | 
							
								                typedef typename
							 | 
						||
| 
								 | 
							
								                    mpl::eval_if_c<
							 | 
						||
| 
								 | 
							
								                        has_phx2_result<
							 | 
						||
| 
								 | 
							
								                            fn
							 | 
						||
| 
								 | 
							
								                          , BOOST_PP_ENUM(BOOST_PHOENIX_ITERATION, M0, _)
							 | 
						||
| 
								 | 
							
								                        >::value
							 | 
						||
| 
								 | 
							
								                      , boost::result_of<
							 | 
						||
| 
								 | 
							
								                            fn(
							 | 
						||
| 
								 | 
							
								                                BOOST_PHOENIX_a
							 | 
						||
| 
								 | 
							
								                            )
							 | 
						||
| 
								 | 
							
								                        >
							 | 
						||
| 
								 | 
							
								                      , phx2_result<
							 | 
						||
| 
								 | 
							
								                            fn
							 | 
						||
| 
								 | 
							
								                          , BOOST_PHOENIX_a
							 | 
						||
| 
								 | 
							
								                        >
							 | 
						||
| 
								 | 
							
								                    >::type
							 | 
						||
| 
								 | 
							
								                    type;
							 | 
						||
| 
								 | 
							
								                */
							 | 
						||
| 
								 | 
							
								            };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            template <typename F, BOOST_PHOENIX_typename_A, typename Context>
							 | 
						||
| 
								 | 
							
								            typename result<
							 | 
						||
| 
								 | 
							
								                function_eval(
							 | 
						||
| 
								 | 
							
								                    F const &
							 | 
						||
| 
								 | 
							
								                  , BOOST_PHOENIX_A_ref
							 | 
						||
| 
								 | 
							
								                  , Context const &
							 | 
						||
| 
								 | 
							
								                )
							 | 
						||
| 
								 | 
							
								            >::type
							 | 
						||
| 
								 | 
							
								            operator()(F const & f, BOOST_PHOENIX_A_ref_a, Context const & ctx) const
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                return boost::phoenix::eval(f, ctx)(BOOST_PP_ENUM(BOOST_PHOENIX_ITERATION, PHOENIX_EVAL_ARG, _));
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            template <typename F, BOOST_PHOENIX_typename_A, typename Context>
							 | 
						||
| 
								 | 
							
								            typename result<
							 | 
						||
| 
								 | 
							
								                function_eval(
							 | 
						||
| 
								 | 
							
								                    F &
							 | 
						||
| 
								 | 
							
								                  , BOOST_PHOENIX_A_ref
							 | 
						||
| 
								 | 
							
								                  , Context const &
							 | 
						||
| 
								 | 
							
								                )
							 | 
						||
| 
								 | 
							
								            >::type
							 | 
						||
| 
								 | 
							
								            operator()(F & f, BOOST_PHOENIX_A_ref_a, Context const & ctx) const
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                return boost::phoenix::eval(f, ctx)(BOOST_PP_ENUM(BOOST_PHOENIX_ITERATION, PHOENIX_EVAL_ARG, _));
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |