OmniSciDB  1dac507f6e
 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 (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

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>>
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.

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>>
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.

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

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

+ 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:79
cache_list_t cache_items_list_
Definition: LruCache.hpp:78

+ Here is the caller 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:79

+ 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:79
cache_list_t cache_items_list_
Definition: LruCache.hpp:78

+ 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 ( key_t const &  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().

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 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 >::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: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 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 63 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().

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

template<typename key_t , typename value_t , class hash_t = std::hash<key_t>>
cache_list_t LruCache< key_t, value_t, hash_t >::cache_items_list_
private
template<typename key_t , typename value_t , class hash_t = std::hash<key_t>>
map_t LruCache< key_t, value_t, hash_t >::cache_items_map_
private
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 80 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: