📄 objectgroupmanager.cpp
字号:
#include "StdAfx.h"
#include "ObjectGroup.h"
#include "ObjectGroupManager.h"
#include "GroupParser.h"
ObjectGroupManager::ObjectGroupManager()
{
m_pGroupPool = new CMemoryPoolFactory<ObjectGroup>;
m_pGroupList = new util::SolarHashTable<ObjectGroup *, DWORD64>;
}
ObjectGroupManager::~ObjectGroupManager()
{
SAFE_DELETE( m_pGroupPool );
SAFE_DELETE( m_pGroupList );
}
VOID ObjectGroupManager::Release()
{
if( m_pGroupPool )
{
m_pGroupPool->Release();
}
}
VOID ObjectGroupManager::Init( DWORD dwMaxPoolSize )
{
m_pGroupPool->Initialize( dwMaxPoolSize, dwMaxPoolSize/2+1 );
m_pGroupList->Initialize( dwMaxPoolSize );
}
ObjectGroup* ObjectGroupManager::AllocGroup( DWORD dwAreaID, DWORD dwGroupID )
{
// Group Key 积己
DWORD64 dw64Key;
memcpy( &dw64Key, &dwAreaID, sizeof(DWORD) ); dw64Key <<= 32;
memcpy( &dw64Key, &dwGroupID, sizeof(DWORD) );
// 捞固 鞍篮 Key狼 Group捞 粮犁窍绰瘤 八荤
ObjectGroup *pObjectGroup = FindGroup( dw64Key );
if( pObjectGroup )
{
return pObjectGroup;
}
// 秦寸窍绰 弊缝捞 绝栏搁 货肺积己
pObjectGroup = (ObjectGroup*)m_pGroupPool->Alloc();
if( !pObjectGroup )
{
SUNLOG( eCRITICAL_LOG, "[ObjectGroupManager::AllocGroup] Can't Allocate ObjectGroup " );
return NULL;
}
// ObjectGroup 檬扁拳
BASE_GROUPINFO* pBaseGroupInfo = GroupParser::Instance()->GetGroupInfo( dwGroupID );
if( !pBaseGroupInfo )
{
SUNLOG( eFULL_LOG, "[ObjectGroupManager::GetGroupInfo] Can't Get ObjectGroup %u", dwGroupID );
ASSERT( pBaseGroupInfo && "[ObjectGroupManager::GetGroupInfo] Can't Get ObjectGroup" );
return NULL;
}
pObjectGroup->Init( pBaseGroupInfo, dw64Key );
// Group Manager俊 殿废
if( m_pGroupList->Add( pObjectGroup, dw64Key ) )
{
return pObjectGroup;
}
else
{
SUNLOG( eCRITICAL_LOG, "[ObjectGroupManager::AllocGroup] AddGroup Fail! " );
m_pGroupPool->Free( pObjectGroup );
return NULL;
}
}
BOOL ObjectGroupManager::RemoveGroup( ObjectGroup *pGroup )
{
if( NULL == m_pGroupList->GetData( pGroup->GetGroupKey() ) )
{
SUNLOG( eMIDDLE_LOG, "[ObjectGroupManager::RemoveGroup] Can't Remove Group " );
return FALSE;
}
m_pGroupList->Remove( pGroup->GetGroupKey() );
m_pGroupPool->Free( pGroup );
return TRUE;
}
ObjectGroup* ObjectGroupManager::FindGroup( DWORD dwAreaID, DWORD dwGroupID )
{
// Group Key 积己
DWORD64 dw64Key;
memcpy( &dw64Key, &dwAreaID, sizeof(DWORD) ); dw64Key <<= 32;
memcpy( &dw64Key, &dwGroupID, sizeof(DWORD) );
return m_pGroupList->GetData( dw64Key );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -