48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
// 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_
 |