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
|