62 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			62 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | // Copyright David Abrahams 2003.
 | ||
|  | // 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 RAW_FUNCTION_DWA200336_HPP
 | ||
|  | # define RAW_FUNCTION_DWA200336_HPP
 | ||
|  | 
 | ||
|  | # include <boost/python/detail/prefix.hpp>
 | ||
|  | 
 | ||
|  | # include <boost/python/tuple.hpp>
 | ||
|  | # include <boost/python/dict.hpp>
 | ||
|  | # include <boost/python/object/py_function.hpp>
 | ||
|  | # include <boost/mpl/vector/vector10.hpp>
 | ||
|  | 
 | ||
|  | # include <boost/limits.hpp>
 | ||
|  | # include <cstddef>
 | ||
|  | 
 | ||
|  | namespace boost { namespace python {  | ||
|  | 
 | ||
|  | namespace detail | ||
|  | { | ||
|  |   template <class F> | ||
|  |   struct raw_dispatcher | ||
|  |   { | ||
|  |       raw_dispatcher(F f) : f(f) {} | ||
|  |        | ||
|  |       PyObject* operator()(PyObject* args, PyObject* keywords) | ||
|  |       { | ||
|  |           return incref( | ||
|  |               object( | ||
|  |                   f( | ||
|  |                       tuple(borrowed_reference(args)) | ||
|  |                     , keywords ? dict(borrowed_reference(keywords)) : dict() | ||
|  |                   ) | ||
|  |               ).ptr() | ||
|  |           ); | ||
|  |       } | ||
|  | 
 | ||
|  |    private: | ||
|  |       F f; | ||
|  |   }; | ||
|  | 
 | ||
|  |   object BOOST_PYTHON_DECL make_raw_function(objects::py_function); | ||
|  | } | ||
|  | 
 | ||
|  | template <class F> | ||
|  | object raw_function(F f, std::size_t min_args = 0) | ||
|  | { | ||
|  |     return detail::make_raw_function( | ||
|  |         objects::py_function( | ||
|  |             detail::raw_dispatcher<F>(f) | ||
|  |           , mpl::vector1<PyObject*>() | ||
|  |           , min_args | ||
|  |           , (std::numeric_limits<unsigned>::max)() | ||
|  |         ) | ||
|  |     ); | ||
|  | } | ||
|  |      | ||
|  | }} // namespace boost::python
 | ||
|  | 
 | ||
|  | #endif // RAW_FUNCTION_DWA200336_HPP
 |