1010#include < type_traits>
1111#include < vector>
1212
13+ #include < userver/compiler/impl/lifetime.hpp>
14+
1315USERVER_NAMESPACE_BEGIN
1416
1517namespace utils {
@@ -86,31 +88,31 @@ class AnyStorage final {
8688
8789 // / @returns Stored data.
8890 template <typename Data>
89- const Data& Get (const AnyStorageDataTag<StorageTag, Data>& tag) const ;
91+ const Data& Get (const AnyStorageDataTag<StorageTag, Data>& tag) const USERVER_IMPL_LIFETIME_BOUND ;
9092
9193 // / @returns Stored data.
9294 // / @throws std::runtime_error if no data was stored
9395 template <typename Data>
94- Data& Get (const AnyStorageDataTag<StorageTag, Data>& tag);
96+ Data& Get (const AnyStorageDataTag<StorageTag, Data>& tag) USERVER_IMPL_LIFETIME_BOUND ;
9597
9698 // / @brief Stores the data.
9799 template <typename Data>
98- Data& Set (AnyStorageDataTag<StorageTag, Data> tag, Data data);
100+ Data& Set (AnyStorageDataTag<StorageTag, Data> tag, Data data) USERVER_IMPL_LIFETIME_BOUND ;
99101
100102 // / @brief Emplaces the data. The data is rewritten if
101103 // / already stored.
102104 template <typename Data, typename ... Args>
103- Data& Emplace (const AnyStorageDataTag<StorageTag, Data>& tag, Args&&... args);
105+ Data& Emplace (const AnyStorageDataTag<StorageTag, Data>& tag, Args&&... args) USERVER_IMPL_LIFETIME_BOUND ;
104106
105107 // / @returns Pointer to stored data or nullptr if
106108 // / no data is found.
107109 template <typename Data>
108- Data* GetOptional (const AnyStorageDataTag<StorageTag, Data>& tag) noexcept ;
110+ Data* GetOptional (const AnyStorageDataTag<StorageTag, Data>& tag) noexcept USERVER_IMPL_LIFETIME_BOUND ;
109111
110112 // / @returns Pointer to stored data or nullptr if
111113 // / no data found.
112114 template <typename Data>
113- const Data* GetOptional (const AnyStorageDataTag<StorageTag, Data>& tag) const noexcept ;
115+ const Data* GetOptional (const AnyStorageDataTag<StorageTag, Data>& tag) const noexcept USERVER_IMPL_LIFETIME_BOUND ;
114116
115117 // / @brief Erase data.
116118 template <typename Data>
@@ -139,7 +141,7 @@ any_storage::impl::Offset AnyStorage<StorageTag>::CalcOffset() noexcept {
139141
140142template <typename StorageTag>
141143AnyStorage<StorageTag>::AnyStorage()
142- : raw_data_(new std::byte[CalcOffset() + sizeof (AllocRecord) * any_storage::impl::count<StorageTag>])
144+ : raw_data_(new std::byte[CalcOffset() + ( sizeof (AllocRecord) * any_storage::impl::count<StorageTag>) ])
143145{
144146 static_assert (std::is_trivial_v<AllocRecord>);
145147
@@ -184,7 +186,8 @@ void AnyStorage<StorageTag>::Destroy() noexcept {
184186
185187template <typename StorageTag>
186188template <typename Data>
187- Data& AnyStorage<StorageTag>::Set(const AnyStorageDataTag<StorageTag, Data> tag, Data data) {
189+ Data& AnyStorage<StorageTag>::Set(const AnyStorageDataTag<StorageTag, Data> tag, Data data)
190+ USERVER_IMPL_LIFETIME_BOUND {
188191 auto number = tag.number_ ;
189192 if (!GetRecords ()[number].deleter ) {
190193 return Emplace (tag, std::move (data));
@@ -196,7 +199,8 @@ Data& AnyStorage<StorageTag>::Set(const AnyStorageDataTag<StorageTag, Data> tag,
196199
197200template <typename StorageTag>
198201template <typename Data, typename ... Args>
199- Data& AnyStorage<StorageTag>::Emplace(const AnyStorageDataTag<StorageTag, Data>& tag, Args&&... args) {
202+ Data& AnyStorage<StorageTag>::Emplace(const AnyStorageDataTag<StorageTag, Data>& tag, Args&&... args)
203+ USERVER_IMPL_LIFETIME_BOUND {
200204 auto number = tag.number_ ;
201205 auto & record = GetRecords ()[number];
202206 if (record.deleter ) {
@@ -211,7 +215,7 @@ Data& AnyStorage<StorageTag>::Emplace(const AnyStorageDataTag<StorageTag, Data>&
211215
212216template <typename StorageTag>
213217template <typename Data>
214- Data& AnyStorage<StorageTag>::Get(const AnyStorageDataTag<StorageTag, Data>& tag) {
218+ Data& AnyStorage<StorageTag>::Get(const AnyStorageDataTag<StorageTag, Data>& tag) USERVER_IMPL_LIFETIME_BOUND {
215219 auto ptr = GetOptional (tag);
216220 if (ptr) {
217221 return *ptr;
@@ -221,14 +225,16 @@ Data& AnyStorage<StorageTag>::Get(const AnyStorageDataTag<StorageTag, Data>& tag
221225
222226template <typename StorageTag>
223227template <typename Data>
224- const Data& AnyStorage<StorageTag>::Get(const AnyStorageDataTag<StorageTag, Data>& tag) const {
228+ const Data& AnyStorage<StorageTag>::Get(const AnyStorageDataTag<StorageTag, Data>& tag
229+ ) const USERVER_IMPL_LIFETIME_BOUND {
225230 // NOLINTNEXTLINE(cppcoreguidelines-pro-type-const-cast)
226231 return const_cast <AnyStorage<StorageTag>*>(this )->Get <Data>(tag);
227232}
228233
229234template <typename StorageTag>
230235template <typename Data>
231- Data* AnyStorage<StorageTag>::GetOptional(const AnyStorageDataTag<StorageTag, Data>& tag) noexcept {
236+ Data* AnyStorage<StorageTag>::GetOptional(const AnyStorageDataTag<StorageTag, Data>& tag
237+ ) noexcept USERVER_IMPL_LIFETIME_BOUND {
232238 auto number = tag.number_ ;
233239 auto offset = tag.offset_ ;
234240 if (!GetRecords ()[number].deleter ) {
@@ -239,7 +245,8 @@ Data* AnyStorage<StorageTag>::GetOptional(const AnyStorageDataTag<StorageTag, Da
239245
240246template <typename StorageTag>
241247template <typename Data>
242- const Data* AnyStorage<StorageTag>::GetOptional(const AnyStorageDataTag<StorageTag, Data>& tag) const noexcept {
248+ const Data* AnyStorage<StorageTag>::GetOptional(const AnyStorageDataTag<StorageTag, Data>& tag
249+ ) const noexcept USERVER_IMPL_LIFETIME_BOUND {
243250 // NOLINTNEXTLINE(cppcoreguidelines-pro-type-const-cast)
244251 return const_cast <AnyStorage*>(this )->GetOptional <Data>(tag);
245252}
0 commit comments