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