52 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			52 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | // 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 INSTANCE_DWA200295_HPP
 | ||
|  | # define INSTANCE_DWA200295_HPP
 | ||
|  | 
 | ||
|  | # include <boost/python/detail/prefix.hpp>
 | ||
|  | # include <boost/type_traits/alignment_traits.hpp>
 | ||
|  | # include <cstddef>
 | ||
|  | 
 | ||
|  | namespace boost { namespace python | ||
|  | { | ||
|  |   struct BOOST_PYTHON_DECL_FORWARD instance_holder; | ||
|  | }} // namespace boost::python
 | ||
|  | 
 | ||
|  | namespace boost { namespace python { namespace objects {  | ||
|  | 
 | ||
|  | // Each extension instance will be one of these
 | ||
|  | template <class Data = char> | ||
|  | struct instance | ||
|  | { | ||
|  |     PyObject_VAR_HEAD | ||
|  |     PyObject* dict; | ||
|  |     PyObject* weakrefs;  | ||
|  |     instance_holder* objects; | ||
|  | 
 | ||
|  |     typedef typename type_with_alignment< | ||
|  |         ::boost::alignment_of<Data>::value | ||
|  |     >::type align_t; | ||
|  |            | ||
|  |     union | ||
|  |     { | ||
|  |         align_t align; | ||
|  |         char bytes[sizeof(Data)]; | ||
|  |     } storage; | ||
|  | }; | ||
|  | 
 | ||
|  | template <class Data> | ||
|  | struct additional_instance_size | ||
|  | { | ||
|  |     typedef instance<Data> instance_data; | ||
|  |     typedef instance<char> instance_char; | ||
|  |     BOOST_STATIC_CONSTANT( | ||
|  |         std::size_t, value = sizeof(instance_data) | ||
|  |                            - BOOST_PYTHON_OFFSETOF(instance_char,storage)); | ||
|  | }; | ||
|  | 
 | ||
|  | }}} // namespace boost::python::object
 | ||
|  | 
 | ||
|  | #endif // INSTANCE_DWA200295_HPP
 |