diff --git a/include/boost/smart_ptr/allocate_shared_array.hpp b/include/boost/smart_ptr/allocate_shared_array.hpp index 23d5046..b1f57da 100644 --- a/include/boost/smart_ptr/allocate_shared_array.hpp +++ b/include/boost/smart_ptr/allocate_shared_array.hpp @@ -8,8 +8,7 @@ Distributed under the Boost Software License, Version 1.0. #ifndef BOOST_SMART_PTR_ALLOCATE_SHARED_ARRAY_HPP #define BOOST_SMART_PTR_ALLOCATE_SHARED_ARRAY_HPP -#include -#include +#include #include #include #include @@ -186,14 +185,15 @@ public: template sp_array_base(const A& other, std::size_t size, type* start) : state_(other, size) { - sp_construct_n(state_.allocator(), start, state_.size()); + boost::alloc_construct_n(state_.allocator(), start, state_.size()); } template sp_array_base(const A& other, std::size_t size, const type* list, std::size_t count, type* start) : state_(other, size) { - sp_construct_n(state_.allocator(), start, state_.size(), list, count); + boost::alloc_construct_n(state_.allocator(), start, state_.size(), + list, count); } T& state() BOOST_SP_NOEXCEPT { @@ -201,7 +201,7 @@ public: } virtual void dispose() BOOST_SP_NOEXCEPT { - sp_destroy_n(state_.allocator(), + boost::alloc_destroy_n(state_.allocator(), sp_array_start(this), state_.size()); } diff --git a/include/boost/smart_ptr/detail/sp_construct.hpp b/include/boost/smart_ptr/detail/sp_construct.hpp deleted file mode 100644 index b33d59f..0000000 --- a/include/boost/smart_ptr/detail/sp_construct.hpp +++ /dev/null @@ -1,208 +0,0 @@ -/* -Copyright 2012-2019 Glen Joseph Fernandes -(glenjofe@gmail.com) - -Distributed under the Boost Software License, Version 1.0. -(http://www.boost.org/LICENSE_1_0.txt) -*/ -#ifndef BOOST_SMART_PTR_DETAIL_SP_CONSTRUCT_HPP -#define BOOST_SMART_PTR_DETAIL_SP_CONSTRUCT_HPP - -#include -#include - -namespace boost { -namespace detail { - -#if !defined(BOOST_NO_CXX11_ALLOCATOR) -template -inline void -sp_destroy(A& a, T* p) -{ - std::allocator_traits::destroy(a, p); -} - -template -inline void -sp_destroy_n(A& a, T* p, std::size_t n) -{ - while (n > 0) { - std::allocator_traits::destroy(a, p + --n); - } -} -#else -template -inline void -sp_destroy(A&, T* p) -{ - p->~T(); -} - -template -inline void -sp_destroy_n(A&, T* p, std::size_t n) -{ - while (n > 0) { - p[--n].~T(); - } -} -#endif - -template -class sp_destroyer { -public: - sp_destroyer(A& a, T* p) BOOST_SP_NOEXCEPT - : a_(a), - p_(p), - n_(0) { } - - ~sp_destroyer() { - sp_destroy_n(a_, p_, n_); - } - - std::size_t& size() BOOST_SP_NOEXCEPT { - return n_; - } - -private: - sp_destroyer(const sp_destroyer&); - sp_destroyer& operator=(const sp_destroyer&); - - A& a_; - T* p_; - std::size_t n_; -}; - -#if !defined(BOOST_NO_CXX11_ALLOCATOR) -template -inline void -sp_construct(A& a, T* p) -{ - std::allocator_traits::construct(a, p); -} - -#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) -#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) -template -inline void -sp_construct(A& a, T* p, U&& u, V&&... v) -{ - std::allocator_traits::construct(a, p, std::forward(u), - std::forward(v)...); -} -#else -template -inline void -sp_construct(A& a, T* p, U&& u) -{ - std::allocator_traits::construct(a, p, std::forward(u)); -} -#endif -#else -template -inline void -sp_construct(A& a, T* p, const U& u) -{ - std::allocator_traits::construct(a, p, u); -} -#endif - -template -inline void -sp_construct_n(A& a, T* p, std::size_t n) -{ - sp_destroyer hold(a, p); - for (std::size_t& i = hold.size(); i < n; ++i) { - std::allocator_traits::construct(a, p + i); - } - hold.size() = 0; -} - -template -inline void -sp_construct_n(A& a, T* p, std::size_t n, const T* l, std::size_t m) -{ - sp_destroyer hold(a, p); - for (std::size_t& i = hold.size(); i < n; ++i) { - std::allocator_traits::construct(a, p + i, l[i % m]); - } - hold.size() = 0; -} -#else -template -inline void -sp_construct(A&, T* p) -{ - ::new(static_cast(p)) T(); -} - -template -inline void -sp_construct(boost::noinit_adaptor&, T* p) -{ - ::new(static_cast(p)) T; -} - -#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) -#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) -template -inline void -sp_construct(A&, T* p, U&& u, V&&... v) -{ - ::new(static_cast(p)) T(std::forward(u), std::forward(v)...); -} -#else -template -inline void -sp_construct(A&, T* p, U&& u) -{ - ::new(static_cast(p)) T(std::forward(u)); -} -#endif -#else -template -inline void -sp_construct(A&, T* p, const U& u) -{ - ::new(static_cast(p)) T(u); -} -#endif - -template -inline void -sp_construct_n(A& a, T* p, std::size_t n) -{ - sp_destroyer hold(a, p); - for (std::size_t& i = hold.size(); i < n; ++i) { - ::new(static_cast(p + i)) T(); - } - hold.size() = 0; -} - -template -inline void -sp_construct_n(boost::noinit_adaptor& a, T* p, std::size_t n) -{ - sp_destroyer, T> hold(a, p); - for (std::size_t& i = hold.size(); i < n; ++i) { - ::new(static_cast(p + i)) T; - } - hold.size() = 0; -} - -template -inline void -sp_construct_n(A& a, T* p, std::size_t n, const T* l, std::size_t m) -{ - sp_destroyer hold(a, p); - for (std::size_t& i = hold.size(); i < n; ++i) { - ::new(static_cast(p + i)) T(l[i % m]); - } - hold.size() = 0; -} -#endif - -} /* detail */ -} /* boost */ - -#endif