18template <
typename K,
typename V>
22 using Entry = std::pair<const K, V>;
23 using List = std::list<Entry>;
24 using Map = std::map<K, typename List::iterator>;
41 while (entries_list.size() > max_size)
43 const auto& least_recent_entry = entries_list.back();
44 iter_map.erase(least_recent_entry.first);
45 entries_list.pop_back();
50 LRU(
size_t max_size) : max_size(max_size) {}
54 return iter_map.size();
70 return entries_list.begin();
75 return entries_list.end();
80 return entries_list.begin();
85 return entries_list.end();
90 const auto it = iter_map.find(k);
91 if (it != iter_map.end())
96 return entries_list.end();
101 const auto it = iter_map.find(k);
102 return it != iter_map.end();
108 entries_list.splice(entries_list.begin(), entries_list, list_it);
113 auto it = iter_map.find(k);
114 if (it != iter_map.end())
122 entries_list.push_front(std::make_pair(k, std::forward<V>(v)));
123 const auto list_it = entries_list.begin();
124 iter_map.emplace_hint(it, k, list_it);
128 return entries_list.begin();
139 entries_list.clear();
Iterator begin()
Definition lru.h:68
LRU(size_t max_size)
Definition lru.h:50
Iterator end()
Definition lru.h:73
std::pair< const K, V > Entry
Definition lru.h:22
typename List::iterator Iterator
Definition lru.h:25
typename List::const_iterator ConstIterator
Definition lru.h:26
ConstIterator begin() const
Definition lru.h:78
size_t size() const
Definition lru.h:52
bool contains(const K &k) const
Definition lru.h:99
std::map< K, typename List::iterator > Map
Definition lru.h:24
void set_max_size(size_t ms)
Definition lru.h:57
V & operator[](const K &k)
Definition lru.h:131
ConstIterator end() const
Definition lru.h:83
Iterator insert(const K &k, V &&v)
Definition lru.h:111
void clear()
Definition lru.h:137
std::list< Entry > List
Definition lru.h:23
void promote(const Iterator &list_it)
Definition lru.h:106
size_t get_max_size() const
Definition lru.h:63
Iterator find(const K &k)
Definition lru.h:88