2 #ifndef __PCL_OUTOFCORE_LRU_CACHE__
3 #define __PCL_OUTOFCORE_LRU_CACHE__
29 template<
typename KeyT,
typename CacheItemT>
36 using Cache = std::map<KeyT, std::pair<CacheItemT, typename KeyIndex::iterator> >;
54 const auto it =
cache_.find (k);
55 assert(it !=
cache_.end ());
61 return it->second.first;
68 const auto it =
cache_.find (key);
69 assert(it !=
cache_.end ());
77 insert (
const KeyT& key,
const CacheItemT& value)
85 std::size_t size =
size_;
86 std::size_t item_size = value.sizeOf ();
94 const auto cache_it =
cache_.find (*key_it);
97 std::size_t tail_timestamp = cache_it->second.first.timestamp;
98 std::size_t tail_size = cache_it->second.first.sizeOf ();
101 if (value.timestamp == tail_timestamp)
120 cache_.insert (std::make_pair (key, std::make_pair (value, it)));
135 return it->second.first;
141 return value.sizeOf ();
148 for (
int i=0; i < item_count; i++)
155 assert(it !=
cache_.end());
158 size_ -= it->second.first.sizeOf ();
bool insert(const KeyT &key, const CacheItemT &value)
std::list< KeyT > KeyIndex
bool hasKey(const KeyT &k)
void touch(const KeyT &key)
void setCapacity(std::size_t capacity)
std::map< KeyT, std::pair< CacheItemT, typename KeyIndex::iterator > > Cache
typename KeyIndex::iterator KeyIndexIterator
std::size_t sizeOf(const CacheItemT &value)
CacheItemT & get(const KeyT &k)
bool evict(int item_count=1)
virtual ~LRUCacheItem()=default
virtual std::size_t sizeOf() const