diff options
Diffstat (limited to 'src/cptr.h')
| -rw-r--r-- | src/cptr.h | 12 |
1 files changed, 10 insertions, 2 deletions
| @@ -5,22 +5,29 @@ namespace Bu | |||
| 5 | { | 5 | { |
| 6 | template<class obtype> class Cache; | 6 | template<class obtype> class Cache; |
| 7 | 7 | ||
| 8 | /** | ||
| 9 | * Cache Pointer - Provides access to data that is held within the cache. | ||
| 10 | * This provides safe, refcounting access to data stored in the cache, with | ||
| 11 | * support for lazy loading. | ||
| 12 | */ | ||
| 8 | template<class obtype> | 13 | template<class obtype> |
| 9 | class CPtr | 14 | class CPtr |
| 10 | { | 15 | { |
| 11 | friend class Bu::Cache<obtype>; | 16 | friend class Bu::Cache<obtype>; |
| 17 | public: | ||
| 18 | typedef long cid_t; /**< Cache ID type. Unique cache entry ID. */ | ||
| 12 | private: | 19 | private: |
| 13 | CPtr( Cache<obtype> &rCache, obtype *pData ) : | 20 | CPtr( Cache<obtype> &rCache, obtype *pData ) : |
| 14 | rCache( rCache ), | 21 | rCache( rCache ), |
| 15 | pData( pData ) | 22 | pData( pData ) |
| 16 | { | 23 | { |
| 17 | rCache.incRef( pData ); | 24 | rCache.incRef( cId ); |
| 18 | } | 25 | } |
| 19 | 26 | ||
| 20 | public: | 27 | public: |
| 21 | virtual ~CPtr() | 28 | virtual ~CPtr() |
| 22 | { | 29 | { |
| 23 | rCache.decRef( pData ); | 30 | rCache.decRef( cId ); |
| 24 | } | 31 | } |
| 25 | 32 | ||
| 26 | obtype &operator*() | 33 | obtype &operator*() |
| @@ -36,6 +43,7 @@ namespace Bu | |||
| 36 | private: | 43 | private: |
| 37 | Bu::Cache<obtype> &rCache; | 44 | Bu::Cache<obtype> &rCache; |
| 38 | obtype *pData; | 45 | obtype *pData; |
| 46 | cid_t cId; | ||
| 39 | }; | 47 | }; |
| 40 | }; | 48 | }; |
| 41 | 49 | ||
