diff options
author | Mike Buland <eichlan@xagasoft.com> | 2014-01-22 16:28:46 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2014-01-22 16:28:46 +0000 |
commit | 86e37bec7b2101555635201f83352c0e054f1849 (patch) | |
tree | 4d2a3652689ac7b615db82bdab520c2ed42dd705 /src/unstable/cacheobject.h | |
parent | 44a228640c782e46baf528749b5776714749ef2d (diff) | |
download | libbu++-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 'src/unstable/cacheobject.h')
-rw-r--r-- | src/unstable/cacheobject.h | 34 |
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 | } |