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