diff options
Diffstat (limited to 'contrib/llvm-project/libcxx/include/__memory/allocation_guard.h')
-rw-r--r-- | contrib/llvm-project/libcxx/include/__memory/allocation_guard.h | 98 |
1 files changed, 45 insertions, 53 deletions
diff --git a/contrib/llvm-project/libcxx/include/__memory/allocation_guard.h b/contrib/llvm-project/libcxx/include/__memory/allocation_guard.h index c36ce15397c0..cb870af7be67 100644 --- a/contrib/llvm-project/libcxx/include/__memory/allocation_guard.h +++ b/contrib/llvm-project/libcxx/include/__memory/allocation_guard.h @@ -44,69 +44,61 @@ _LIBCPP_BEGIN_NAMESPACE_STD // // This is similar to a unique_ptr, except it's easier to use with a // custom allocator. -template<class _Alloc> +template <class _Alloc> struct __allocation_guard { - using _Pointer = typename allocator_traits<_Alloc>::pointer; - using _Size = typename allocator_traits<_Alloc>::size_type; - - template<class _AllocT> // we perform the allocator conversion inside the constructor - _LIBCPP_HIDE_FROM_ABI - explicit __allocation_guard(_AllocT __alloc, _Size __n) - : __alloc_(std::move(__alloc)) - , __n_(__n) - , __ptr_(allocator_traits<_Alloc>::allocate(__alloc_, __n_)) // initialization order is important - { } - - _LIBCPP_HIDE_FROM_ABI - ~__allocation_guard() _NOEXCEPT { - __destroy(); - } - - _LIBCPP_HIDE_FROM_ABI __allocation_guard(const __allocation_guard&) = delete; - _LIBCPP_HIDE_FROM_ABI __allocation_guard(__allocation_guard&& __other) _NOEXCEPT - : __alloc_(std::move(__other.__alloc_)) - , __n_(__other.__n_) - , __ptr_(__other.__ptr_) { + using _Pointer = typename allocator_traits<_Alloc>::pointer; + using _Size = typename allocator_traits<_Alloc>::size_type; + + template <class _AllocT> // we perform the allocator conversion inside the constructor + _LIBCPP_HIDE_FROM_ABI explicit __allocation_guard(_AllocT __alloc, _Size __n) + : __alloc_(std::move(__alloc)), + __n_(__n), + __ptr_(allocator_traits<_Alloc>::allocate(__alloc_, __n_)) // initialization order is important + {} + + _LIBCPP_HIDE_FROM_ABI ~__allocation_guard() _NOEXCEPT { __destroy(); } + + _LIBCPP_HIDE_FROM_ABI __allocation_guard(const __allocation_guard&) = delete; + _LIBCPP_HIDE_FROM_ABI __allocation_guard(__allocation_guard&& __other) _NOEXCEPT + : __alloc_(std::move(__other.__alloc_)), + __n_(__other.__n_), + __ptr_(__other.__ptr_) { + __other.__ptr_ = nullptr; + } + + _LIBCPP_HIDE_FROM_ABI __allocation_guard& operator=(const __allocation_guard& __other) = delete; + _LIBCPP_HIDE_FROM_ABI __allocation_guard& operator=(__allocation_guard&& __other) _NOEXCEPT { + if (std::addressof(__other) != this) { + __destroy(); + + __alloc_ = std::move(__other.__alloc_); + __n_ = __other.__n_; + __ptr_ = __other.__ptr_; __other.__ptr_ = nullptr; } - _LIBCPP_HIDE_FROM_ABI __allocation_guard& operator=(const __allocation_guard& __other) = delete; - _LIBCPP_HIDE_FROM_ABI __allocation_guard& operator=(__allocation_guard&& __other) _NOEXCEPT { - if (std::addressof(__other) != this) { - __destroy(); + return *this; + } - __alloc_ = std::move(__other.__alloc_); - __n_ = __other.__n_; - __ptr_ = __other.__ptr_; - __other.__ptr_ = nullptr; - } - - return *this; - } + _LIBCPP_HIDE_FROM_ABI _Pointer + __release_ptr() _NOEXCEPT { // not called __release() because it's a keyword in objective-c++ + _Pointer __tmp = __ptr_; + __ptr_ = nullptr; + return __tmp; + } - _LIBCPP_HIDE_FROM_ABI - _Pointer __release_ptr() _NOEXCEPT { // not called __release() because it's a keyword in objective-c++ - _Pointer __tmp = __ptr_; - __ptr_ = nullptr; - return __tmp; - } - - _LIBCPP_HIDE_FROM_ABI - _Pointer __get() const _NOEXCEPT { - return __ptr_; - } + _LIBCPP_HIDE_FROM_ABI _Pointer __get() const _NOEXCEPT { return __ptr_; } private: - _LIBCPP_HIDE_FROM_ABI - void __destroy() _NOEXCEPT { - if (__ptr_ != nullptr) { - allocator_traits<_Alloc>::deallocate(__alloc_, __ptr_, __n_); - } + _LIBCPP_HIDE_FROM_ABI void __destroy() _NOEXCEPT { + if (__ptr_ != nullptr) { + allocator_traits<_Alloc>::deallocate(__alloc_, __ptr_, __n_); } + } - _Alloc __alloc_; - _Size __n_; - _Pointer __ptr_; + _Alloc __alloc_; + _Size __n_; + _Pointer __ptr_; }; _LIBCPP_END_NAMESPACE_STD |