--- /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 <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_