// decouples the current_size variable from the actual size in memory,
// so these functions should only be called when something is actually
// added or removed from memory (e.g. in find_else_insert, remove, etc).
- virtual void increase_size()
+ virtual void increase_size(ValueType* value_ptr=nullptr)
{
+ UNUSED(value_ptr);
current_size++;
}
- virtual void decrease_size()
+ virtual void decrease_size(ValueType* value_ptr=nullptr)
{
+ UNUSED(value_ptr);
current_size--;
}
{
list_iter = --list.end();
data.emplace_back(list_iter->second); // increase reference count
- decrease_size();
+ decrease_size(list_iter->second.get());
map.erase(list_iter->first);
list.erase(list_iter);
++stats.alloc_prunes;
// Add key/data pair to front of list.
list.emplace_front(std::make_pair(key, data));
- increase_size();
+ increase_size(data.get());
// Add list iterator for the new entry to map.
map[key] = list.begin();
if (replace)
{
// Explicitly calling the reset so its more clear that destructor could be called for the object
+ decrease_size(map_iter->second->second.get());
map_iter->second->second.reset();
map_iter->second->second = data;
+ increase_size(map_iter->second->second.get());
stats.replaced++;
}
list.splice(list.begin(), list, map_iter->second); // update LRU
// Add key/data pair to front of list.
list.emplace_front(std::make_pair(key, data));
- increase_size();
+ increase_size(data.get());
// Add list iterator for the new entry to map.
map[key] = list.begin();
data = map_iter->second->second;
- decrease_size();
+ decrease_size(data.get());
list.erase(map_iter->second);
map.erase(map_iter);
stats.removes++;
data = map_iter->second->second;
- decrease_size();
+ decrease_size(data.get());
list.erase(map_iter->second);
map.erase(map_iter);
stats.removes++;
}
}
- void increase_size() override
+ void increase_size(ValueType* value_ptr=nullptr) override
{
+ UNUSED(value_ptr);
current_size += mem_chunk;
}
- void decrease_size() override
+ void decrease_size(ValueType* value_ptr=nullptr) override
{
+ UNUSED(value_ptr);
assert( current_size >= mem_chunk );
current_size -= mem_chunk;
}