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.
61 lines
1.4 KiB
61 lines
1.4 KiB
// 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
|
|
|