1,194
社区成员
发帖
与我相关
我的任务
分享
class TMemBase; //声明类
typedef int (TMemBase::*PFUNC)(void *, void *, void *);
class THash{
private:
void SetFunc(TMemBase *pbase, PFUNC pfunc, RFUNC rfunc, CFUNC cfunc);
TMemBase *m_pbase;
};
#include "THash.h"
class TMemBase{
private:
virtual int Print(void *key, void *val, void *data) = 0;
virtual int Check(void *key, void *val, void *pdata) = 0;
virtual void GetKVlen(size_t &klen, size_t &vlen) = 0;
void SetFunc();
PFUNC m_pfunc;
RFUNC m_rfunc;
CFUNC m_cfunc;
};
void TMemBase::SetFunc()
{
PFUNC pfunc = &TMemBase::Print;
RFUNC rfunc = &TMemBase::UpVale;
CFUNC cfunc = &TMemBase::Check;
m_pfunc = (int (TMemBase::*)(void *, void *, void *))pfunc;
m_rfunc = (int (TMemBase::*)(void *, void *, void *))rfunc;
m_cfunc = (int (TMemBase::*)(void *, void *, void *))cfunc;
m_pMem->SetFunc(this, m_pfunc, m_rfunc, m_cfunc);
}
int THash::FRelace(void *key, void *val, bool lock)
{
int ret = 0;
void *v = NULL;
_LOCK_KEY();
ret = m_shm->shb_find(key, (void **)&v); //第94行
if (ret == _SHM_HASH_FOUND) {
ret = (m_pbase->*m_rfunc)(key, v, val);
} else if (ret == _SHM_HASH_SYS_ERROR) {
ret = -2;
} else {
ret = m_shm->shb_add(key, val);
}
_UNLOCK_KEY();
return ret;
}