CMoLineMgr

#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; 
    } 
} 
原文地址:https://www.cnblogs.com/hongjiumu/p/3588270.html