diff -r 000000000000 -r e4d67989cc36 ossrv_pub/boost_apis/boost/python/return_opaque_pointer.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ossrv_pub/boost_apis/boost/python/return_opaque_pointer.hpp Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,47 @@ +// 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 +# include +# include +# include +# include +# include + +namespace boost { namespace python { + +namespace detail +{ + template + static void opaque_pointee(Pointee const volatile*) + { + force_instantiate(opaque::instance); + } +} + +struct return_opaque_pointer +{ + template + struct apply + { + BOOST_MPL_ASSERT_MSG( is_pointer::value, RETURN_OPAQUE_POINTER_EXPECTS_A_POINTER_TYPE, (R)); + + struct type : + boost::python::to_python_value< + typename detail::value_arg::type + > + { + type() { detail::opaque_pointee(R()); } + }; + }; +}; + +}} // namespace boost::python +# endif // RETURN_OPAQUE_POINTER_HPP_