12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- // 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
|