diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cache.h | 25 | ||||
-rw-r--r-- | src/cachecalc.h | 4 | ||||
-rw-r--r-- | src/tests/cache.cpp | 17 |
3 files changed, 38 insertions, 8 deletions
diff --git a/src/cache.h b/src/cache.h index 036ceb4..4ae1aa8 100644 --- a/src/cache.h +++ b/src/cache.h | |||
@@ -143,6 +143,7 @@ namespace Bu | |||
143 | { | 143 | { |
144 | obtype *pData; | 144 | obtype *pData; |
145 | int iRefs; | 145 | int iRefs; |
146 | time_t tLastSync; | ||
146 | } CacheEntry; | 147 | } CacheEntry; |
147 | 148 | ||
148 | typedef Bu::Hash<keytype, CacheEntry> CidHash; | 149 | typedef Bu::Hash<keytype, CacheEntry> CidHash; |
@@ -184,7 +185,7 @@ namespace Bu | |||
184 | Ptr insert( obtype *pData ) | 185 | Ptr insert( obtype *pData ) |
185 | { | 186 | { |
186 | TRACE( pData ); | 187 | TRACE( pData ); |
187 | CacheEntry e = {pData, 0}; | 188 | CacheEntry e = {pData, 0, 0}; |
188 | keytype k = pStore->create( pData ); | 189 | keytype k = pStore->create( pData ); |
189 | hEnt.insert( k, e ); | 190 | hEnt.insert( k, e ); |
190 | 191 | ||
@@ -205,7 +206,7 @@ namespace Bu | |||
205 | return Ptr( this, hEnt.get( cId ).pData, cId ); | 206 | return Ptr( this, hEnt.get( cId ).pData, cId ); |
206 | } | 207 | } |
207 | catch( Bu::HashException &e ) { | 208 | catch( Bu::HashException &e ) { |
208 | CacheEntry e = {pStore->load( cId ), 0}; | 209 | CacheEntry e = {pStore->load( cId ), 0, time( NULL )}; |
209 | pCalc->onLoad( e.pData, cId ); | 210 | pCalc->onLoad( e.pData, cId ); |
210 | hEnt.insert( cId, e ); | 211 | hEnt.insert( cId, e ); |
211 | return Ptr( this, e.pData, cId ); | 212 | return Ptr( this, e.pData, cId ); |
@@ -285,11 +286,19 @@ namespace Bu | |||
285 | { | 286 | { |
286 | if( i.getValue().iRefs == 0 ) | 287 | if( i.getValue().iRefs == 0 ) |
287 | { | 288 | { |
288 | pStore->sync( | 289 | if( pCalc->shouldSync( |
289 | i.getValue().pData, | 290 | i.getValue().pData, |
290 | i.getKey() | 291 | i.getKey(), |
291 | ); | 292 | i.getValue().tLastSync |
292 | iSynced++; | 293 | ) ) |
294 | { | ||
295 | pStore->sync( | ||
296 | i.getValue().pData, | ||
297 | i.getKey() | ||
298 | ); | ||
299 | iSynced++; | ||
300 | i.getValue().tLastSync = time( NULL ); | ||
301 | } | ||
293 | } | 302 | } |
294 | } | 303 | } |
295 | if( iSynced > 0 ) | 304 | if( iSynced > 0 ) |
@@ -319,7 +328,7 @@ namespace Bu | |||
319 | return hEnt.get( cId ).pData; | 328 | return hEnt.get( cId ).pData; |
320 | } | 329 | } |
321 | catch( Bu::HashException &e ) { | 330 | catch( Bu::HashException &e ) { |
322 | CacheEntry e = {pStore->load( cId ), 0}; | 331 | CacheEntry e = {pStore->load( cId ), 0, time( NULL )}; |
323 | pCalc->onLoad( e.pData, cId ); | 332 | pCalc->onLoad( e.pData, cId ); |
324 | hEnt.insert( cId, e ); | 333 | hEnt.insert( cId, e ); |
325 | return e.pData; | 334 | return e.pData; |
diff --git a/src/cachecalc.h b/src/cachecalc.h index dd9712f..7fdb16e 100644 --- a/src/cachecalc.h +++ b/src/cachecalc.h | |||
@@ -3,6 +3,8 @@ | |||
3 | 3 | ||
4 | #include "bu/trace.h" | 4 | #include "bu/trace.h" |
5 | 5 | ||
6 | #include <time.h> | ||
7 | |||
6 | namespace Bu | 8 | namespace Bu |
7 | { | 9 | { |
8 | template<class obtype, class keytype> class Cache; | 10 | template<class obtype, class keytype> class Cache; |
@@ -27,6 +29,8 @@ namespace Bu | |||
27 | 29 | ||
28 | virtual void onLoad( obtype *pSrc, const keytype &key )=0; | 30 | virtual void onLoad( obtype *pSrc, const keytype &key )=0; |
29 | virtual void onUnload( obtype *pSrc, const keytype &key )=0; | 31 | virtual void onUnload( obtype *pSrc, const keytype &key )=0; |
32 | virtual bool shouldSync( obtype *pSrc, const keytype &key, | ||
33 | time_t tLastSync )=0; | ||
30 | virtual void onTick() { }; | 34 | virtual void onTick() { }; |
31 | 35 | ||
32 | protected: | 36 | protected: |
diff --git a/src/tests/cache.cpp b/src/tests/cache.cpp index 323edda..8d95a9d 100644 --- a/src/tests/cache.cpp +++ b/src/tests/cache.cpp | |||
@@ -96,6 +96,19 @@ public: | |||
96 | f.write( s ); | 96 | f.write( s ); |
97 | } | 97 | } |
98 | 98 | ||
99 | virtual void sync( Bob *, const long & ) | ||
100 | { | ||
101 | } | ||
102 | |||
103 | virtual void sync() | ||
104 | { | ||
105 | } | ||
106 | |||
107 | virtual bool has( const long & ) | ||
108 | { | ||
109 | return true; | ||
110 | } | ||
111 | |||
99 | virtual Bob *load( const long &key ) | 112 | virtual Bob *load( const long &key ) |
100 | { | 113 | { |
101 | TRACE( key ); | 114 | TRACE( key ); |
@@ -156,6 +169,10 @@ public: | |||
156 | { | 169 | { |
157 | } | 170 | } |
158 | 171 | ||
172 | virtual bool shouldSync( Bob *, const long &, time_t ) | ||
173 | { | ||
174 | } | ||
175 | |||
159 | private: | 176 | private: |
160 | 177 | ||
161 | }; | 178 | }; |