LRUHashMap< K, V, MAXENTRIES > Class Template Reference

#include <lruhashmap.h>

Detailed Description

template<typename K, typename V, Int MAXENTRIES>
class maxon::LRUHashMap< K, V, MAXENTRIES >

LRUHashMap is a specialized HashMap which is able to restrict the number of elements in the HashMap. The map keeps the LRU (last recently used) elements and destroys the most unused values if a the number of elements exceeds the limit (MAXENTRIES). The class can be used to cache a limited number of elements.

Template Parameters
KKEY type of the hash map.
VVALUE type of the hash map.
MAXENTRIESMaximum number of elements to store.

Public Member Functions

 ~LRUHashMap ()
 
template<typename KEY >
ResultRef< V > InsertKey (KEY &&key, Bool &created=BoolLValue())
 
template<typename KEY >
const V * FindValue (const KEY &key) const
 
template<typename KEY >
V * FindValue (const KEY &key)
 
Int GetCount () const
 
void Reset ()
 
template<typename KEY >
ResultOk< void > Erase (const KEY &key)
 

Private Types

using ListNodeType = BaseListNode< V >
 
using LastNodeHead = BaseListHead< V, ListNodeType >
 
using HashMapType = HashMap< K, ListNodeType >
 

Private Member Functions

void UpdateEntry (typename HashMapType::Entry *entry) const
 

Private Attributes

HashMapType _hashMap
 
LastNodeHead _lastUsed
 

Member Typedef Documentation

◆ ListNodeType

using ListNodeType = BaseListNode<V>
private

◆ LastNodeHead

using LastNodeHead = BaseListHead<V, ListNodeType>
private

◆ HashMapType

using HashMapType = HashMap<K, ListNodeType>
private

Constructor & Destructor Documentation

◆ ~LRUHashMap()

~LRUHashMap ( )

Member Function Documentation

◆ InsertKey()

ResultRef<V> InsertKey ( KEY &&  key,
Bool created = BoolLValue() 
)

Finds the value associated with the given key, or creates a corresponding entry if it doesn't exist yet. The value of a new entry has to be initialized afterwards (but its default constructor has already been invoked).

Parameters
[in]keyKey of the value to find or create.
[out]createdThis will be set to true if a new entry has been created successfully, otherwise it will be set to false.
Returns
Pointer to value for the given key, or nullptr if an entry didn't exist and allocation of a new entry failed.

◆ FindValue() [1/2]

const V* FindValue ( const KEY &  key) const

Finds the value associated with the given key in this map.

Template Parameters
KEYType of key.
Parameters
[in]keyKey to search for.
Returns
Pointer to value for the given key, or nullptr if no entry exists for the key.

◆ FindValue() [2/2]

V* FindValue ( const KEY &  key)

Finds the value associated with the given key in this map.

Template Parameters
KEYType of key.
Parameters
[in]keyKey to search for.
Returns
Pointer to value for the given key, or nullptr if no entry exists for the key.

◆ GetCount()

Int GetCount ( void  ) const

Returns the number of entries in this map.

Returns
Number of entries.

◆ Reset()

void Reset ( void  )

Resets the map. This destructs all entries and frees any memory held by the map, so the map will be in a state as if it had been newly constructed.

See also
Flush()

◆ Erase()

ResultOk<void> Erase ( const KEY &  key)

Removes an entry with the given key from this HashMap (if possible). In case of a multi-map, this only removes a single entry. The type KEY of the given key need not be the same as K, but then you have to provide an additional class KEYHASH to compute the hash code of the specified key (function KEYHASH::GetHashCode(const KEY&)), and to compare a key of type KEY with a key of type K for equality (function KEYHASH::IsEqual(const KEY&, const K&)) unless the default HASH class is already able to do so.

Template Parameters
KEYType of key.
Parameters
[in]keyAn entry having this key shall be removed.
Returns
Always true for a HashMap (even if key isn't contained in the map). For a general map, false indicates an out-of-memory condition on removal, but this cannot happen for a HashMap.

◆ UpdateEntry()

void UpdateEntry ( typename HashMapType::Entry *  entry) const
private

Member Data Documentation

◆ _hashMap

HashMapType _hashMap
private

◆ _lastUsed

LastNodeHead _lastUsed
private