Magic_Game/Easy2D/Manager/EObjectManager.cpp

61 lines
1.3 KiB
C++
Raw Normal View History

#include "..\etools.h"
// EObjectManager <20>ͷųص<C5B3>ʵ<EFBFBD>ֻ<EFBFBD><D6BB>ƣ<EFBFBD>
/// EObject <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>m_nRefCount<6E><74><EFBFBD><EFBFBD>֤<EFBFBD><D6A4>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ʹ<EFBFBD>ð<EFBFBD>ȫ
/// <20><><EFBFBD><EFBFBD>¼<EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õĴ<C3B5><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ 0 ʱ<><CAB1>EObjectManager <20><><EFBFBD>Զ<EFBFBD><D4B6>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <20><><EFBFBD>е<EFBFBD> EObject <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ڱ<EFBFBD>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Text <20><><EFBFBD>ӵ<EFBFBD><D3B5>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>У<EFBFBD>
/// <20><><EFBFBD><EFBFBD> retain <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD>ö<EFBFBD><C3B6>󲻱<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> release <20><><EFBFBD><EFBFBD>
/// <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ͷ<EFBFBD>
// <20>ͷų<CDB7><C5B3><EFBFBD><EFBFBD><EFBFBD>
2017-10-17 21:22:25 +08:00
static e2d::EVector<e2d::EObject*> s_vPool;
2017-10-14 01:07:34 +08:00
// <20><>־<EFBFBD>ͷų<CDB7>ִ<EFBFBD><D6B4>״̬
static bool s_bNotifyed = false;
void e2d::EObjectManager::__flush()
{
2017-10-14 01:07:34 +08:00
if (!s_bNotifyed) return;
s_bNotifyed = false;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2017-10-17 21:22:25 +08:00
static EVector<e2d::EObject*>::iterator iter;
// ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
for (iter = s_vPool.begin(); iter != s_vPool.end();)
{
2017-10-17 21:22:25 +08:00
if ((*iter)->m_bAutoRelease && (*iter)->m_nRefCount <= 0)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õļ<C3B5><C4BC><EFBFBD>Ϊ 0, <20>ͷŸö<C5B8><C3B6><EFBFBD>
delete (*iter);
// <20><><EFBFBD>ͷų<CDB7><C5B3><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>
iter = s_vPool.erase(iter);
}
else
{
iter++; // <20>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
}
void e2d::EObjectManager::add(e2d::EObject * nptr)
{
if (!nptr->m_bManaged)
{
nptr->m_bManaged = true;
s_vPool.push_back(nptr); // <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷų<CDB7><C5B3><EFBFBD>
}
}
void e2d::EObjectManager::clearAllObjects()
{
for (const auto &obj : s_vPool)
{
delete obj;
}
s_vPool.clear();
}
2017-10-14 01:07:34 +08:00
void e2d::EObjectManager::notifyFlush()
{
s_bNotifyed = true;
}