40 void insert(
const Key& key, Resource resource)
42 if (
auto existing = _map.find(key); existing != _map.end()) {
43 _deleter(existing->first, existing->second.resource);
44 existing->second.resource = std::move(resource);
45 _order.splice(_order.begin(), _order, existing->second.lru);
48 if (_map.size() >= _capacity && !_order.empty()) {
49 const Key victimKey = _order.back();
50 if (
auto victim = _map.find(victimKey); victim != _map.end()) {
51 _deleter(victim->first, victim->second.resource);
56 _order.push_front(key);
57 _map.emplace(key, Entry{std::move(resource), _order.begin()});
64 for (
auto it = _map.begin(); it != _map.end();) {
65 if (pred(it->first, it->second.resource)) {
66 _deleter(it->first, it->second.resource);
67 _order.erase(it->second.lru);