// Copyright Gottfried Ganß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_ |