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