void set_size(size_t new_size) { list<VPtr> to_release; { Mutex::Locker l(lock); max_size = new_size; trim_cache(&to_release); } }
void lru_add(K key, VPtr val, list<VPtr> *to_release) { if (contents.count(key)) { lru.splice(lru.begin(), lru, contents[key]); } else { lru.push_front(make_pair(key, val)); contents[key] = lru.begin(); trim_cache(to_release); } }
void lru_add(const K& key, const VPtr& val, list<VPtr> *to_release) { typename map<K, typename list<pair<K, VPtr> >::iterator>::iterator i = contents.find(key); if (i != contents.end()) { lru.splice(lru.begin(), lru, i->second); } else { ++size; lru.push_front(make_pair(key, val)); contents[key] = lru.begin(); trim_cache(to_release); } }
void set_size(size_t new_size) { Mutex::Locker l(lock); max_size = new_size; trim_cache(); }
void _add(K key, V&& value) { lru.emplace_front(key, std::move(value)); // can't move key because we access it below contents[key] = lru.begin(); trim_cache(); }