48 lines
1.3 KiB
Plaintext
48 lines
1.3 KiB
Plaintext
|
// Copyright Gottfried Gan<61>auge 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)
|
|||
|
/*
|
|||
|
* Generic Return value converter generator for opaque C++-pointers
|
|||
|
*/
|
|||
|
# ifndef RETURN_OPAQUE_POINTER_HPP_
|
|||
|
# define RETURN_OPAQUE_POINTER_HPP_
|
|||
|
|
|||
|
# include <boost/python/detail/prefix.hpp>
|
|||
|
# include <boost/python/opaque_pointer_converter.hpp>
|
|||
|
# include <boost/python/detail/force_instantiate.hpp>
|
|||
|
# include <boost/python/to_python_value.hpp>
|
|||
|
# include <boost/python/detail/value_arg.hpp>
|
|||
|
# include <boost/mpl/assert.hpp>
|
|||
|
|
|||
|
namespace boost { namespace python {
|
|||
|
|
|||
|
namespace detail
|
|||
|
{
|
|||
|
template <class Pointee>
|
|||
|
static void opaque_pointee(Pointee const volatile*)
|
|||
|
{
|
|||
|
force_instantiate(opaque<Pointee>::instance);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
struct return_opaque_pointer
|
|||
|
{
|
|||
|
template <class R>
|
|||
|
struct apply
|
|||
|
{
|
|||
|
BOOST_MPL_ASSERT_MSG( is_pointer<R>::value, RETURN_OPAQUE_POINTER_EXPECTS_A_POINTER_TYPE, (R));
|
|||
|
|
|||
|
struct type :
|
|||
|
boost::python::to_python_value<
|
|||
|
typename detail::value_arg<R>::type
|
|||
|
>
|
|||
|
{
|
|||
|
type() { detail::opaque_pointee(R()); }
|
|||
|
};
|
|||
|
};
|
|||
|
};
|
|||
|
|
|||
|
}} // namespace boost::python
|
|||
|
# endif // RETURN_OPAQUE_POINTER_HPP_
|