17template <
typename K,
typename V>
21 using Entry = std::pair<const K, V>;
22 using List = std::list<Entry>;
23 using Map = std::map<K, typename List::iterator>;
40 while (entries_list.size() > max_size)
42 const auto& least_recent_entry = entries_list.back();
43 iter_map.erase(least_recent_entry.first);
44 entries_list.pop_back();
49 LRU(
size_t max_size) : max_size(max_size) {}
53 return iter_map.size();
69 return entries_list.begin();
74 return entries_list.end();
79 return entries_list.begin();
84 return entries_list.end();
89 const auto it = iter_map.find(k);
90 if (it != iter_map.end())
95 return entries_list.end();
100 const auto it = iter_map.find(k);
101 return it != iter_map.end();
107 entries_list.splice(entries_list.begin(), entries_list, list_it);
112 auto it = iter_map.find(k);
113 if (it != iter_map.end())
121 entries_list.push_front(std::make_pair(k, std::forward<V>(v)));
122 const auto list_it = entries_list.begin();
123 iter_map.emplace_hint(it, k, list_it);
127 return entries_list.begin();
138 entries_list.clear();
Iterator begin()
Definition lru.h:67
LRU(size_t max_size)
Definition lru.h:49
Iterator end()
Definition lru.h:72
std::pair< const K, V > Entry
Definition lru.h:21
typename List::iterator Iterator
Definition lru.h:24
typename List::const_iterator ConstIterator
Definition lru.h:25
ConstIterator begin() const
Definition lru.h:77
size_t size() const
Definition lru.h:51
bool contains(const K &k) const
Definition lru.h:98
std::map< K, typename List::iterator > Map
Definition lru.h:23
void set_max_size(size_t ms)
Definition lru.h:56
V & operator[](const K &k)
Definition lru.h:130
ConstIterator end() const
Definition lru.h:82
Iterator insert(const K &k, V &&v)
Definition lru.h:110
void clear()
Definition lru.h:136
std::list< Entry > List
Definition lru.h:22
void promote(const Iterator &list_it)
Definition lru.h:105
size_t get_max_size() const
Definition lru.h:62
Iterator find(const K &k)
Definition lru.h:87