62 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
// 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
 |