aboutsummaryrefslogtreecommitdiff
path: root/src/unstable/cacheobject.h
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2014-01-22 16:28:46 +0000
committerMike Buland <eichlan@xagasoft.com>2014-01-22 16:28:46 +0000
commit86e37bec7b2101555635201f83352c0e054f1849 (patch)
tree4d2a3652689ac7b615db82bdab520c2ed42dd705 /src/unstable/cacheobject.h
parent44a228640c782e46baf528749b5776714749ef2d (diff)
downloadlibbu++-86e37bec7b2101555635201f83352c0e054f1849.tar.gz
libbu++-86e37bec7b2101555635201f83352c0e054f1849.tar.bz2
libbu++-86e37bec7b2101555635201f83352c0e054f1849.tar.xz
libbu++-86e37bec7b2101555635201f83352c0e054f1849.zip
Updated the cache system. It now ensures that objects are initialized with
cache information before they are deserialized from storage. This changed the signature of the cache loading template function, but the new function isn't harder to use, and provides the key information as well.
Diffstat (limited to '')
-rw-r--r--src/unstable/cacheobject.h34
1 files changed, 31 insertions, 3 deletions
diff --git a/src/unstable/cacheobject.h b/src/unstable/cacheobject.h
index e83f706..ca70bb4 100644
--- a/src/unstable/cacheobject.h
+++ b/src/unstable/cacheobject.h
@@ -21,6 +21,7 @@ namespace Bu
21 class CacheObject 21 class CacheObject
22 { 22 {
23 friend class CacheBase<keytype, obtype>; 23 friend class CacheBase<keytype, obtype>;
24 //friend class CacheObject<keytype, obtype>::Initializer;
24 public: 25 public:
25 CacheObject() : 26 CacheObject() :
26 pCache( NULL ), 27 pCache( NULL ),
@@ -35,6 +36,7 @@ namespace Bu
35 36
36 typedef CacheObject<keytype, obtype> MyType; 37 typedef CacheObject<keytype, obtype> MyType;
37 typedef CacheBase<keytype, obtype> CacheType; 38 typedef CacheBase<keytype, obtype> CacheType;
39 typedef CacheEntry<keytype, obtype> EntryType;
38 40
39 virtual keytype getKey() const=0; 41 virtual keytype getKey() const=0;
40 virtual int getPersistenceScore() const { return 0; } 42 virtual int getPersistenceScore() const { return 0; }
@@ -94,18 +96,44 @@ namespace Bu
94 { 96 {
95 return pCache; 97 return pCache;
96 } 98 }
99
100 public:
101 class Initializer
102 {
103 friend class CacheBase<keytype,obtype>;
104 private:
105 Initializer( CacheBase<keytype,obtype> *pCache ) :
106 pCache( pCache )
107 {
108 }
109
110 public:
111 template<typename subtype>
112 subtype *operator()( subtype *pNewObj )
113 {
114 pNewObj->setCache( pCache );
115 return pNewObj;
116 }
117
118 private:
119 CacheBase<keytype,obtype> *pCache;
120 };
121
97 122
98 private: 123 private:
99 typedef CacheEntry<keytype, obtype> Entry; 124 void setCache( CacheType *pCache )
100 void setCache( CacheType *pCache, Entry *pEntry )
101 { 125 {
102 this->pCache = pCache; 126 this->pCache = pCache;
127 }
128
129 void setCacheEntry( EntryType *pEntry )
130 {
103 this->pEntry = pEntry; 131 this->pEntry = pEntry;
104 } 132 }
105 133
106 private: 134 private:
107 CacheType *pCache; 135 CacheType *pCache;
108 Entry *pEntry; 136 EntryType *pEntry;
109 bool bChanged; 137 bool bChanged;
110 }; 138 };
111} 139}