diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/cachestorenids.h | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/src/cachestorenids.h b/src/cachestorenids.h index a5fa402..40213cd 100644 --- a/src/cachestorenids.h +++ b/src/cachestorenids.h | |||
| @@ -21,6 +21,23 @@ namespace Bu | |||
| 21 | } | 21 | } |
| 22 | 22 | ||
| 23 | template<class obtype, class keytype> | 23 | template<class obtype, class keytype> |
| 24 | void __cacheStoreNidsStore( Bu::Stream &s, obtype &rObj, | ||
| 25 | const keytype & ) | ||
| 26 | { | ||
| 27 | Bu::Archive ar( s, Bu::Archive::save ); | ||
| 28 | ar << rObj; | ||
| 29 | } | ||
| 30 | |||
| 31 | template<class obtype, class keytype> | ||
| 32 | obtype *__cacheStoreNidsLoad( Bu::Stream &s, const keytype &key ) | ||
| 33 | { | ||
| 34 | obtype *pObj = __cacheStoreNidsAlloc<obtype, keytype>( key ); | ||
| 35 | Bu::Archive ar( s, Bu::Archive::load ); | ||
| 36 | ar >> (*pObj); | ||
| 37 | return pObj; | ||
| 38 | } | ||
| 39 | |||
| 40 | template<class obtype, class keytype> | ||
| 24 | class CacheStoreNids : public CacheStore<obtype, keytype> | 41 | class CacheStoreNids : public CacheStore<obtype, keytype> |
| 25 | { | 42 | { |
| 26 | public: | 43 | public: |
| @@ -58,9 +75,7 @@ namespace Bu | |||
| 58 | { | 75 | { |
| 59 | int iStream = hId.get( key ); | 76 | int iStream = hId.get( key ); |
| 60 | NidsStream ns = nStore.openStream( iStream ); | 77 | NidsStream ns = nStore.openStream( iStream ); |
| 61 | Bu::Archive ar( ns, Bu::Archive::load ); | 78 | obtype *pOb = __cacheStoreNidsLoad<obtype, keytype>( ns, key ); |
| 62 | obtype *pOb = __cacheStoreNidsAlloc<obtype, keytype>( key ); | ||
| 63 | ar >> (*pOb); | ||
| 64 | return pOb; | 79 | return pOb; |
| 65 | } | 80 | } |
| 66 | 81 | ||
| @@ -68,8 +83,7 @@ namespace Bu | |||
| 68 | { | 83 | { |
| 69 | int iStream = hId.get( key ); | 84 | int iStream = hId.get( key ); |
| 70 | NidsStream ns = nStore.openStream( iStream ); | 85 | NidsStream ns = nStore.openStream( iStream ); |
| 71 | Bu::Archive ar( ns, Bu::Archive::save ); | 86 | __cacheStoreNidsStore<obtype, keytype>( ns, *pObj, key ); |
| 72 | ar << (*pObj); | ||
| 73 | delete pObj; | 87 | delete pObj; |
| 74 | } | 88 | } |
| 75 | 89 | ||
| @@ -79,8 +93,7 @@ namespace Bu | |||
| 79 | int iStream = nStore.createStream(); | 93 | int iStream = nStore.createStream(); |
| 80 | hId.insert( key, iStream ); | 94 | hId.insert( key, iStream ); |
| 81 | NidsStream ns = nStore.openStream( iStream ); | 95 | NidsStream ns = nStore.openStream( iStream ); |
| 82 | Bu::Archive ar( ns, Bu::Archive::save ); | 96 | __cacheStoreNidsStore<obtype, keytype>( ns, *pSrc, key ); |
| 83 | ar << (*pSrc); | ||
| 84 | return key; | 97 | return key; |
| 85 | } | 98 | } |
| 86 | 99 | ||
