Chris@16: // Copyright David Abrahams 2003. Chris@16: // Distributed under the Boost Software License, Version 1.0. (See Chris@16: // accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: #ifndef RAW_FUNCTION_DWA200336_HPP Chris@16: # define RAW_FUNCTION_DWA200336_HPP Chris@16: Chris@16: # include Chris@16: Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: Chris@16: # include Chris@16: # include Chris@16: Chris@16: namespace boost { namespace python { Chris@16: Chris@16: namespace detail Chris@16: { Chris@16: template Chris@16: struct raw_dispatcher Chris@16: { Chris@16: raw_dispatcher(F f) : f(f) {} Chris@16: Chris@16: PyObject* operator()(PyObject* args, PyObject* keywords) Chris@16: { Chris@16: return incref( Chris@16: object( Chris@16: f( Chris@16: tuple(borrowed_reference(args)) Chris@16: , keywords ? dict(borrowed_reference(keywords)) : dict() Chris@16: ) Chris@16: ).ptr() Chris@16: ); Chris@16: } Chris@16: Chris@16: private: Chris@16: F f; Chris@16: }; Chris@16: Chris@16: object BOOST_PYTHON_DECL make_raw_function(objects::py_function); Chris@16: } Chris@16: Chris@16: template Chris@16: object raw_function(F f, std::size_t min_args = 0) Chris@16: { Chris@16: return detail::make_raw_function( Chris@16: objects::py_function( Chris@16: detail::raw_dispatcher(f) Chris@16: , mpl::vector1() Chris@16: , min_args Chris@16: , (std::numeric_limits::max)() Chris@16: ) Chris@16: ); Chris@16: } Chris@16: Chris@16: }} // namespace boost::python Chris@16: Chris@16: #endif // RAW_FUNCTION_DWA200336_HPP