64,637
社区成员
发帖
与我相关
我的任务
分享
class CMemoryTable_DeviceAssociate
{
public:
CMemoryTable_DeviceAssociate();
~CMemoryTable_DeviceAssociate();
public:
BOOL MemoryTable_DeviceAssociate_Insert(LPCTSTR lpszDeviceAddr,DEVICEASSOCIATE_ADDR *pSt_DeviceAssociate);
BOOL MemoryTable_DeviceAssociate_Get(LPCTSTR lpszDeviceAddr,DEVICEASSOCIATE_ADDR *pSt_DeviceAssociate);
BOOL MemoryTable_DeviceAssociate_Set(LPCTSTR lpszDeviceAddr,DEVICEASSOCIATE_ADDR *pSt_DeviceAssociate);
BOOL MemoryTable_DeviceAssociate_Del(LPCTSTR lpszDeviceAddr,BOOL bDelAll = FALSE);
BOOL MemoryTable_DeviceAssociate_IfNotExist(LPCTSTR lpszDeviceAddr,DEVICEASSOCIATE_ADDR *pSt_DeviceAssociate);
protected:
private:
pthread_mutex_t st_csStlRW;
private:
unordered_map<tstring,DEVICEASSOCIATE_ADDR> stl_MapDeviceAssociate;
};
CMemoryTable_DeviceAssociate::CMemoryTable_DeviceAssociate()
{
pthread_mutex_init(&st_csStlRW,NULL);
}
CMemoryTable_DeviceAssociate::~CMemoryTable_DeviceAssociate()
{
pthread_mutex_destroy(&st_csStlRW);
}
//////////////////////////////////////////////////////////////////////
// 公有函数
//////////////////////////////////////////////////////////////////////
BOOL CMemoryTable_DeviceAssociate::MemoryTable_DeviceAssociate_Insert(LPCTSTR lpszDeviceAddr,DEVICEASSOCIATE_ADDR *pSt_DeviceAssociate)
{
MemoryTable_IsErrorOccur = FALSE;
if ((NULL == lpszDeviceAddr) || (NULL == pSt_DeviceAssociate))
{
MemoryTable_IsErrorOccur = TRUE;
MemoryTable_dwErrorCode = ERROR_NETCENTER_LOGIC_MEMORYTABLE_ASSOCIATE_INSERT_PARAMENT;
return FALSE;
}
unordered_map<tstring,DEVICEASSOCIATE_ADDR>::const_iterator stl_MapIterator = stl_MapDeviceAssociate.find(lpszDeviceAddr);
if (stl_MapIterator != stl_MapDeviceAssociate.end())
{
MemoryTable_IsErrorOccur = TRUE;
MemoryTable_dwErrorCode = ERROR_NETCENTER_LOGIC_MEMORYTABLE_ASSOCIATE_INSERT_ISEXIST;
return FALSE;
}
pthread_mutex_lock(&st_csStlRW);
stl_MapDeviceAssociate.insert(make_pair(m_String,*pSt_DeviceAssociate));
pthread_mutex_unlock(&st_csStlRW);
return TRUE;
}
BOOL CMemoryTable_DeviceAssociate::MemoryTable_DeviceAssociate_Get(LPCTSTR lpszDeviceAddr,DEVICEASSOCIATE_ADDR *pSt_DeviceAssociate)
{
MemoryTable_IsErrorOccur = FALSE;
if ((NULL == lpszDeviceAddr) || (NULL == pSt_DeviceAssociate))
{
MemoryTable_IsErrorOccur = TRUE;
MemoryTable_dwErrorCode = ERROR_NETCENTER_LOGIC_MEMORYTABLE_ASSOCIATE_GET_PARAMENT;
return FALSE;
}
pthread_mutex_lock(&st_csStlRW);
unordered_map<tstring,DEVICEASSOCIATE_ADDR>::const_iterator stl_MapIterator = stl_MapDeviceAssociate.find(m_String);
if (stl_MapIterator == stl_MapDeviceAssociate.end())
{
MemoryTable_IsErrorOccur = TRUE;
MemoryTable_dwErrorCode = ERROR_NETCENTER_LOGIC_MEMORYTABLE_ASSOCIATE_GET_NOTFOUND;
pthread_mutex_unlock(&st_csStlRW);
return FALSE;
}
memcpy(pSt_DeviceAssociate,&stl_MapIterator->second,sizeof(DEVICEASSOCIATE_ADDR));
pthread_mutex_unlock(&st_csStlRW);
return TRUE;
}
BOOL CMemoryTable_DeviceAssociate::MemoryTable_DeviceAssociate_Set(LPCTSTR lpszDeviceAddr,DEVICEASSOCIATE_ADDR *pSt_DeviceAssociate)
{
MemoryTable_IsErrorOccur = FALSE;
if ((NULL == lpszDeviceAddr) || (NULL == pSt_DeviceAssociate))
{
MemoryTable_IsErrorOccur = TRUE;
MemoryTable_dwErrorCode = ERROR_NETCENTER_LOGIC_MEMORYTABLE_ASSOCIATE_SET_PARAMENT;
return FALSE;
}
unordered_map<tstring,DEVICEASSOCIATE_ADDR>::iterator stl_MapIterator = stl_MapDeviceAssociate.find(lpszDeviceAddr);
if (stl_MapIterator == stl_MapDeviceAssociate.end())
{
MemoryTable_IsErrorOccur = TRUE;
MemoryTable_dwErrorCode = ERROR_NETCENTER_LOGIC_MEMORYTABLE_ASSOCIATE_SET_NOTFOUND;
return FALSE;
}
pthread_mutex_lock(&st_csStlRW);
memcpy(&stl_MapIterator->second,pSt_DeviceAssociate,sizeof(DEVICEASSOCIATE_ADDR));
pthread_mutex_unlock(&st_csStlRW);
return TRUE;
}
BOOL CMemoryTable_DeviceAssociate::MemoryTable_DeviceAssociate_Del(LPCTSTR lpszDeviceAddr,BOOL bDelAll)
{
MemoryTable_IsErrorOccur = FALSE;
if (bDelAll)
{
pthread_mutex_lock(&st_csStlRW);
stl_MapDeviceAssociate.clear();
pthread_mutex_unlock(&st_csStlRW);
}
else
{
if (NULL == lpszDeviceAddr)
{
MemoryTable_IsErrorOccur = TRUE;
MemoryTable_dwErrorCode = ERROR_NETCENTER_LOGIC_MEMORYTABLE_ASSOCIATE_DEL_PARAMENT;
return FALSE;
}
unordered_map<tstring,DEVICEASSOCIATE_ADDR>::iterator stl_MapIterator = stl_MapDeviceAssociate.find(lpszDeviceAddr);
if (stl_MapIterator == stl_MapDeviceAssociate.end())
{
MemoryTable_IsErrorOccur = TRUE;
MemoryTable_dwErrorCode = ERROR_NETCENTER_LOGIC_MEMORYTABLE_ASSOCIATE_DEL_NOTFOUND;
return FALSE;
}
pthread_mutex_lock(&st_csStlRW);
stl_MapDeviceAssociate.erase(stl_MapIterator);
pthread_mutex_unlock(&st_csStlRW);
}
return TRUE;
}
BOOL CMemoryTable_DeviceAssociate::MemoryTable_DeviceAssociate_IfNotExist(LPCTSTR lpszDeviceAddr,DEVICEASSOCIATE_ADDR *pSt_DeviceAssociate)
{
MemoryTable_IsErrorOccur = FALSE;
if ((NULL == lpszDeviceAddr) || (NULL == pSt_DeviceAssociate))
{
MemoryTable_IsErrorOccur = TRUE;
MemoryTable_dwErrorCode = ERROR_NETCENTER_LOGIC_MEMORYTABLE_ASSOCIATE_INSERTORUPDATA_PARAMENT;
return FALSE;
}
unordered_map<tstring,DEVICEASSOCIATE_ADDR>::const_iterator stl_MapIterator = stl_MapDeviceAssociate.find(lpszDeviceAddr);
if (stl_MapIterator == stl_MapDeviceAssociate.end())
{
if (!MemoryTable_DeviceAssociate_Insert(lpszDeviceAddr,pSt_DeviceAssociate))
{
return FALSE;
}
}
else
{
if (!MemoryTable_DeviceAssociate_Set(lpszDeviceAddr,pSt_DeviceAssociate))
{
return FALSE;
}
}
return TRUE;
}