21#include <unordered_map>
42template<
typename Key,
typename Value>
46 using SizeFunc = std::function<size_t(
const Value&)>;
47 using EvictFunc = std::function<void(
const Key&, Value&&)>;
73 void put(
const Key& key, Value value)
75 std::lock_guard<std::mutex> lock(
mutex_);
77 auto it =
map_.find(key);
82 list_.erase(it->second);
87 list_.emplace_front(key, std::move(value));
100 Value*
get(
const Key& key)
102 std::lock_guard<std::mutex> lock(
mutex_);
104 auto it =
map_.find(key);
110 return &(it->second->second);
118 std::lock_guard<std::mutex> lock(
mutex_);
119 return map_.find(key) !=
map_.end();
127 std::lock_guard<std::mutex> lock(
mutex_);
128 auto it =
map_.find(key);
133 list_.erase(it->second);
143 std::lock_guard<std::mutex> lock(
mutex_);
151 std::lock_guard<std::mutex> lock(
mutex_);
157 std::lock_guard<std::mutex> lock(
mutex_);
168 std::lock_guard<std::mutex> lock(
mutex_);
178 auto& back =
list_.back();
179 size_t entrySize =
sizeFunc_(back.second);
181 evictFunc_(back.first, std::move(back.second));
182 map_.erase(back.first);
195 std::unordered_map<Key, typename ListType::iterator>
map_;
size_t size() const
Definition LRUCache.h:149
bool erase(const Key &key)
Remove a specific entry.
Definition LRUCache.h:125
void setMaxBytes(size_t maxBytes)
Definition LRUCache.h:166
LRUCache & operator=(LRUCache &&)=default
std::mutex mutex_
Definition LRUCache.h:196
std::function< void(const Key &, Value &&)> EvictFunc
Definition LRUCache.h:47
LRUCache & operator=(const LRUCache &)=delete
size_t currentBytes() const
Definition LRUCache.h:155
size_t maxBytes() const
Definition LRUCache.h:161
size_t maxBytes_
Definition LRUCache.h:190
LRUCache(const LRUCache &)=delete
size_t currentBytes_
Definition LRUCache.h:191
SizeFunc sizeFunc_
Definition LRUCache.h:192
EvictFunc evictFunc_
Definition LRUCache.h:193
std::function< size_t(const Value &)> SizeFunc
Definition LRUCache.h:46
std::list< std::pair< Key, Value > > ListType
Definition LRUCache.h:188
LRUCache(size_t maxBytes, SizeFunc sizeFunc, EvictFunc evictFunc=nullptr)
Construct an LRU cache.
Definition LRUCache.h:55
LRUCache(LRUCache &&)=default
void evictWhileOverCapacity()
Definition LRUCache.h:174
void put(const Key &key, Value value)
Insert or update an entry.
Definition LRUCache.h:73
Value * get(const Key &key)
Look up an entry.
Definition LRUCache.h:100
bool contains(const Key &key) const
Check if a key exists without promoting it in the LRU order.
Definition LRUCache.h:116
void clear()
Clear all entries.
Definition LRUCache.h:141
std::unordered_map< Key, typename ListType::iterator > map_
Definition LRUCache.h:195
ListType list_
Definition LRUCache.h:194
ResWindow.
Definition CompressedChunkCache.h:36