Lucene++ - a full-featured, c++ search engine
API Documentation


 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
SimpleLRUCache.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2011 Alan Wright. All rights reserved.
3 // Distributable under the terms of either the Apache License (Version 2.0)
4 // or the GNU Lesser General Public License.
6 
7 #ifndef SIMPLELRUCACHE_H
8 #define SIMPLELRUCACHE_H
9 
10 #include <list>
11 #include "LuceneObject.h"
12 
13 namespace Lucene
14 {
18  template <class KEY, class VALUE, class HASH, class EQUAL>
20  {
21  public:
22  typedef std::pair<KEY, VALUE> key_value;
23  typedef std::list< key_value > key_list;
24  typedef typename key_list::const_iterator const_iterator;
25  typedef boost::unordered_map< KEY, typename key_list::iterator, HASH, EQUAL, LuceneAllocator< std::pair<KEY, typename key_list::iterator> > > map_type;
26  typedef typename map_type::const_iterator map_iterator;
27 
29  {
30  this->cacheSize = cacheSize;
31  }
32 
33  virtual ~SimpleLRUCache()
34  {
35  }
36 
37  protected:
38  int32_t cacheSize;
41 
42  public:
43  void put(const KEY& key, const VALUE& value)
44  {
45  cacheList.push_front(std::make_pair(key, value));
46  cacheMap[key] = cacheList.begin();
47 
48  if ((int32_t)cacheList.size() > cacheSize)
49  {
50  cacheMap.erase(cacheList.back().first);
51  cacheList.pop_back();
52  }
53  }
54 
55  VALUE get(const KEY& key)
56  {
57  map_iterator find = cacheMap.find(key);
58  if (find == cacheMap.end())
59  return VALUE();
60 
61  VALUE value(find->second->second);
62  cacheList.erase(find->second);
63  cacheList.push_front(std::make_pair(key, value));
64  cacheMap[key] = cacheList.begin();
65 
66  return value;
67  }
68 
69  bool contains(const KEY& key) const
70  {
71  return (cacheMap.find(key) != cacheMap.end());
72  }
73 
74  int32_t size() const
75  {
76  return (int32_t)cacheList.size();
77  }
78 
80  {
81  return cacheList.begin();
82  }
83 
85  {
86  return cacheList.end();
87  }
88  };
89 };
90 
91 #endif

clucene.sourceforge.net