#ifndef __E3GLOGOBJECTDB_H__
#define __E3GLOGOBJECTDB_H__
#include "PubCommon\Singleton.h"
#include "PubCommon\MemoryManager.h"
#include "PubCommon.h"
class CMoLineMgr
{
public:
CMoLineMgr(Win32Tools::CMemoryManager* pMemMgr);
virtual ~CMoLineMgr();
public:
void AddMemLine(CMemLine*& pMoLine);
void MoveFirst(); // 移动到第一个
bool GetMoLine(CMoLine*& pMoLine); // 循环获取 MO
size_t GetSize();
private:
Win32Tools::CMemoryManager* m_pMemMgr;
CMoLine m_BeginMoLine; // 自下一个开始有效
CMoLine* m_pAddMoLine; // 添加 MO 的专用游标
CMoLine* m_pReadMoLine; // 读取 MO 的专用游标
size_t m_iTableCnt;
};
#endif
#include "stdafx.h"
#include "MoLineMgr.h"
CMoLineMgr::CMoLineMgr(Win32Tools::CMemoryManager* pMemMgr)
: m_pMemMgr(pMemMgr)
, m_pAddMoLine(NULL)
, m_pReadMoLine(NULL)
, m_iTableCnt(0)
{
m_pAddMoLine = &m_BeginMoLine;
}
CMoLineMgr::~CMoLineMgr()
{
}
void CMoLineMgr::AddMemLine(CMemLine*& pMemLine)
{
if(pMemLine == NULL)
return;
CMoLine* pNew = (CMoLine*)m_pMemMgr->GetMemory(sizeof(CMoLine));
pNew = new (pNew) CMoLine;
pNew->m_pMemLine = pMemLine;
m_pAddMoLine->m_pNextMoLine = pNew;
m_pAddMoLine = pNew;
++m_iTableCnt;
}
size_t CMoLineMgr::GetSize(void)
{
return m_iTableCnt;
}
void CMoLineMgr::MoveFirst()
{
// 移动到第一个
m_pReadMoLine = &m_BeginMoLine;
}
bool CMoLineMgr::GetMoLine( CMoLine*& pMoLine )
{
// 循环获取 MO
if(m_pReadMoLine->m_pNextMoLine == NULL)
{
pMoLine = NULL;
return false;
}
else
{
pMoLine = m_pReadMoLine->m_pNextMoLine;
m_pReadMoLine = m_pReadMoLine->m_pNextMoLine;
return true;
}
}