knightonline/server/shared/STLMapOnlyLoad.h

68 lines
1.2 KiB
C++

#pragma once
#include <map>
template <class T>
class CSTLMapOnlyLoad
{
public:
typedef typename std::map<uint32, T*>::iterator Iterator;
std::map<uint32, T*> m_UserTypeMap;
std::recursive_mutex m_lock;
int GetSize()
{
Guard lock(m_lock);
return m_UserTypeMap.size();
}
bool IsExist(uint32 key)
{
Guard lock(m_lock);
return (m_UserTypeMap.find(key) != m_UserTypeMap.end());
}
bool IsEmpty()
{
Guard lock(m_lock);
return m_UserTypeMap.empty();
}
bool PutData(uint32 key_value, T* pData)
{
Guard lock(m_lock);
return m_UserTypeMap.insert(std::make_pair(key_value, pData)).second;
}
T* GetData(uint32 key_value)
{
Guard lock(m_lock);
auto itr = m_UserTypeMap.find(key_value);
return (itr != m_UserTypeMap.end() ? itr->second : nullptr);
}
void DeleteData(uint32 key_value)
{
Guard lock(m_lock);
auto itr = m_UserTypeMap.find(key_value);
if (itr!= m_UserTypeMap.end())
{
delete itr->second;
m_UserTypeMap.erase(itr);
}
}
void DeleteAllData()
{
Guard lock(m_lock);
if (m_UserTypeMap.empty())
return;
foreach (itr, m_UserTypeMap)
delete itr->second;
m_UserTypeMap.clear();
}
~CSTLMapOnlyLoad() { DeleteAllData(); }
};