From 20c087a795638e904792c471d8de158cc97c208a Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Wed, 3 May 2023 09:56:12 -0700 Subject: Add lifetimebound attribute to some Abseil containers PiperOrigin-RevId: 529119690 Change-Id: If585274c409e2a344c8d60759da6f8f990023d29 --- absl/container/internal/raw_hash_map.h | 53 ++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 18 deletions(-) (limited to 'absl/container/internal/raw_hash_map.h') diff --git a/absl/container/internal/raw_hash_map.h b/absl/container/internal/raw_hash_map.h index c7df2efc..2d5a8710 100644 --- a/absl/container/internal/raw_hash_map.h +++ b/absl/container/internal/raw_hash_map.h @@ -71,43 +71,51 @@ class raw_hash_map : public raw_hash_set { // m.insert_or_assign(n, n); template - std::pair insert_or_assign(key_arg&& k, V&& v) { + std::pair insert_or_assign(key_arg&& k, V&& v) + ABSL_ATTRIBUTE_LIFETIME_BOUND { return insert_or_assign_impl(std::forward(k), std::forward(v)); } template - std::pair insert_or_assign(key_arg&& k, const V& v) { + std::pair insert_or_assign(key_arg&& k, const V& v) + ABSL_ATTRIBUTE_LIFETIME_BOUND { return insert_or_assign_impl(std::forward(k), v); } template - std::pair insert_or_assign(const key_arg& k, V&& v) { + std::pair insert_or_assign(const key_arg& k, V&& v) + ABSL_ATTRIBUTE_LIFETIME_BOUND { return insert_or_assign_impl(k, std::forward(v)); } template - std::pair insert_or_assign(const key_arg& k, const V& v) { + std::pair insert_or_assign(const key_arg& k, const V& v) + ABSL_ATTRIBUTE_LIFETIME_BOUND { return insert_or_assign_impl(k, v); } template - iterator insert_or_assign(const_iterator, key_arg&& k, V&& v) { + iterator insert_or_assign(const_iterator, key_arg&& k, + V&& v) ABSL_ATTRIBUTE_LIFETIME_BOUND { return insert_or_assign(std::forward(k), std::forward(v)).first; } template - iterator insert_or_assign(const_iterator, key_arg&& k, const V& v) { + iterator insert_or_assign(const_iterator, key_arg&& k, + const V& v) ABSL_ATTRIBUTE_LIFETIME_BOUND { return insert_or_assign(std::forward(k), v).first; } template - iterator insert_or_assign(const_iterator, const key_arg& k, V&& v) { + iterator insert_or_assign(const_iterator, const key_arg& k, + V&& v) ABSL_ATTRIBUTE_LIFETIME_BOUND { return insert_or_assign(k, std::forward(v)).first; } template - iterator insert_or_assign(const_iterator, const key_arg& k, const V& v) { + iterator insert_or_assign(const_iterator, const key_arg& k, + const V& v) ABSL_ATTRIBUTE_LIFETIME_BOUND { return insert_or_assign(k, v).first; } @@ -118,29 +126,33 @@ class raw_hash_map : public raw_hash_set { typename std::enable_if< !std::is_convertible::value, int>::type = 0, K* = nullptr> - std::pair try_emplace(key_arg&& k, Args&&... args) { + std::pair try_emplace(key_arg&& k, Args&&... args) + ABSL_ATTRIBUTE_LIFETIME_BOUND { return try_emplace_impl(std::forward(k), std::forward(args)...); } template ::value, int>::type = 0> - std::pair try_emplace(const key_arg& k, Args&&... args) { + std::pair try_emplace(const key_arg& k, Args&&... args) + ABSL_ATTRIBUTE_LIFETIME_BOUND { return try_emplace_impl(k, std::forward(args)...); } template - iterator try_emplace(const_iterator, key_arg&& k, Args&&... args) { + iterator try_emplace(const_iterator, key_arg&& k, + Args&&... args) ABSL_ATTRIBUTE_LIFETIME_BOUND { return try_emplace(std::forward(k), std::forward(args)...).first; } template - iterator try_emplace(const_iterator, const key_arg& k, Args&&... args) { + iterator try_emplace(const_iterator, const key_arg& k, + Args&&... args) ABSL_ATTRIBUTE_LIFETIME_BOUND { return try_emplace(k, std::forward(args)...).first; } template - MappedReference

at(const key_arg& key) { + MappedReference

at(const key_arg& key) ABSL_ATTRIBUTE_LIFETIME_BOUND { auto it = this->find(key); if (it == this->end()) { base_internal::ThrowStdOutOfRange( @@ -150,7 +162,8 @@ class raw_hash_map : public raw_hash_set { } template - MappedConstReference

at(const key_arg& key) const { + MappedConstReference

at(const key_arg& key) const + ABSL_ATTRIBUTE_LIFETIME_BOUND { auto it = this->find(key); if (it == this->end()) { base_internal::ThrowStdOutOfRange( @@ -160,18 +173,21 @@ class raw_hash_map : public raw_hash_set { } template - MappedReference

operator[](key_arg&& key) { + MappedReference

operator[](key_arg&& key) + ABSL_ATTRIBUTE_LIFETIME_BOUND { return Policy::value(&*try_emplace(std::forward(key)).first); } template - MappedReference

operator[](const key_arg& key) { + MappedReference

operator[](const key_arg& key) + ABSL_ATTRIBUTE_LIFETIME_BOUND { return Policy::value(&*try_emplace(key).first); } private: template - std::pair insert_or_assign_impl(K&& k, V&& v) { + std::pair insert_or_assign_impl(K&& k, V&& v) + ABSL_ATTRIBUTE_LIFETIME_BOUND { auto res = this->find_or_prepare_insert(k); if (res.second) this->emplace_at(res.first, std::forward(k), std::forward(v)); @@ -181,7 +197,8 @@ class raw_hash_map : public raw_hash_set { } template - std::pair try_emplace_impl(K&& k, Args&&... args) { + std::pair try_emplace_impl(K&& k, Args&&... args) + ABSL_ATTRIBUTE_LIFETIME_BOUND { auto res = this->find_or_prepare_insert(k); if (res.second) this->emplace_at(res.first, std::piecewise_construct, -- cgit v1.2.3