aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/cache/cache.h
diff options
context:
space:
mode:
authorivanmautin <ivanmautin@yandex-team.com>2024-05-06 11:33:58 +0300
committerivanmautin <ivanmautin@yandex-team.com>2024-05-06 11:45:11 +0300
commitdb9340f74578f02054d56b136a9faccfe7e29eb4 (patch)
tree22247474ed2f686c3e8432bfd85661ede5cfc810 /library/cpp/cache/cache.h
parent1b5ecadf895a68f8dc21bb0901b78fa1a9b6e347 (diff)
downloadydb-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.h36
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());
}