OpenTTD Source 20260208-master-g43af8e94d0
LRUCache< Tkey, Tdata, Thash, Tequality > Class Template Reference

Size limited cache with a least recently used eviction strategy. More...

#include <lrucache.hpp>

Public Member Functions

 LRUCache (size_t max_items)
 Construct new LRU cache map.
bool Contains (const Tkey &key)
 Test if a key is already contained in the cache.
void Insert (const Tkey &key, Tdata &&item)
 Insert a new data item with a specified key.
void Clear ()
 Clear the cache.
const Tdata & Get (const Tkey &key)
 Get an item from the cache.
Tdata * GetIfValid (const auto &key)
 Get an item from the cache.

Private Types

using PairType = std::pair<Tkey, Tdata>
using StorageType = std::list<PairType>
using IteratorType = StorageType::iterator
using LookupType = std::unordered_map<Tkey, IteratorType, Thash, Tequality>

Private Attributes

StorageType data
 Ordered list of all items.
LookupType lookup
 Map of keys to items.
const size_t capacity
 Number of items to cache.

Detailed Description

template<class Tkey, class Tdata, class Thash = std::hash<Tkey>, class Tequality = std::equal_to<>>
class LRUCache< Tkey, Tdata, Thash, Tequality >

Size limited cache with a least recently used eviction strategy.

Note
If a comparator is provided, the lookup type is a std::map, otherwise std::unordered_map is used.
Template Parameters
TkeyType of the cache key.
TdataType of the cache item.

Definition at line 23 of file lrucache.hpp.

Member Typedef Documentation

◆ IteratorType

template<class Tkey, class Tdata, class Thash = std::hash<Tkey>, class Tequality = std::equal_to<>>
using LRUCache< Tkey, Tdata, Thash, Tequality >::IteratorType = StorageType::iterator
private

Definition at line 27 of file lrucache.hpp.

◆ LookupType

template<class Tkey, class Tdata, class Thash = std::hash<Tkey>, class Tequality = std::equal_to<>>
using LRUCache< Tkey, Tdata, Thash, Tequality >::LookupType = std::unordered_map<Tkey, IteratorType, Thash, Tequality>
private

Definition at line 28 of file lrucache.hpp.

◆ PairType

template<class Tkey, class Tdata, class Thash = std::hash<Tkey>, class Tequality = std::equal_to<>>
using LRUCache< Tkey, Tdata, Thash, Tequality >::PairType = std::pair<Tkey, Tdata>
private

Definition at line 25 of file lrucache.hpp.

◆ StorageType

template<class Tkey, class Tdata, class Thash = std::hash<Tkey>, class Tequality = std::equal_to<>>
using LRUCache< Tkey, Tdata, Thash, Tequality >::StorageType = std::list<PairType>
private

Definition at line 26 of file lrucache.hpp.

Constructor & Destructor Documentation

◆ LRUCache()

template<class Tkey, class Tdata, class Thash = std::hash<Tkey>, class Tequality = std::equal_to<>>
LRUCache< Tkey, Tdata, Thash, Tequality >::LRUCache ( size_t max_items)
inline

Construct new LRU cache map.

Parameters
max_itemsNumber of items to store at most.

Definition at line 40 of file lrucache.hpp.

Member Function Documentation

◆ Clear()

template<class Tkey, class Tdata, class Thash = std::hash<Tkey>, class Tequality = std::equal_to<>>
void LRUCache< Tkey, Tdata, Thash, Tequality >::Clear ( )
inline

Clear the cache.

Definition at line 80 of file lrucache.hpp.

◆ Contains()

template<class Tkey, class Tdata, class Thash = std::hash<Tkey>, class Tequality = std::equal_to<>>
bool LRUCache< Tkey, Tdata, Thash, Tequality >::Contains ( const Tkey & key)
inline

Test if a key is already contained in the cache.

Parameters
keyThe key to search.
Returns
True, if the key was found.

Definition at line 47 of file lrucache.hpp.

◆ Get()

template<class Tkey, class Tdata, class Thash = std::hash<Tkey>, class Tequality = std::equal_to<>>
const Tdata & LRUCache< Tkey, Tdata, Thash, Tequality >::Get ( const Tkey & key)
inline

Get an item from the cache.

Parameters
keyThe key to look up.
Returns
The item value.
Note
Throws if item not found.

Definition at line 92 of file lrucache.hpp.

◆ GetIfValid()

template<class Tkey, class Tdata, class Thash = std::hash<Tkey>, class Tequality = std::equal_to<>>
Tdata * LRUCache< Tkey, Tdata, Thash, Tequality >::GetIfValid ( const auto & key)
inline

Get an item from the cache.

Parameters
keyThe key to look up.
Returns
The item value.
Note
Throws if item not found.

Definition at line 108 of file lrucache.hpp.

◆ Insert()

template<class Tkey, class Tdata, class Thash = std::hash<Tkey>, class Tequality = std::equal_to<>>
void LRUCache< Tkey, Tdata, Thash, Tequality >::Insert ( const Tkey & key,
Tdata && item )
inline

Insert a new data item with a specified key.

Parameters
keyKey under which the item should be stored.
itemItem to insert.

Definition at line 57 of file lrucache.hpp.

Referenced by OpenGLBackend::Encode().

Field Documentation

◆ capacity

template<class Tkey, class Tdata, class Thash = std::hash<Tkey>, class Tequality = std::equal_to<>>
const size_t LRUCache< Tkey, Tdata, Thash, Tequality >::capacity
private

Number of items to cache.

Definition at line 33 of file lrucache.hpp.

◆ data

template<class Tkey, class Tdata, class Thash = std::hash<Tkey>, class Tequality = std::equal_to<>>
StorageType LRUCache< Tkey, Tdata, Thash, Tequality >::data
private

Ordered list of all items.

Definition at line 30 of file lrucache.hpp.

◆ lookup

template<class Tkey, class Tdata, class Thash = std::hash<Tkey>, class Tequality = std::equal_to<>>
LookupType LRUCache< Tkey, Tdata, Thash, Tequality >::lookup
private

Map of keys to items.

Definition at line 31 of file lrucache.hpp.


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