Vanetza
 
Loading...
Searching...
No Matches
vanetza::LruCache< KEY, VALUE, GENERATOR > Class Template Reference

Least-Recently-Used cache. More...

#include <lru_cache.hpp>

Inheritance diagram for vanetza::LruCache< KEY, VALUE, GENERATOR >:

Public Types

using generator = GENERATOR
 
using key_type = KEY
 
using value_type = VALUE
 

Public Member Functions

 LruCache (generator g, std::size_t capacity)
 
value_type & operator[] (const key_type &key)
 Access a cache entry.
 

Private Types

using list_type = std::list< key_type >
 
using entry_type = std::pair< value_type, typename list_type::iterator >
 
using map_type = std::unordered_map< key_type, entry_type >
 

Private Member Functions

value_type & add (const key_type &k)
 
value_type & refresh (typename map_type::iterator found)
 
void remove ()
 

Private Attributes

generator m_generator
 
std::size_t m_capacity
 
list_type m_index
 
map_type m_cache
 

Detailed Description

template<typename KEY, typename VALUE, typename GENERATOR = std::function<VALUE(const KEY&)>>
class vanetza::LruCache< KEY, VALUE, GENERATOR >

Least-Recently-Used cache.

If an entry is accessed which is not yet cached, it will created by invocation of the generator function.

Template Parameters
KEYkey type
VALUEvalue_type, i.e. type of cache entries
GENERATORgenerator function for creating values from key

Definition at line 23 of file lru_cache.hpp.

Member Typedef Documentation

◆ entry_type

template<typename KEY , typename VALUE , typename GENERATOR = std::function<VALUE(const KEY&)>>
using vanetza::LruCache< KEY, VALUE, GENERATOR >::entry_type = std::pair<value_type, typename list_type::iterator>
private

Definition at line 61 of file lru_cache.hpp.

◆ generator

template<typename KEY , typename VALUE , typename GENERATOR = std::function<VALUE(const KEY&)>>
using vanetza::LruCache< KEY, VALUE, GENERATOR >::generator = GENERATOR

Definition at line 26 of file lru_cache.hpp.

◆ key_type

template<typename KEY , typename VALUE , typename GENERATOR = std::function<VALUE(const KEY&)>>
using vanetza::LruCache< KEY, VALUE, GENERATOR >::key_type = KEY

Definition at line 27 of file lru_cache.hpp.

◆ list_type

template<typename KEY , typename VALUE , typename GENERATOR = std::function<VALUE(const KEY&)>>
using vanetza::LruCache< KEY, VALUE, GENERATOR >::list_type = std::list<key_type>
private

Definition at line 60 of file lru_cache.hpp.

◆ map_type

template<typename KEY , typename VALUE , typename GENERATOR = std::function<VALUE(const KEY&)>>
using vanetza::LruCache< KEY, VALUE, GENERATOR >::map_type = std::unordered_map<key_type, entry_type>
private

Definition at line 62 of file lru_cache.hpp.

◆ value_type

template<typename KEY , typename VALUE , typename GENERATOR = std::function<VALUE(const KEY&)>>
using vanetza::LruCache< KEY, VALUE, GENERATOR >::value_type = VALUE

Definition at line 28 of file lru_cache.hpp.

Constructor & Destructor Documentation

◆ LruCache()

template<typename KEY , typename VALUE , typename GENERATOR = std::function<VALUE(const KEY&)>>
vanetza::LruCache< KEY, VALUE, GENERATOR >::LruCache ( generator  g,
std::size_t  capacity 
)
inline
Parameters
guser-defined generator function
capacitymaximum number of cache entries

Definition at line 34 of file lru_cache.hpp.

Member Function Documentation

◆ add()

template<typename KEY , typename VALUE , typename GENERATOR = std::function<VALUE(const KEY&)>>
value_type & vanetza::LruCache< KEY, VALUE, GENERATOR >::add ( const key_type &  k)
inlineprivate

Definition at line 64 of file lru_cache.hpp.

◆ operator[]()

template<typename KEY , typename VALUE , typename GENERATOR = std::function<VALUE(const KEY&)>>
value_type & vanetza::LruCache< KEY, VALUE, GENERATOR >::operator[] ( const key_type &  key)
inline

Access a cache entry.

If cache entry does not yet exist it will be created. The least recently accessed entry might get dropped.

Parameters
keyidentifier of cache entry
Returns
cached value

Definition at line 49 of file lru_cache.hpp.

◆ refresh()

template<typename KEY , typename VALUE , typename GENERATOR = std::function<VALUE(const KEY&)>>
value_type & vanetza::LruCache< KEY, VALUE, GENERATOR >::refresh ( typename map_type::iterator  found)
inlineprivate

Definition at line 77 of file lru_cache.hpp.

◆ remove()

template<typename KEY , typename VALUE , typename GENERATOR = std::function<VALUE(const KEY&)>>
void vanetza::LruCache< KEY, VALUE, GENERATOR >::remove ( )
inlineprivate

Definition at line 84 of file lru_cache.hpp.

Member Data Documentation

◆ m_cache

template<typename KEY , typename VALUE , typename GENERATOR = std::function<VALUE(const KEY&)>>
map_type vanetza::LruCache< KEY, VALUE, GENERATOR >::m_cache
private

Definition at line 95 of file lru_cache.hpp.

◆ m_capacity

template<typename KEY , typename VALUE , typename GENERATOR = std::function<VALUE(const KEY&)>>
std::size_t vanetza::LruCache< KEY, VALUE, GENERATOR >::m_capacity
private

Definition at line 93 of file lru_cache.hpp.

◆ m_generator

template<typename KEY , typename VALUE , typename GENERATOR = std::function<VALUE(const KEY&)>>
generator vanetza::LruCache< KEY, VALUE, GENERATOR >::m_generator
private

Definition at line 92 of file lru_cache.hpp.

◆ m_index

template<typename KEY , typename VALUE , typename GENERATOR = std::function<VALUE(const KEY&)>>
list_type vanetza::LruCache< KEY, VALUE, GENERATOR >::m_index
private

Definition at line 94 of file lru_cache.hpp.


The documentation for this class was generated from the following file: