8 #ifndef _LRUCACHE_HPP_INCLUDED_ 9 #define _LRUCACHE_HPP_INCLUDED_ 14 #include <unordered_map> 18 template <
typename key_t,
typename value_t>
36 : _cache_items_list(
std::move(other._cache_items_list))
37 , _cache_items_map(
std::move(other._cache_items_map))
38 , _max_size(other._max_size)
40 other._cache_items_list.clear();
41 other._cache_items_map.clear();
46 _cache_items_list = std::move(other._cache_items_list);
47 _cache_items_map = std::move(other._cache_items_map);
48 _max_size = other._max_size;
49 other._cache_items_list.clear();
50 other._cache_items_map.clear();
54 void put(
const key_t &key,
const value_t &value)
56 auto it = _cache_items_map.find(key);
58 if (it != _cache_items_map.end())
60 _cache_items_list.erase(it->second);
61 _cache_items_map.erase(it);
63 _cache_items_map[key] = _cache_items_list.begin();
65 if (_cache_items_map.size() > _max_size)
67 auto last = _cache_items_list.end();
69 _cache_items_map.erase(last->first);
70 _cache_items_list.pop_back();
74 const value_t &
get(
const key_t &key)
76 auto it = _cache_items_map.find(key);
77 if (it == _cache_items_map.end())
79 throw std::range_error(
"There is no such key in cache");
83 _cache_items_list.splice(_cache_items_list.begin(),
84 _cache_items_list, it->second);
85 return it->second->second;
91 return _cache_items_map.find(key) != _cache_items_map.end();
96 return _cache_items_map.size();
101 return _cache_items_list.begin();
106 return _cache_items_list.end();
110 std::list<key_value_pair_t> _cache_items_list;
111 std::unordered_map<key_t, list_iterator_t> _cache_items_map;
std::list< key_value_pair_t >::iterator list_iterator_t
Definition: lrucache.hpp:23
Definition: SeventvEventAPISubscription.hpp:67
Definition: lrucache.hpp:19
auto end() const
Definition: lrucache.hpp:104
bool exists(const key_t &key) const
Definition: lrucache.hpp:89
std::pair< key_t, value_t > key_value_pair_t
Definition: lrucache.hpp:22
size_t size() const
Definition: lrucache.hpp:94
lru_cache(size_t max_size)
Definition: lrucache.hpp:25
lru_cache< key_t, value_t > & operator=(lru_cache< key_t, value_t > &)=delete
lru_cache(lru_cache< key_t, value_t > &&other)
Definition: lrucache.hpp:35
auto begin() const
Definition: lrucache.hpp:99
lru_cache< key_t, value_t > & operator=(lru_cache< key_t, value_t > &&other)
Definition: lrucache.hpp:44
void put(const key_t &key, const value_t &value)
Definition: lrucache.hpp:54
Definition: lrucache.hpp:16