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