diff options
| -rw-r--r-- | src/cache.h | 20 | ||||
| -rw-r--r-- | src/list.cpp | 1 | ||||
| -rw-r--r-- | src/list.h | 42 |
3 files changed, 48 insertions, 15 deletions
diff --git a/src/cache.h b/src/cache.h index 98775d2..53b4f7a 100644 --- a/src/cache.h +++ b/src/cache.h | |||
| @@ -228,6 +228,13 @@ namespace Bu | |||
| 228 | return hEnt.has( cId ) || pStore->has( cId ); | 228 | return hEnt.has( cId ) || pStore->has( cId ); |
| 229 | } | 229 | } |
| 230 | 230 | ||
| 231 | /** | ||
| 232 | * Retrieve an object from the cache and return a pointer to it. | ||
| 233 | * The object returned may be loaded from backend storage if needed, | ||
| 234 | * or the currently live object will be returned. | ||
| 235 | *@param cId The id of the object to load. | ||
| 236 | *@returns A pointer to the object. | ||
| 237 | */ | ||
| 231 | Ptr get( const keytype &cId ) | 238 | Ptr get( const keytype &cId ) |
| 232 | { | 239 | { |
| 233 | TRACE( cId ); | 240 | TRACE( cId ); |
| @@ -242,6 +249,16 @@ namespace Bu | |||
| 242 | } | 249 | } |
| 243 | } | 250 | } |
| 244 | 251 | ||
| 252 | /** | ||
| 253 | * Retrieve a handle to an object without loading it now. This function | ||
| 254 | * will return a pointer that has not yet been "realized" but can be | ||
| 255 | * used normally. Upon initial use in any way the object will be | ||
| 256 | * loaded from the cache, either linking against the already loaded | ||
| 257 | * object or loading it fresh from the backend storage. The advantage | ||
| 258 | * of this is that you recieve a usable handle to the data, but it | ||
| 259 | * does not count as a reference yet, meaning that the data is loaded | ||
| 260 | * when you need it, not before. | ||
| 261 | */ | ||
| 245 | Ptr getLazy( const keytype &cId ) | 262 | Ptr getLazy( const keytype &cId ) |
| 246 | { | 263 | { |
| 247 | TRACE( cId ); | 264 | TRACE( cId ); |
| @@ -297,7 +314,8 @@ namespace Bu | |||
| 297 | hEnt.erase( cId ); | 314 | hEnt.erase( cId ); |
| 298 | } | 315 | } |
| 299 | 316 | ||
| 300 | Bu::List<keytype> getKeys() | 317 | typedef Bu::List<keytype> KeyList; |
| 318 | KeyList getKeys() | ||
| 301 | { | 319 | { |
| 302 | return pStore->getKeys(); | 320 | return pStore->getKeys(); |
| 303 | } | 321 | } |
diff --git a/src/list.cpp b/src/list.cpp index 3f77b5c..bc7c2eb 100644 --- a/src/list.cpp +++ b/src/list.cpp | |||
| @@ -7,4 +7,3 @@ | |||
| 7 | 7 | ||
| 8 | #include "bu/list.h" | 8 | #include "bu/list.h" |
| 9 | 9 | ||
| 10 | template class Bu::List<int>; | ||
| @@ -239,10 +239,12 @@ namespace Bu | |||
| 239 | core->clear(); | 239 | core->clear(); |
| 240 | } | 240 | } |
| 241 | 241 | ||
| 242 | void enqueue( const value &v ) | 242 | MyType &enqueue( const value &v ) |
| 243 | { | 243 | { |
| 244 | _hardCopy(); | 244 | _hardCopy(); |
| 245 | append( v ); | 245 | append( v ); |
| 246 | |||
| 247 | return *this; | ||
| 246 | } | 248 | } |
| 247 | 249 | ||
| 248 | value dequeue() | 250 | value dequeue() |
| @@ -259,13 +261,15 @@ namespace Bu | |||
| 259 | * Append a value to the list. | 261 | * Append a value to the list. |
| 260 | *@param v (const value_type &) The value to append. | 262 | *@param v (const value_type &) The value to append. |
| 261 | */ | 263 | */ |
| 262 | void append( const value &v ) | 264 | MyType &append( const value &v ) |
| 263 | { | 265 | { |
| 264 | _hardCopy(); | 266 | _hardCopy(); |
| 265 | core->append( v ); | 267 | core->append( v ); |
| 268 | |||
| 269 | return *this; | ||
| 266 | } | 270 | } |
| 267 | 271 | ||
| 268 | void append( const MyType &rSrc ) | 272 | MyType &append( const MyType &rSrc ) |
| 269 | { | 273 | { |
| 270 | _hardCopy(); | 274 | _hardCopy(); |
| 271 | for( typename MyType::const_iterator i = rSrc.begin(); | 275 | for( typename MyType::const_iterator i = rSrc.begin(); |
| @@ -273,23 +277,27 @@ namespace Bu | |||
| 273 | { | 277 | { |
| 274 | core->append( *i ); | 278 | core->append( *i ); |
| 275 | } | 279 | } |
| 280 | |||
| 281 | return *this; | ||
| 276 | } | 282 | } |
| 277 | 283 | ||
| 278 | /** | 284 | /** |
| 279 | * Prepend a value to the list. | 285 | * Prepend a value to the list. |
| 280 | *@param v (const value_type &) The value to prepend. | 286 | *@param v (const value_type &) The value to prepend. |
| 281 | */ | 287 | */ |
| 282 | void prepend( const value &v ) | 288 | MyType &prepend( const value &v ) |
| 283 | { | 289 | { |
| 284 | _hardCopy(); | 290 | _hardCopy(); |
| 285 | core->prepend( v ); | 291 | core->prepend( v ); |
| 292 | |||
| 293 | return *this; | ||
| 286 | } | 294 | } |
| 287 | 295 | ||
| 288 | /** | 296 | /** |
| 289 | * Prepend another list to the front of this one. This will prepend | 297 | * Prepend another list to the front of this one. This will prepend |
| 290 | * the rSrc list in reverse order...I may fix that later. | 298 | * the rSrc list in reverse order...I may fix that later. |
| 291 | */ | 299 | */ |
| 292 | void prepend( const MyType &rSrc ) | 300 | MyType &prepend( const MyType &rSrc ) |
| 293 | { | 301 | { |
| 294 | _hardCopy(); | 302 | _hardCopy(); |
| 295 | for( typename MyType::const_iterator i = rSrc.begin(); | 303 | for( typename MyType::const_iterator i = rSrc.begin(); |
| @@ -297,13 +305,17 @@ namespace Bu | |||
| 297 | { | 305 | { |
| 298 | core->prepend( *i ); | 306 | core->prepend( *i ); |
| 299 | } | 307 | } |
| 308 | |||
| 309 | return *this; | ||
| 300 | } | 310 | } |
| 301 | 311 | ||
| 302 | void insert( MyType::iterator &i, const value &v ) | 312 | MyType &insert( MyType::iterator &i, const value &v ) |
| 303 | { | 313 | { |
| 304 | _hardCopy(); | 314 | _hardCopy(); |
| 305 | 315 | ||
| 306 | core->insert( i.pLink, v ); | 316 | core->insert( i.pLink, v ); |
| 317 | |||
| 318 | return *this; | ||
| 307 | } | 319 | } |
| 308 | 320 | ||
| 309 | /** | 321 | /** |
| @@ -313,14 +325,14 @@ namespace Bu | |||
| 313 | * List all items will be sorted. To use this, the value type must | 325 | * List all items will be sorted. To use this, the value type must |
| 314 | * support the > operator. | 326 | * support the > operator. |
| 315 | */ | 327 | */ |
| 316 | void insertSorted( const value &v ) | 328 | MyType &insertSorted( const value &v ) |
| 317 | { | 329 | { |
| 318 | _hardCopy(); | 330 | _hardCopy(); |
| 319 | if( core->pFirst == NULL ) | 331 | if( core->pFirst == NULL ) |
| 320 | { | 332 | { |
| 321 | // Empty list | 333 | // Empty list |
| 322 | core->append( v ); | 334 | core->append( v ); |
| 323 | return; | 335 | return *this; |
| 324 | } | 336 | } |
| 325 | else | 337 | else |
| 326 | { | 338 | { |
| @@ -330,13 +342,13 @@ namespace Bu | |||
| 330 | if( !core->cmp( v, *(pCur->pValue)) ) | 342 | if( !core->cmp( v, *(pCur->pValue)) ) |
| 331 | { | 343 | { |
| 332 | core->insert( pCur, v ); | 344 | core->insert( pCur, v ); |
| 333 | return; | 345 | return *this; |
| 334 | } | 346 | } |
| 335 | pCur = pCur->pNext; | 347 | pCur = pCur->pNext; |
| 336 | if( pCur == NULL ) | 348 | if( pCur == NULL ) |
| 337 | { | 349 | { |
| 338 | core->append( v ); | 350 | core->append( v ); |
| 339 | return; | 351 | return *this; |
| 340 | } | 352 | } |
| 341 | } | 353 | } |
| 342 | } | 354 | } |
| @@ -641,26 +653,30 @@ namespace Bu | |||
| 641 | * Erase an item from the list. | 653 | * Erase an item from the list. |
| 642 | *@param i (iterator) The item to erase. | 654 | *@param i (iterator) The item to erase. |
| 643 | */ | 655 | */ |
| 644 | void erase( iterator i ) | 656 | MyType &erase( iterator i ) |
| 645 | { | 657 | { |
| 646 | _hardCopy(); | 658 | _hardCopy(); |
| 647 | core->erase( i.pLink ); | 659 | core->erase( i.pLink ); |
| 660 | |||
| 661 | return *this; | ||
| 648 | } | 662 | } |
| 649 | 663 | ||
| 650 | /** | 664 | /** |
| 651 | * Erase an item from the list if you already know the item. | 665 | * Erase an item from the list if you already know the item. |
| 652 | *@param v The item to find and erase. | 666 | *@param v The item to find and erase. |
| 653 | */ | 667 | */ |
| 654 | void erase( const value &v ) | 668 | MyType &erase( const value &v ) |
| 655 | { | 669 | { |
| 656 | for( const_iterator i = begin(); i != end(); i++ ) | 670 | for( const_iterator i = begin(); i != end(); i++ ) |
| 657 | { | 671 | { |
| 658 | if( (*i) == v ) | 672 | if( (*i) == v ) |
| 659 | { | 673 | { |
| 660 | erase( i ); | 674 | erase( i ); |
| 661 | return; | 675 | return *this; |
| 662 | } | 676 | } |
| 663 | } | 677 | } |
| 678 | |||
| 679 | return *this; | ||
| 664 | } | 680 | } |
| 665 | 681 | ||
| 666 | /** | 682 | /** |
