00001
00039 #ifndef INC_MI32_MICACHE_H
00040 #define INC_MI32_MICACHE_H
00041
00042 #ifndef INC_MI32_CONTAINERITEMSYNC_H
00043 #include <mi32/containeritemsync.h>
00044 #endif
00045
00046 #ifdef MISYSTEMDLL
00047 #define CLASSEXPORT MI_DLLCLASSEXPORT
00048 #else
00049 #define CLASSEXPORT MI_DLLCLASSIMPORT
00050 #endif
00051
00052 #ifndef GENERATING_DOXYGEN_OUTPUT
00053 class MICACHEPRIV;
00054 class MICACHEITEMPRIV;
00055 class MICACHEIO;
00056 #endif // GENERATING_DOXYGEN_OUTPUT
00057
00058
00068 class CLASSEXPORT MICACHE {
00069 public:
00070
00072 enum SELECTFLAGS {
00073 SELECTFLAG_None = 0x0000,
00074 SELECTFLAG_NewItem = 0x0001,
00075 SELECTFLAG_NoRead = 0x0002
00076 };
00077
00079 class CLASSEXPORT ITEMINFO {
00080 public:
00082 ITEMINFO (
00083 );
00084
00086 ~ITEMINFO (
00087 );
00088
00090 INT32 GetItemID (
00091 ) const;
00092
00094 const void* GetMemPtr (
00095 ) const;
00096
00098 void* GetMemPtr (
00099 );
00100
00102 void* GetUserDataPtr (
00103 );
00104
00106 void SetMemPtr (
00107 void *memptr,
00108 INT32 size
00109 );
00110
00112 void SetModified (
00113 );
00114
00116 void SetUserDataPtr (
00117 void* UserDataPtr
00118 );
00119
00120 private:
00121 #ifndef GENERATING_DOXYGEN_OUTPUT
00122 MICACHEITEMPRIV* m_pPriv;
00123 MITHREAD::CONTAINERITEMSYNC::OBJECT m_ItemSync;
00124
00125 void ReleaseLock ();
00126
00127 ITEMINFO (const ITEMINFO&);
00128 ITEMINFO& operator= (const ITEMINFO&);
00129
00130 friend class MICACHEPRIV;
00131 friend class MICACHE;
00132 #endif // GENERATING_DOXYGEN_OUTPUT
00133 };
00134
00138 MICACHE ();
00139
00141 ~MICACHE ();
00142
00148 ERRVALUE Create (
00149 INT32 NumCache,
00150 INT32 ItemSize,
00151 MICACHEIO& ioref,
00152 INT32 NumHash = 0,
00153 bool bSynchronizeAccess = false
00154 );
00155
00162 ERRVALUE Create (
00163 INT32 NumCache,
00164 MICACHEIO& ioref,
00165 INT32 NumHash = 0,
00166 bool bSynchronizeAccess = false
00167 );
00168
00171 ERRVALUE Flush (
00172 );
00173
00178 ERRVALUE FlushItem (
00179 INT32 ItemID
00180 );
00181
00183 void Free (
00184 );
00185
00187 bool IsCreated (
00188 ) const;
00189
00193 ERRVALUE Read (
00194 INT32 ItemID,
00195 INT32 NumBytes,
00196 void *buffer,
00197 void* UserDataPtr = 0
00198 );
00199
00203 ERRVALUE Read (
00204 INT32 ItemID,
00205 INT32 Offset,
00206 INT32 NumBytes,
00207 void *buffer,
00208 void* UserDataPtr = 0
00209 );
00210
00216 ERRVALUE Resize (
00217 INT32 NumCache,
00218 INT32 NumHash = 0
00219 );
00220
00230 ERRVALUE Select (
00231 INT32 ItemID,
00232 ITEMINFO& iteminfo,
00233 SELECTFLAGS flags = SELECTFLAG_None,
00234 void* UserDataPtr = 0
00235 );
00236
00240 ERRVALUE Write (
00241 INT32 ItemID,
00242 INT32 NumBytes,
00243 const void *buffer,
00244 void* UserDataPtr = 0
00245 );
00246
00250 ERRVALUE Write (
00251 INT32 ItemID,
00252 INT32 Offset,
00253 INT32 NumBytes,
00254 const void *buffer,
00255 void* UserDataPtr = 0
00256 );
00257
00258 private:
00259 #ifndef GENERATING_DOXYGEN_OUTPUT
00261 MICACHEPRIV *m_priv;
00262
00264 MICACHE (const MICACHE&);
00265 MICACHE& operator= (const MICACHE&);
00266 #endif // GENERATING_DOXYGEN_OUTPUT
00267 };
00268
00270 class MICACHEIO {
00271 protected:
00274 virtual ERRVALUE CacheLoad (
00275 MICACHE::ITEMINFO& iteminfo
00276 ) = 0;
00277
00280 virtual ERRVALUE CacheSave (
00281 MICACHE::ITEMINFO& iteminfo
00282 ) = 0;
00283 friend class MICACHEPRIV;
00284 };
00285
00286 #ifndef GENERATING_DOXYGEN_OUTPUT
00287 DEFINE_ENUM_OP_BITWISE(MICACHE::SELECTFLAGS)
00288 #endif
00289
00290 #undef CLASSEXPORT
00291
00292 #endif // INC_MI32_MICACHE_H