| 161 | , d_size(0){}; |
| 162 | |
| 163 | void |
| 164 | LRUCache::put(uintptr_t key, std::vector<char>&& value) |
| 165 | { |
| 166 | size_t value_size = value.size(); |
| 167 | |
| 168 | if (!can_fit(value_size)) { |
| 169 | return; |
| 170 | } |
| 171 | |
| 172 | auto it = d_cache.find(key); |
| 173 | |
| 174 | if (it != d_cache.end()) { |
| 175 | d_cache_list.erase(it->second.it); |
| 176 | d_cache.erase(it); |
| 177 | } |
| 178 | |
| 179 | while (d_size + value_size > d_cache_capacity) { |
| 180 | d_cache.erase(d_cache_list.back().key); |
| 181 | d_size -= d_cache_list.back().size; |
| 182 | d_cache_list.pop_back(); |
| 183 | } |
| 184 | |
| 185 | d_cache_list.push_front(LRUCache::ListNode{key, value_size}); |
| 186 | d_cache[key] = LRUCache::CacheValue{std::move(value), d_cache_list.begin()}; |
| 187 | d_size += value_size; |
| 188 | } |
| 189 | |
| 190 | const std::vector<char>& |
| 191 | LRUCache::get(uintptr_t key) |
no test coverage detected