OmniSciDB  04ee39c94c
LruCache< key_t, value_t, hash_t > Class Template Reference

#include <LruCache.hpp>

Public Types

using const_list_iterator_t = typename cache_list_t::const_iterator
 

Public Member Functions

 LruCache (const size_t max_size)
 
void put (key_t const &key, value_t &&value)
 
void put (const key_t &key, const value_t &value)
 
value_t * get (const key_t &key)
 
const_list_iterator_t find (const key_t &key) const
 
const_list_iterator_t cend () const
 
void clear ()
 

Private Types

typedef std::pair< key_t, value_t > key_value_pair_t
 
using cache_list_t = typename std::list< key_value_pair_t >
 
using list_iterator_t = typename cache_list_t::iterator
 
typedef std::unordered_map< key_t, list_iterator_t, hash_t > map_t
 
using map_t_iterator = typename map_t::iterator
 

Private Member Functions

void putCommon (map_t_iterator &it, key_t const &key)
 

Private Attributes

cache_list_t cache_items_list_
 
map_t cache_items_map_
 
size_t max_size_
 

Detailed Description

template<typename key_t, typename value_t, class hash_t = std::hash<key_t>>
class LruCache< key_t, value_t, hash_t >

Definition at line 16 of file LruCache.hpp.

Member Typedef Documentation

◆ cache_list_t

template<typename key_t, typename value_t, class hash_t = std::hash<key_t>>
using LruCache< key_t, value_t, hash_t >::cache_list_t = typename std::list<key_value_pair_t>
private

Definition at line 19 of file LruCache.hpp.

◆ const_list_iterator_t

template<typename key_t, typename value_t, class hash_t = std::hash<key_t>>
using LruCache< key_t, value_t, hash_t >::const_list_iterator_t = typename cache_list_t::const_iterator

Definition at line 47 of file LruCache.hpp.

◆ key_value_pair_t

template<typename key_t, typename value_t, class hash_t = std::hash<key_t>>
typedef std::pair<key_t, value_t> LruCache< key_t, value_t, hash_t >::key_value_pair_t
private

Definition at line 18 of file LruCache.hpp.

◆ list_iterator_t

template<typename key_t, typename value_t, class hash_t = std::hash<key_t>>
using LruCache< key_t, value_t, hash_t >::list_iterator_t = typename cache_list_t::iterator
private

Definition at line 20 of file LruCache.hpp.

◆ map_t

template<typename key_t, typename value_t, class hash_t = std::hash<key_t>>
typedef std::unordered_map<key_t, list_iterator_t, hash_t> LruCache< key_t, value_t, hash_t >::map_t
private

Definition at line 21 of file LruCache.hpp.

◆ map_t_iterator

template<typename key_t, typename value_t, class hash_t = std::hash<key_t>>
using LruCache< key_t, value_t, hash_t >::map_t_iterator = typename map_t::iterator
private

Definition at line 22 of file LruCache.hpp.

Constructor & Destructor Documentation

◆ LruCache()

template<typename key_t, typename value_t, class hash_t = std::hash<key_t>>
LruCache< key_t, value_t, hash_t >::LruCache ( const size_t  max_size)
inline

Definition at line 25 of file LruCache.hpp.

25 : max_size_(max_size) {}
size_t max_size_
Definition: LruCache.hpp:80

Member Function Documentation

◆ cend()

template<typename key_t, typename value_t, class hash_t = std::hash<key_t>>
const_list_iterator_t LruCache< key_t, value_t, hash_t >::cend ( ) const
inline

Definition at line 55 of file LruCache.hpp.

Referenced by LruCache< CodeCacheKey, CodeCacheValWithModule, boost::hash< CodeCacheKey > >::find(), and Executor::getCodeFromCache().

55 { return (cache_items_list_.cend()); }
cache_list_t cache_items_list_
Definition: LruCache.hpp:78
+ Here is the caller graph for this function:

◆ clear()

template<typename key_t, typename value_t, class hash_t = std::hash<key_t>>
void LruCache< key_t, value_t, hash_t >::clear ( )
inline

Definition at line 57 of file LruCache.hpp.

Referenced by ResultSetReductionJIT::clearCache().

57  {
58  cache_items_list_.clear();
59  cache_items_map_.clear();
60  }
map_t cache_items_map_
Definition: LruCache.hpp:79
cache_list_t cache_items_list_
Definition: LruCache.hpp:78
+ Here is the caller graph for this function:

