94 virtual size_t GetSize(
const V& value)
const = 0;
99 using Map = std::unordered_map<K, typename OrderList::iterator>;
110 IK KeyToInternalKey(K key)
112 return key - std::numeric_limits<K>::min();
121 while (size>maxSize) {
125 map.erase(map.find(order.back().key));
130 previousEntry=order.end();
143 map.reserve(maxSize);
144 previousEntry=order.end();
173 if (previousEntry!=order.end() &&
174 previousEntry->key==key) {
175 reference=previousEntry;
179 typename Map::iterator iter=map.find(key);
181 if (iter!=map.end()) {
183 order.splice(order.begin(),order,iter->second);
186 iter->second=order.begin();
188 reference=order.begin();
189 previousEntry=reference;
209 order.push_front(entry);
211 previousEntry=order.begin();
212 return order.begin();
215 typename Map::iterator iter=map.find(entry.key);
217 if (iter!=map.end()) {
219 order.splice(order.begin(),order,iter->second);
222 iter->second=order.begin();
224 order.front().value=entry.value;
228 order.push_front(entry);
231 map[entry.key]=order.begin();
236 previousEntry=order.begin();
237 return order.begin();
246 this->maxSize=maxSize;
250 map.reserve(maxSize);
269 previousEntry=order.end();
285 memory+=map.size()*
sizeof(
CacheRef);
288 memory+=size*
sizeof(CacheEntry);
290 for (
typename std::list<CacheEntry>::const_iterator entry=order.begin();
293 memory+=sizer.GetSize(entry->value);
304 log.Debug() << cacheName <<
" entries: " << size <<
", memory " <<
GetMemory(sizer);
CacheEntry(const K &key, const V &value)
Definition Cache.h:75