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.
		
		
		
		
		
			
		
			
				
					
					
						
							100 lines
						
					
					
						
							3.1 KiB
						
					
					
				
			
		
		
	
	
							100 lines
						
					
					
						
							3.1 KiB
						
					
					
				| /*============================================================================= | |
|     Copyright (c) 2006-2007 Tobias Schwinger | |
|    | |
|     Use modification and distribution are subject to 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(BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_FUNCTION_OBJECT_HPP_INCLUDED) | |
| #define BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_FUNCTION_OBJECT_HPP_INCLUDED | |
|  | |
| #include <boost/type_traits/add_reference.hpp> | |
| #include <boost/config.hpp> | |
|  | |
| #include <boost/fusion/functional/adapter/detail/access.hpp> | |
| #include <boost/fusion/functional/invocation/invoke_function_object.hpp> | |
|  | |
| #if defined (BOOST_MSVC) | |
| #  pragma warning(push) | |
| #  pragma warning (disable: 4512) // assignment operator could not be generated. | |
| #endif | |
|  | |
| namespace boost { namespace fusion | |
| { | |
|     template <class Function> class fused_function_object; | |
| 
 | |
|     //----- ---- --- -- - -  -   - | |
|  | |
|     template <class Function> | |
|     class fused_function_object | |
|     { | |
|         Function fnc_transformed; | |
| 
 | |
|         typedef typename detail::qf_c<Function>::type & func_const_fwd_t; | |
|         typedef typename detail::qf<Function>::type & func_fwd_t; | |
| 
 | |
|     public: | |
| 
 | |
|         inline explicit fused_function_object(func_const_fwd_t f = Function()) | |
|             : fnc_transformed(f) | |
|         { } | |
| 
 | |
|         template <class Seq>  | |
|         inline typename result_of::invoke_function_object<func_const_fwd_t, | |
|             Seq const>::type operator()(Seq const & s) const | |
|         { | |
|           return fusion::invoke_function_object< | |
|               func_const_fwd_t >(this->fnc_transformed,s); | |
|         } | |
| 
 | |
|         template <class Seq>  | |
|         inline typename result_of::invoke_function_object<func_fwd_t, | |
|             Seq const>::type  | |
|         operator()(Seq const & s)  | |
|         { | |
|           return fusion::invoke_function_object< | |
|               func_fwd_t >(this->fnc_transformed,s); | |
|         } | |
| 
 | |
|         template <class Seq>  | |
|         inline typename result_of::invoke_function_object<func_const_fwd_t, | |
|             Seq>::type | |
|         operator()(Seq & s) const | |
|         { | |
|           return fusion::invoke_function_object< | |
|               func_const_fwd_t >(this->fnc_transformed,s); | |
|         } | |
| 
 | |
|         template <class Seq>  | |
|         inline typename result_of::invoke_function_object<func_fwd_t,Seq>::type | |
|         operator()(Seq & s)  | |
|         { | |
|           return fusion::invoke_function_object< | |
|               func_fwd_t >(this->fnc_transformed,s); | |
|         } | |
| 
 | |
|         template <typename Sig> | |
|         struct result; | |
| 
 | |
|         template <class Self, class Seq> | |
|         struct result< Self const (Seq) > | |
|             : result_of::invoke_function_object<func_const_fwd_t,  | |
|                 typename boost::remove_reference<Seq>::type > | |
|         { }; | |
| 
 | |
|         template <class Self, class Seq> | |
|         struct result< Self(Seq) > | |
|             : result_of::invoke_function_object<func_fwd_t, | |
|                 typename boost::remove_reference<Seq>::type > | |
|         { }; | |
|     }; | |
| 
 | |
| }} | |
| 
 | |
| #if defined (BOOST_MSVC) | |
| #  pragma warning(pop) | |
| #endif | |
|  | |
| #endif | |
| 
 | |
| 
 |