aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/libcxx/include/__memory/allocation_guard.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm-project/libcxx/include/__memory/allocation_guard.h')
-rw-r--r--contrib/llvm-project/libcxx/include/__memory/allocation_guard.h98
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