update boost & add container lib (#204)
* remove boost headers * boost 1.78
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
# define INSTANCE_DWA200295_HPP
|
||||
|
||||
# include <boost/python/detail/prefix.hpp>
|
||||
|
||||
# include <boost/python/detail/type_traits.hpp>
|
||||
# include <cstddef>
|
||||
|
||||
namespace boost { namespace python
|
||||
@@ -28,7 +28,7 @@ struct instance
|
||||
typedef typename boost::python::detail::type_with_alignment<
|
||||
boost::python::detail::alignment_of<Data>::value
|
||||
>::type align_t;
|
||||
|
||||
|
||||
union
|
||||
{
|
||||
align_t align;
|
||||
@@ -41,9 +41,10 @@ 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));
|
||||
BOOST_STATIC_CONSTANT(std::size_t,
|
||||
value = sizeof(instance_data) -
|
||||
BOOST_PYTHON_OFFSETOF(instance_char,storage) +
|
||||
boost::python::detail::alignment_of<Data>::value);
|
||||
};
|
||||
|
||||
}}} // namespace boost::python::object
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
# include <boost/type.hpp>
|
||||
|
||||
# include <boost/detail/iterator.hpp>
|
||||
# include <iterator>
|
||||
|
||||
namespace boost { namespace python { namespace objects {
|
||||
|
||||
@@ -42,7 +42,7 @@ struct iterator_range
|
||||
{
|
||||
iterator_range(object sequence, Iterator start, Iterator finish);
|
||||
|
||||
typedef boost::detail::iterator_traits<Iterator> traits_t;
|
||||
typedef std::iterator_traits<Iterator> traits_t;
|
||||
|
||||
struct next
|
||||
{
|
||||
|
||||
@@ -89,8 +89,9 @@ struct make_holder<N>
|
||||
BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(1, N, t, a))
|
||||
{
|
||||
typedef instance<Holder> instance_t;
|
||||
|
||||
void* memory = Holder::allocate(p, offsetof(instance_t, storage), sizeof(Holder));
|
||||
|
||||
void* memory = Holder::allocate(p, offsetof(instance_t, storage), sizeof(Holder),
|
||||
boost::python::detail::alignment_of<Holder>::value);
|
||||
try {
|
||||
(new (memory) Holder(
|
||||
p BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_DO_FORWARD_ARG, nil)))->install(p);
|
||||
|
||||
@@ -43,11 +43,14 @@ struct make_instance_impl
|
||||
|
||||
// construct the new C++ object and install the pointer
|
||||
// in the Python object.
|
||||
Derived::construct(&instance->storage, (PyObject*)instance, x)->install(raw_result);
|
||||
Holder *holder =Derived::construct(instance->storage.bytes, (PyObject*)instance, x);
|
||||
holder->install(raw_result);
|
||||
|
||||
// Note the position of the internally-stored Holder,
|
||||
// for the sake of destruction
|
||||
Py_SIZE(instance) = offsetof(instance_t, storage);
|
||||
const size_t offset = reinterpret_cast<size_t>(holder) -
|
||||
reinterpret_cast<size_t>(instance->storage.bytes) + offsetof(instance_t, storage);
|
||||
Py_SET_SIZE(instance, offset);
|
||||
|
||||
// Release ownership of the python object
|
||||
protect.cancel();
|
||||
@@ -69,7 +72,10 @@ struct make_instance
|
||||
|
||||
static inline Holder* construct(void* storage, PyObject* instance, reference_wrapper<T const> x)
|
||||
{
|
||||
return new (storage) Holder(instance, x);
|
||||
size_t allocated = objects::additional_instance_size<Holder>::value;
|
||||
void* aligned_storage = ::boost::alignment::align(boost::python::detail::alignment_of<Holder>::value,
|
||||
sizeof(Holder), storage, allocated);
|
||||
return new (aligned_storage) Holder(instance, x);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user