diff -r 000000000000 -r bde4ae8d615e os/ossrv/ossrv_pub/boost_apis/boost/python/raw_function.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/ossrv/ossrv_pub/boost_apis/boost/python/raw_function.hpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,61 @@ +// 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 + +# include +# include +# include +# include + +# include +# include + +namespace boost { namespace python { + +namespace detail +{ + template + 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 +object raw_function(F f, std::size_t min_args = 0) +{ + return detail::make_raw_function( + objects::py_function( + detail::raw_dispatcher(f) + , mpl::vector1() + , min_args + , (std::numeric_limits::max)() + ) + ); +} + +}} // namespace boost::python + +#endif // RAW_FUNCTION_DWA200336_HPP