Dynalib Utils
DynaCache.h
Go to the documentation of this file.
1 //
2 // Created by Ken Kopelson on 6/03/18.
3 //
4 
5 #ifndef DYNACACHE_H
6 #define DYNACACHE_H
7 
8 #include "DynaLinkedList.h"
9 #include "IntWrapper.h"
10 #include "DynaHashMap.h"
11 #include "IDynaCacheListener.h"
12 
13 #define MAKE_CACHETYPE_DEF(C, T) \
14  typedef DynaCache<C> T##Cache
15 
16 template <class T> class DynaCache : public ICopyable<DynaCache<T>> {
17  bool _autoTouch = false;
18 protected:
19  int _maxPages = 0;
23 
24  long _pageFlushes = 0;
26  long _pageAccesses = 0;
27 
28 public:
29  DynaCache();
30  virtual ~DynaCache();
31  DynaCache(const DynaCache<T>& other);
32  DynaCache<T>* copy() override;
33 
34  void setAutoTouch(bool autoTouch);
35  bool isAutoTouch();
36  void resetStats();
37  void clear();
38  bool isEmpty();
39  bool isFull();
40  bool isDirty();
41  int getMaxPages();
42  int getPageCount();
43  int getDirtyPageCount();
45  void setMaxPages(int maxPages);
46  virtual void setListener(IDynaCacheListener<T>* listener);
47  void flush();
48  virtual void flushPage(T* page);
49  void touchEntry(LinkedEntry<T>* entry);
50  T* getNewPage();
51  LinkedEntry<T>* addNewPage(T* page);
52  virtual T* getPageForRemoval(LinkedEntry<T>* entry);
53  LinkedEntry<T>* useLastPage(Index keyValue);
54  LinkedEntry<T>* useLastPage(T* newPage);
55  void removePage(Index keyValue);
56  void removeLastPage();
57  virtual void purgePages(double removePercent = 0.80);
61  LinkedEntry<T>* putPageEntry(T* page);
62  T* findPage(Index keyValue);
63  T* getPage(Index keyValue);
64  T* putPage(Index keyValue);
65  T* putPage(T* page);
66  void printStatReport(String& name);
67 };
68 
69 
70 #endif //DYNACACHE_H
void resetStats()
Definition: DynaCacheImpl.h:62
long _pageReplacements
Definition: DynaCache.h:25
virtual void flushPage(T *page)
Definition: DynaCacheImpl.h:147
virtual T * getPageForRemoval(LinkedEntry< T > *entry)
Definition: DynaCacheImpl.h:181
Definition: IDynaCacheListener.h:11
bool isEmpty()
Definition: DynaCacheImpl.h:76
void touchEntry(LinkedEntry< T > *entry)
Definition: DynaCacheImpl.h:153
DynaLinkedList< T > * getPageList()
Definition: DynaCacheImpl.h:119
bool isFull()
Definition: DynaCacheImpl.h:81
Definition: DynaLinkedList.h:32
T * putPage(Index keyValue)
Definition: DynaCacheImpl.h:309
Definition: DynaCache.h:16
void setAutoTouch(bool autoTouch)
Definition: DynaCacheImpl.h:52
virtual void setListener(IDynaCacheListener< T > *listener)
Definition: DynaCacheImpl.h:133
virtual ~DynaCache()
Definition: DynaCacheImpl.h:25
long _pageAccesses
Definition: DynaCache.h:26
Definition: String.h:60
LinkedEntry< T > * useLastPage(Index keyValue)
Definition: DynaCacheImpl.h:188
int getPageCount()
Definition: DynaCacheImpl.h:114
Definition: DynaHashMap.h:73
DynaLinkedList< T > * _pageList
Definition: DynaCache.h:20
LinkedEntry< T > * findPageEntry(Index keyValue)
Definition: DynaCacheImpl.h:252
DynaCache()
Definition: DynaCacheImpl.h:17
T * findPage(Index keyValue)
Definition: DynaCacheImpl.h:297
Definition: IntWrapper.h:13
Definition: DynaLinkedList.h:28
DynaCache< T > * copy() override
Definition: DynaCacheImpl.h:47
int getDirtyPageCount()
Definition: DynaCacheImpl.h:97
T * getPage(Index keyValue)
Definition: DynaCacheImpl.h:303
void removeLastPage()
Definition: DynaCacheImpl.h:233
DynaHashMap< Index, LinkedEntry< T > > * _pageMap
Definition: DynaCache.h:21
void removePage(Index keyValue)
Definition: DynaCacheImpl.h:223
void clear()
Definition: DynaCacheImpl.h:69
int _maxPages
Definition: DynaCache.h:19
bool isAutoTouch()
Definition: DynaCacheImpl.h:57
LinkedEntry< T > * addNewPage(T *page)
Definition: DynaCacheImpl.h:171
bool isDirty()
Definition: DynaCacheImpl.h:86
T * getNewPage()
Definition: DynaCacheImpl.h:161
void printStatReport(String &name)
Definition: DynaCacheImpl.h:321
LinkedEntry< T > * putPageEntry(Index keyValue)
Definition: DynaCacheImpl.h:266
void setMaxPages(int maxPages)
Definition: DynaCacheImpl.h:124
long _pageFlushes
Definition: DynaCache.h:24
IDynaCacheListener< T > * _listener
Definition: DynaCache.h:22
Definition: ICopyable.h:8
int getMaxPages()
Definition: DynaCacheImpl.h:109
LinkedEntry< T > * getPageEntry(Index keyValue)
Definition: DynaCacheImpl.h:258
virtual void purgePages(double removePercent=0.80)
Definition: DynaCacheImpl.h:243
void flush()
Definition: DynaCacheImpl.h:138