36 lines
		
	
	
		
			1013 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			36 lines
		
	
	
		
			1013 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								// Copyright David Abrahams 2002.
							 | 
						||
| 
								 | 
							
								// 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)
							 | 
						||
| 
								 | 
							
								#ifndef VOID_PTR_DWA200239_HPP
							 | 
						||
| 
								 | 
							
								# define VOID_PTR_DWA200239_HPP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# include <boost/type_traits/remove_cv.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost { namespace python { namespace detail { 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class U>
							 | 
						||
| 
								 | 
							
								inline U& void_ptr_to_reference(void const volatile* p, U&(*)())
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return *(U*)p;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <class T>
							 | 
						||
| 
								 | 
							
								inline void write_void_ptr(void const volatile* storage, void* ptr, T*)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    *(T**)storage = (T*)ptr;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// writes U(ptr) into the storage
							 | 
						||
| 
								 | 
							
								template <class U>
							 | 
						||
| 
								 | 
							
								inline void write_void_ptr_reference(void const volatile* storage, void* ptr, U&(*)())
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    // stripping CV qualification suppresses warnings on older EDGs
							 | 
						||
| 
								 | 
							
								    typedef typename remove_cv<U>::type u_stripped; 
							 | 
						||
| 
								 | 
							
								    write_void_ptr(storage, ptr, u_stripped(0));
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}}} // namespace boost::python::detail
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // VOID_PTR_DWA200239_HPP
							 |