6 #ifndef PIVX_UNORDERED_LRU_CACHE_H
7 #define PIVX_UNORDERED_LRU_CACHE_H
12 #include <unordered_map>
15 template<
typename Key,
typename Value,
typename Hasher,
size_t MaxSize = 0,
size_t TruncateThreshold = 0>
19 typedef std::unordered_map<Key, std::pair<Value, int64_t>, Hasher>
MapType;
31 assert(_maxSize != 0);
36 template<
typename Value2>
43 it->second.first = std::forward<Value2>(v);
54 void insert(
const Key& key,
const Value& v)
59 bool get(
const Key& key, Value& value)
64 value = it->second.first;
93 typedef typename MapType::iterator Iterator;
99 std::vector<Iterator> vec;
102 vec.emplace_back(it);
105 std::sort(vec.begin(), vec.end(), [](
const Iterator& it1,
const Iterator& it2) {
106 return it1->second.second > it2->second.second;
109 for (
size_t i =
maxSize; i < vec.size(); i++) {
unordered_lru_cache(size_t _maxSize=MaxSize, size_t _truncateThreshold=TruncateThreshold)
bool get(const Key &key, Value &value)
bool exists(const Key &key)
void _emplace(const Key &key, Value2 &&v)
void erase(const Key &key)
void emplace(const Key &key, Value &&v)
std::unordered_map< Key, std::pair< Value, int64_t >, Hasher > MapType
void insert(const Key &key, const Value &v)
void truncate_if_needed()