📄 loopelementbuffer.h
字号:
#ifndef __LOOPELEMENTBUFFER_H__
#define __LOOPELEMENTBUFFER_H__
#include <afxmt.h>
template <int nElementMaxSize,int nElementNum>
class CLoopElementBuffer
{
private:
int m_nHeader;
int m_nTail;
int m_nValidNum;
int m_nValidLength[nElementNum];
char m_Buffer[nElementNum][nElementMaxSize];
CCriticalSection m_Cri;
public:
CLoopElementBuffer();
BOOL AppendTail(LPVOID pAElement,int nElementLength);
BOOL DetachHeader(LPVOID pAElement,int * npLength);
void Clear(){m_nTail=0;m_nTail=0;m_nValidNum=0;}
int GetElementNum(void){return m_nValidNum;}
BYTE* GetHeader(int * npLength);
void RemoveHeader();
void Lock(void){m_Cri.Lock();}
void Unlock(void){m_Cri.Unlock();}
};
template <int nElementMaxSize,int nElementNum>
CLoopElementBuffer<nElementMaxSize,nElementNum>::
CLoopElementBuffer()
{
m_nHeader=0;
m_nTail=0;
m_nValidNum=0;
}
template <int nElementMaxSize,int nElementNum>
BOOL CLoopElementBuffer<nElementMaxSize,nElementNum>::
AppendTail(LPVOID pAElement,int nElementLength)
{
CSingleLock sLock(&m_Cri);
sLock.Lock();
if(m_nValidNum>=nElementNum)
return FALSE;
m_nValidLength[m_nTail]=min(nElementLength,nElementMaxSize);
CopyMemory(m_Buffer[m_nTail],pAElement,m_nValidLength[m_nTail]);
m_nTail++;
m_nValidNum++;
m_nTail%=nElementNum;
return TRUE;
}
template <int nElementMaxSize,int nElementNum>
BOOL CLoopElementBuffer<nElementMaxSize,nElementNum>::
DetachHeader(LPVOID pAElement,int* pLength)
{
CSingleLock sLock(&m_Cri);
sLock.Lock();
if(m_nValidNum==0)
return FALSE;
*pLength=m_nValidLength[m_nHeader];
CopyMemory(pAElement,m_Buffer[m_nHeader],*pLength);
m_nHeader++;
m_nValidNum--;
m_nHeader%=nElementNum;
return TRUE;
}
template <int nElementMaxSize,int nElementNum>
BYTE* CLoopElementBuffer<nElementMaxSize,nElementNum>::
GetHeader(int * npLength)
{
if(m_nValidNum==0)
return FALSE;
*pLength=m_nValidLength[m_nHeader];
return m_Buffer[m_nHeader];
}
template <int nElementMaxSize,int nElementNum>
void CLoopElementBuffer<nElementMaxSize,nElementNum>::
RemoveHeader()
{
CSingleLock sLock(&m_Cri);
sLock.Lock();
if(m_nValidNum==0) return ;
m_nHeader++;
m_nValidNum--;
m_nHeader%=nElementNum;
return ;
}
#endif// __LOOPELEMENTBUFFER_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -