diff options
author | Abseil Team <absl-team@google.com> | 2023-05-26 00:28:00 -0700 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2023-05-26 00:28:44 -0700 |
commit | 0f718c568b448005bcb6718e7c0f5b6420ace413 (patch) | |
tree | a81522c7cdb19b1469cb873df72a07789305620e /absl/container/fixed_array.h | |
parent | 88cc63ef739d83277b492e881be72e9069fcb1fe (diff) | |
download | abseil-0f718c568b448005bcb6718e7c0f5b6420ace413.tar.gz abseil-0f718c568b448005bcb6718e7c0f5b6420ace413.tar.bz2 abseil-0f718c568b448005bcb6718e7c0f5b6420ace413.zip |
Add support for stateful allocators to absl::FixedArray.
PiperOrigin-RevId: 535534819
Change-Id: Iccf8da3e0b084131e4c0dba205f3e190d3a66f4e
Diffstat (limited to 'absl/container/fixed_array.h')
-rw-r--r-- | absl/container/fixed_array.h | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/absl/container/fixed_array.h b/absl/container/fixed_array.h index e99137a4..9f1c813d 100644 --- a/absl/container/fixed_array.h +++ b/absl/container/fixed_array.h @@ -117,14 +117,20 @@ class FixedArray { (N == kFixedArrayUseDefault ? kInlineBytesDefault / sizeof(value_type) : static_cast<size_type>(N)); - FixedArray( - const FixedArray& other, - const allocator_type& a = allocator_type()) noexcept(NoexceptCopyable()) + FixedArray(const FixedArray& other) noexcept(NoexceptCopyable()) + : FixedArray(other, + AllocatorTraits::select_on_container_copy_construction( + other.storage_.alloc())) {} + + FixedArray(const FixedArray& other, + const allocator_type& a) noexcept(NoexceptCopyable()) : FixedArray(other.begin(), other.end(), a) {} - FixedArray( - FixedArray&& other, - const allocator_type& a = allocator_type()) noexcept(NoexceptMovable()) + FixedArray(FixedArray&& other) noexcept(NoexceptMovable()) + : FixedArray(std::move(other), other.storage_.alloc()) {} + + FixedArray(FixedArray&& other, + const allocator_type& a) noexcept(NoexceptMovable()) : FixedArray(std::make_move_iterator(other.begin()), std::make_move_iterator(other.end()), a) {} @@ -480,6 +486,9 @@ class FixedArray { StorageElement* begin() const { return data_; } StorageElement* end() const { return begin() + size(); } allocator_type& alloc() { return size_alloc_.template get<1>(); } + const allocator_type& alloc() const { + return size_alloc_.template get<1>(); + } private: static bool UsingInlinedStorage(size_type n) { |