1 ///###////////////////////////////////////////////////////////////////////////
2 //
3 // Burton Computer Corporation
4 // http://www.burton-computer.com
5 // http://www.cooldevtools.com
6 // $Id: FrequencyDBImpl_cache.h 272 2007-01-06 19:37:27Z brian $
7 //
8 // Copyright (C) 2007 Burton Computer Corporation
9 // ALL RIGHTS RESERVED
10 //
11 // This program is open source software; you can redistribute it
12 // and/or modify it under the terms of the Q Public License (QPL)
13 // version 1.0. Use of this software in whole or in part, including
14 // linking it (modified or unmodified) into other programs is
15 // subject to the terms of the QPL.
16 //
17 // This program is distributed in the hope that it will be useful,
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 // Q Public License for more details.
21 //
22 // You should have received a copy of the Q Public License
23 // along with this program; see the file LICENSE.txt.  If not, visit
24 // the Burton Computer Corporation or CoolDevTools web site
25 // QPL pages at:
26 //
27 //    http://www.burton-computer.com/qpl.html
28 //    http://www.cooldevtools.com/qpl.html
29 //
30 
31 #ifndef _FrequencyDBImpl_cache_h
32 #define _FrequencyDBImpl_cache_h
33 
34 #include "LRUCache.h"
35 #include "FrequencyDBImpl.h"
36 
37 class FrequencyDBImpl_cache : public FrequencyDBImpl
38 {
39 public:
40   FrequencyDBImpl_cache(FrequencyDBImpl *db,
41                         int max_size);
42   ~FrequencyDBImpl_cache();
43 
44   bool open(const string &filename,
45             bool read_only,
46             int create_mode);
47   void close();
48 
49   void flush();
50 
51   void clear();
52 
53   void writeWord(const string &word,
54                  const WordData &word_data);
55 
56   bool readWord(const string &word,
57                 WordData &word_data);
58 
59   bool firstWord(string &word,
60                  WordData &counts);
61 
62   bool nextWord(string &word,
63                 WordData &counts);
64 
65   string getDatabaseType() const;
66 
67   void sweepOutOldTerms(const CleanupManager &cleanman);
68 
69 private:
70   /// Not implemented.
71   FrequencyDBImpl_cache(const FrequencyDBImpl_cache &);
72 
73   /// Not implemented.
74   FrequencyDBImpl_cache& operator=(const FrequencyDBImpl_cache &);
75 
76 private:
77   struct CacheEntry
78   {
CacheEntryCacheEntry79     CacheEntry(bool _is_shared,
80                const WordData &_counts)
81       : is_shared(_is_shared),
82         counts(_counts)
83     {
84     }
85 
86     bool is_shared;
87     WordData counts;
88   };
89 
90   void addWordData(const string &word, bool is_dirty, bool is_shared, const WordData &counts);
91 
92 private:
93   typedef LRUCache<string,Ref<CacheEntry> > CacheType;
94   typedef LRUCache<string,Ref<CacheEntry> >::iterator IteratorType;
95 
96   Ptr<FrequencyDBImpl> m_db;
97   CacheType m_cache;
98 };
99 
100 #endif // _FrequencyDBImpl_cache_h
101