diff options
| author | Mike Buland <eichlan@xagasoft.com> | 2013-07-03 19:55:56 +0000 |
|---|---|---|
| committer | Mike Buland <eichlan@xagasoft.com> | 2013-07-03 19:55:56 +0000 |
| commit | 65cc54be0a14e627938731ff8deefea61c2c1cfa (patch) | |
| tree | 8c52df22ffba1a21bb3b849660adf12ebd185208 | |
| parent | 7b1f2da0d83d4e01a8d8a32e02bea6b33c61e3f4 (diff) | |
| download | libbu++-65cc54be0a14e627938731ff8deefea61c2c1cfa.tar.gz libbu++-65cc54be0a14e627938731ff8deefea61c2c1cfa.tar.bz2 libbu++-65cc54be0a14e627938731ff8deefea61c2c1cfa.tar.xz libbu++-65cc54be0a14e627938731ff8deefea61c2c1cfa.zip | |
Modified the Bu::CacheBase API, what was erase is eraseNow, and erase is about
to be re-engineered to actually do a lazy erase like removing an iNode in a
posix filesystem. While the file remains open it exists, but the references
visible to the user on disk are gone.
Diffstat (limited to '')
| -rw-r--r-- | src/tests/random.cpp | 7 | ||||
| -rw-r--r-- | src/unstable/cachebase.h | 21 |
2 files changed, 28 insertions, 0 deletions
diff --git a/src/tests/random.cpp b/src/tests/random.cpp index d7b94ce..07a2a06 100644 --- a/src/tests/random.cpp +++ b/src/tests/random.cpp | |||
| @@ -41,6 +41,13 @@ void coverage() | |||
| 41 | 41 | ||
| 42 | int main() | 42 | int main() |
| 43 | { | 43 | { |
| 44 | RandomCmwc c( 123456 ); | ||
| 45 | for( int j = 0; j < 10; j++ ) | ||
| 46 | { | ||
| 47 | println("%1").arg( c.rand() ); | ||
| 48 | } | ||
| 49 | return 0; | ||
| 50 | |||
| 44 | coverage<RandomBasic>(); | 51 | coverage<RandomBasic>(); |
| 45 | coverage<RandomCmwc>(); | 52 | coverage<RandomCmwc>(); |
| 46 | coverage<RandomSystem>(); | 53 | coverage<RandomSystem>(); |
diff --git a/src/unstable/cachebase.h b/src/unstable/cachebase.h index 270c2df..6cc3e77 100644 --- a/src/unstable/cachebase.h +++ b/src/unstable/cachebase.h | |||
| @@ -393,8 +393,27 @@ namespace Bu | |||
| 393 | return CachePtr<keytype, castto, obtype>( this, ptr.kId ); | 393 | return CachePtr<keytype, castto, obtype>( this, ptr.kId ); |
| 394 | } | 394 | } |
| 395 | 395 | ||
| 396 | /** | ||
| 397 | * Removes an item from the cache. | ||
| 398 | * This routine calls eraseNow for now. Later the intention is that | ||
| 399 | * this function will always succeed. It will remove the object from | ||
| 400 | * the backing store and the active tables. It will not be able to | ||
| 401 | * be requested again, and all changes will be ignored. When the | ||
| 402 | * object's last references are released the memory will be freed | ||
| 403 | * automatically. | ||
| 404 | */ | ||
| 396 | void erase( const keytype &key ) | 405 | void erase( const keytype &key ) |
| 397 | { | 406 | { |
| 407 | eraseNow( key ); | ||
| 408 | } | ||
| 409 | |||
| 410 | /** | ||
| 411 | * Removes an item from the cache and frees memory immediately. | ||
| 412 | * The object in question cannot have any active references in order | ||
| 413 | * for this to succeed, otherwise it will throw an exception. | ||
| 414 | */ | ||
| 415 | void eraseNow( const keytype &key ) | ||
| 416 | { | ||
| 398 | Bu::ReadWriteMutex::WriteLocker wl( mCacheEntry ); | 417 | Bu::ReadWriteMutex::WriteLocker wl( mCacheEntry ); |
| 399 | if( hCacheEntry.has( key ) ) | 418 | if( hCacheEntry.has( key ) ) |
| 400 | { | 419 | { |
| @@ -456,6 +475,8 @@ namespace Bu | |||
| 456 | Entry *pEnt = new Entry( pObject ); | 475 | Entry *pEnt = new Entry( pObject ); |
| 457 | mCacheEntry.lockWrite(); | 476 | mCacheEntry.lockWrite(); |
| 458 | hCacheEntry.insert( pObject->getKey(), pEnt ); | 477 | hCacheEntry.insert( pObject->getKey(), pEnt ); |
| 478 | if( pObject->hasChanged() ) | ||
| 479 | hChanged.insert( pObject->getKey(), true ); | ||
| 459 | mCacheEntry.unlockWrite(); | 480 | mCacheEntry.unlockWrite(); |
| 460 | _create( pObject ); | 481 | _create( pObject ); |
| 461 | pObject->setCache( this, pEnt ); | 482 | pObject->setCache( this, pEnt ); |
