diff options
author | ivanmautin <ivanmautin@yandex-team.com> | 2024-05-06 11:33:58 +0300 |
---|---|---|
committer | ivanmautin <ivanmautin@yandex-team.com> | 2024-05-06 11:45:11 +0300 |
commit | db9340f74578f02054d56b136a9faccfe7e29eb4 (patch) | |
tree | 22247474ed2f686c3e8432bfd85661ede5cfc810 /library/cpp/cache/cache.h | |
parent | 1b5ecadf895a68f8dc21bb0901b78fa1a9b6e347 (diff) | |
download | ydb-db9340f74578f02054d56b136a9faccfe7e29eb4.tar.gz |
Add TotalSize and Size methods
Раньше метод GetTotalSize() был только в TLRUList, хотя TSizeProvider присутствовал также в TLRUList
Добавил GetTotalSize() во все листы (в том числе TLWList), а также метод GetSize(), который возвращает текущее количество
Также добавил эти методы в сами TCache и TThreadSafeCache
c103617d7259841e1c273cadd8dbf0bb019e52dc
Diffstat (limited to 'library/cpp/cache/cache.h')
-rw-r--r-- | library/cpp/cache/cache.h | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/library/cpp/cache/cache.h b/library/cpp/cache/cache.h index ee65c30d41..9fe98d5366 100644 --- a/library/cpp/cache/cache.h +++ b/library/cpp/cache/cache.h @@ -124,11 +124,11 @@ public: List.PushBack(item); } - size_t GetSize() const { + [[nodiscard]] size_t GetSize() const { return ItemsAmount; } - size_t GetTotalSize() const { + [[nodiscard]] size_t GetTotalSize() const { return TotalSize; } @@ -157,7 +157,8 @@ public: TLFUList(size_t maxSize, const TSizeProvider& sizeProvider = TSizeProvider()) : List() , SizeProvider(sizeProvider) - , ListSize(0) + , ItemsAmount(0) + , TotalSize(0) , MaxSize(maxSize) { } @@ -228,14 +229,15 @@ public: public: TItem* Insert(TItem* item) { List.PushBack(item); // give a chance for promotion - ListSize += SizeProvider(item->Value); + ++ItemsAmount; + TotalSize += SizeProvider(item->Value); return RemoveIfOverflown(); } TItem* RemoveIfOverflown() { TItem* deleted = nullptr; - if (ListSize > MaxSize) { + if (TotalSize > MaxSize && ItemsAmount > 1) { deleted = GetLeastFrequentlyUsed(); Erase(deleted); } @@ -250,7 +252,8 @@ public: void Erase(TItem* item) { item->Unlink(); - ListSize -= SizeProvider(item->Value); + --ItemsAmount; + TotalSize -= SizeProvider(item->Value); } void Promote(TItem* item) { @@ -262,8 +265,12 @@ public: item->LinkBefore(&*it); } - size_t GetSize() const { - return ListSize; + [[nodiscard]] size_t GetSize() const { + return ItemsAmount; + } + + [[nodiscard]] size_t GetTotalSize() const { + return TotalSize; } size_t GetMaxSize() const { @@ -280,7 +287,8 @@ private: typedef TIntrusiveList<TItem> TListType; TListType List; TSizeProvider SizeProvider; - size_t ListSize; + size_t ItemsAmount; + size_t TotalSize; size_t MaxSize; }; @@ -413,6 +421,10 @@ public: return Size; } + [[nodiscard]] size_t GetTotalSize() const { + return Size; + } + size_t GetMaxSize() const { return MaxSize; } @@ -515,10 +527,14 @@ public: Clear(); } - size_t Size() const { + [[nodiscard]] size_t Size() const { return Index.size(); } + [[nodiscard]] size_t TotalSize() const { + return List.GetTotalSize(); + } + TIterator Begin() const { return TIterator(Index.begin()); } |