#ifndef __E3GLOGOBJECTDB_H__ #define __E3GLOGOBJECTDB_H__ #include "PubCommonSingleton.h" #include "PubCommonMemoryManager.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; } }