◆ find()

template<typename key_t, typename value_t, class hash_t = std::hash<key_t>>
const_list_iterator_t LruCache< key_t, value_t, hash_t >::find ( const key_t &  key) const
inline

Definition at line 49 of file LruCache.hpp.

Referenced by Executor::getCodeFromCache().

49  {
50  auto it = cache_items_map_.find(key);
51  auto val = (it == cache_items_map_.end() ? cend() : it->second);
52  return (val);
53  }
const_list_iterator_t cend() const
Definition: LruCache.hpp:55
map_t cache_items_map_
Definition: LruCache.hpp:79
+ Here is the caller graph for this function:

◆ get()

template<typename key_t, typename value_t, class hash_t = std::hash<key_t>>
value_t* LruCache< key_t, value_t, hash_t >::get ( const key_t &  key)
inline

Definition at line 39 of file LruCache.hpp.

Referenced by ResultSetReductionJIT::finalizeReductionCode().

39  {
40  auto it = cache_items_map_.find(key);
41  if (it == cache_items_map_.end()) {
42  return nullptr;
43  }
44  cache_items_list_.splice(cache_items_list_.begin(), cache_items_list_, it->second);
45  return &it->second->second;
46  }
map_t cache_items_map_
Definition: LruCache.hpp:79
cache_list_t cache_items_list_
Definition: LruCache.hpp:78
+ Here is the caller graph for this function:

◆ put() [1/2]

template<typename key_t, typename value_t, class hash_t = std::hash<key_t>>
void LruCache< key_t, value_t, hash_t >::put ( key_t const &  key,
value_t &&  value 
)
inline

Definition at line 27 of file LruCache.hpp.

Referenced by Executor::getCodeFromCache().

27  {
28  auto it = cache_items_map_.find(key);
29  cache_items_list_.emplace_front(key, std::forward<value_t&&>(value));
30  putCommon(it, key);
31  }
map_t cache_items_map_
Definition: LruCache.hpp:79
cache_list_t cache_items_list_
Definition: LruCache.hpp:78
void putCommon(map_t_iterator &it, key_t const &key)
Definition: LruCache.hpp:63
+ Here is the caller graph for this function:

◆ put() [2/2]

template<typename key_t, typename value_t, class hash_t = std::hash<key_t>>
void LruCache< key_t, value_t, hash_t >::put ( const key_t &  key,
const value_t &  value 
)
inline

Definition at line 33 of file LruCache.hpp.

33  {
34  auto it = cache_items_map_.find(key);
35  cache_items_list_.emplace_front(key, std::forward<const value_t&&>(value));
36  putCommon(it, key);
37  }
map_t cache_items_map_
Definition: LruCache.hpp:79
cache_list_t cache_items_list_
Definition: LruCache.hpp:78
void putCommon(map_t_iterator &it, key_t const &key)
Definition: LruCache.hpp:63

◆ putCommon()

template<typename key_t, typename value_t, class hash_t = std::hash<key_t>>
void LruCache< key_t, value_t, hash_t >::putCommon ( map_t_iterator it,
key_t const &  key 
)
inlineprivate

Definition at line 63 of file LruCache.hpp.

Referenced by LruCache< CodeCacheKey, CodeCacheValWithModule, boost::hash< CodeCacheKey > >::put().

63  {
64  if (it != cache_items_map_.end()) {
65  cache_items_list_.erase(it->second);
66  cache_items_map_.erase(it);
67  }
68  cache_items_map_[key] = cache_items_list_.begin();
69 
70  if (cache_items_map_.size() > max_size_) {
71  auto last = cache_items_list_.end();
72  last--;
73  cache_items_map_.erase(last->first);
74  cache_items_list_.pop_back();
75  }
76  }
map_t cache_items_map_
Definition: LruCache.hpp:79
cache_list_t cache_items_list_
Definition: LruCache.hpp:78
size_t max_size_
Definition: LruCache.hpp:80
+ Here is the caller graph for this function:

Member Data Documentation

◆ cache_items_list_

◆ cache_items_map_

◆ max_size_

template<typename key_t, typename value_t, class hash_t = std::hash<key_t>>
size_t LruCache< key_t, value_t, hash_t >::max_size_
private

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