OmniSciDB  06b3bd477c
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 (const key_t &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 ()
 
void evictFractionEntries (const float fraction)
 
void evictNEntries (const size_t n)
 

Private Types

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

Private Member Functions

void putCommon (map_t_iterator &it, key_t const &key)
 
void evictCommon (const size_t entries_to_evict)
 

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

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.

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.

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

Definition at line 18 of file LruCache.hpp.

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.

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

Definition at line 21 of file LruCache.hpp.

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

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:104

Member Function Documentation

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.

References LruCache< key_t, value_t, hash_t >::cache_items_list_.

Referenced by LruCache< key_t, value_t, hash_t >::find(), and Executor::getCodeFromCache().

55 { return (cache_items_list_.cend()); }
cache_list_t cache_items_list_
Definition: LruCache.hpp:102

+ Here is the caller graph for this function:

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.

References LruCache< key_t, value_t, hash_t >::cache_items_list_, and LruCache< key_t, value_t, hash_t >::cache_items_map_.

Referenced by StubGenerator::clearCache(), and ResultSetReductionJIT::clearCache().

57  {
58  cache_items_list_.clear();
59  cache_items_map_.clear();
60  }
map_t cache_items_map_
Definition: LruCache.hpp:103
cache_list_t cache_items_list_
Definition: LruCache.hpp:102

+ Here is the caller graph for this function:

template<typename key_t , typename value_t , class hash_t = std::hash<key_t>>
void LruCache< key_t, value_t, hash_t >::evictCommon ( const size_t  entries_to_evict)
inlineprivate

Definition at line 91 of file LruCache.hpp.

References LruCache< key_t, value_t, hash_t >::cache_items_list_, and LruCache< key_t, value_t, hash_t >::cache_items_map_.

Referenced by LruCache< key_t, value_t, hash_t >::evictFractionEntries(), and LruCache< key_t, value_t, hash_t >::evictNEntries().

91  {
92  auto last = cache_items_list_.end();
93  size_t entries_erased = 0;
94  while (entries_erased < entries_to_evict && last != cache_items_list_.begin()) {
95  last--;
96  cache_items_map_.erase(last->first);
97  last = cache_items_list_.erase(last);
98  entries_erased++;
99  }
100  }
map_t cache_items_map_
Definition: LruCache.hpp:103
cache_list_t cache_items_list_
Definition: LruCache.hpp:102

+ Here is the caller graph for this function:

template<typename key_t , typename value_t , class hash_t = std::hash<key_t>>
void LruCache< key_t, value_t, hash_t >::evictFractionEntries ( const float  fraction)
inline

Definition at line 62 of file LruCache.hpp.

References LruCache< key_t, value_t, hash_t >::cache_items_map_, and LruCache< key_t, value_t, hash_t >::evictCommon().

62  {
63  size_t entries_to_evict =
64  std::min(std::max(static_cast<size_t>(cache_items_map_.size() * fraction),
65  static_cast<size_t>(1)),
66  cache_items_map_.size());
67  evictCommon(entries_to_evict);
68  }
map_t cache_items_map_
Definition: LruCache.hpp:103
void evictCommon(const size_t entries_to_evict)
Definition: LruCache.hpp:91

+ Here is the call graph for this function:

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

Definition at line 70 of file LruCache.hpp.

References LruCache< key_t, value_t, hash_t >::cache_items_map_, and LruCache< key_t, value_t, hash_t >::evictCommon().

70  {
71  size_t entries_to_evict = std::min(n, cache_items_map_.size());
72  evictCommon(entries_to_evict);
73  }
map_t cache_items_map_
Definition: LruCache.hpp:103
void evictCommon(const size_t entries_to_evict)
Definition: LruCache.hpp:91

+ Here is the call graph for this function:

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.

References LruCache< key_t, value_t, hash_t >::cache_items_map_, and LruCache< key_t, value_t, hash_t >::cend().

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:103

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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.

References LruCache< key_t, value_t, hash_t >::cache_items_list_, and LruCache< key_t, value_t, hash_t >::cache_items_map_.

Referenced by ResultSetReductionJIT::codegen(), and StubGenerator::generateStub().

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:103
cache_list_t cache_items_list_
Definition: LruCache.hpp:102

+ Here is the caller graph for this function:

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,
value_t &&  value 
)
inline

Definition at line 27 of file LruCache.hpp.

References LruCache< key_t, value_t, hash_t >::cache_items_list_, LruCache< key_t, value_t, hash_t >::cache_items_map_, and LruCache< key_t, value_t, hash_t >::putCommon().

Referenced by Executor::addCodeToCache().

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:103
cache_list_t cache_items_list_
Definition: LruCache.hpp:102
void putCommon(map_t_iterator &it, key_t const &key)
Definition: LruCache.hpp:76

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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.

References LruCache< key_t, value_t, hash_t >::cache_items_list_, LruCache< key_t, value_t, hash_t >::cache_items_map_, and LruCache< key_t, value_t, hash_t >::putCommon().

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:103
cache_list_t cache_items_list_
Definition: LruCache.hpp:102
void putCommon(map_t_iterator &it, key_t const &key)
Definition: LruCache.hpp:76

+ Here is the call graph for this function:

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 76 of file LruCache.hpp.

References LruCache< key_t, value_t, hash_t >::cache_items_list_, LruCache< key_t, value_t, hash_t >::cache_items_map_, and LruCache< key_t, value_t, hash_t >::max_size_.

Referenced by LruCache< key_t, value_t, hash_t >::put().

76  {
77  if (it != cache_items_map_.end()) {
78  cache_items_list_.erase(it->second);
79  cache_items_map_.erase(it);
80  }
81  cache_items_map_[key] = cache_items_list_.begin();
82 
83  if (cache_items_map_.size() > max_size_) {
84  auto last = cache_items_list_.end();
85  last--;
86  cache_items_map_.erase(last->first);
87  cache_items_list_.pop_back();
88  }
89  }
map_t cache_items_map_
Definition: LruCache.hpp:103
cache_list_t cache_items_list_
Definition: LruCache.hpp:102
size_t max_size_
Definition: LruCache.hpp:104

+ Here is the caller graph for this function:

Member Data Documentation

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

Definition at line 104 of file LruCache.hpp.

Referenced by LruCache< key_t, value_t, hash_t >::putCommon().


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