00001
00023 #ifndef INC_MI32_ARRAYCACHE_H
00024 #define INC_MI32_ARRAYCACHE_H
00025
00026 #ifndef INC_RVC_ARRAY_H
00027 #include <rvc/array.h>
00028 #endif
00029
00030 #ifndef INC_MI32_MICACHE_H
00031 #include <mi32/micache.h>
00032 #endif
00033
00034
00035 template <typename _TT> class ARRAYCACHE : public MICACHEIO {
00036 public:
00037
00038 ARRAYCACHE (
00039 ) : m_pObjArray(0)
00040 { }
00041
00042 virtual ~ARRAYCACHE () {}
00043
00044 void Clear (
00045 ) {
00046 m_Cache.Flush();
00047 m_Cache.Free();
00048 m_pObjArray = 0;
00049 }
00050
00051 ERRVALUE Init (
00052 const INT32 NumCache,
00053 RVC::ARRAY *pObjArray
00054 ) {
00055 ERRVALUE err = m_Cache.Create(NumCache, sizeof(_TT), *this);
00056 if (err < 0) return err;
00057 m_pObjArray = pObjArray;
00058 return 0;
00059 }
00060
00061 ERRVALUE Read (
00062 const INT32 itemid,
00063 _TT& item
00064 ) { return (m_Cache.Read(itemid, 0, sizeof(_TT), &item, m_pObjArray)); }
00065
00066 ERRVALUE Select (
00067 const INT32 itemid,
00068 MICACHE::ITEMINFO& iteminfo
00069 ) { return (m_Cache.Select(itemid, iteminfo, MICACHE::SELECTFLAG_None, m_pObjArray)); }
00070
00071 private:
00072 #ifndef GENERATING_DOXYGEN_OUTPUT
00073
00074 RVC::ARRAY *m_pObjArray;
00075 MICACHE m_Cache;
00076
00077 ERRVALUE CacheLoad (
00078 MICACHE::ITEMINFO &iteminfo
00079 ) {
00080 RVC::ARRAY* Array = (RVC::ARRAY*)iteminfo.GetUserDataPtr();
00081 return Array->Read(iteminfo.GetItemID(), iteminfo.GetMemPtr());
00082 }
00083
00084 ERRVALUE CacheSave (
00085 MICACHE::ITEMINFO& iteminfo
00086 ) {
00087 RVC::ARRAY* Array = (RVC::ARRAY*)iteminfo.GetUserDataPtr();
00088 return Array->Write(iteminfo.GetItemID(), iteminfo.GetMemPtr());
00089 }
00090
00091 #endif
00092 };
00093
00094 #endif