diff options
Diffstat (limited to 'src/cachestorenids.h')
-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 | ||