linux内核队列实现
#ifndef _SIMPLEQUEUE_
#define _SIMPLEQUEUE_
#ifdef __cplusplus
extern "C" {
#endif
#include "kdvtype.h"
const u32 m_gMaxSize=100;
class SimpleQueue
{
public:
SimpleQueue()
{
SetMaxSize(m_gMaxSize);
m_nIn=0;
m_nOut=0;
memset(m_pData,0,sizeof(m_pData));
}
virtual ~SimpleQueue()
{
}
u32 MaxSize()
{
return m_dwMaxSize;
}
u32 Size()
{
return m_nIn-m_nOut;
}
s32 Put(void *pIn)
{
if(m_nIn-m_nOut>=m_dwMaxSize)
return -1;
u32 nPos=m_nIn & m_dwMaxSizeLess;
m_pData[nPos]=pIn;
m_nIn++;
return 0;
}
s32 Fetch(void **pOut)
{
if(m_nIn-m_nOut<=0)
return -1;
u32 nPos=m_nOut & m_dwMaxSizeLess;
*pOut=m_pData[nPos];
m_nOut++;
return 0;
}
private:
void SetMaxSize(u32 dwMaxSize)
{
m_dwMaxSize=dwMaxSize;
m_dwMaxSizeLess=m_dwMaxSize-1;
}
private:
void * m_pData[m_gMaxSize];
u32 m_dwMaxSize;
u32 m_dwMaxSizeLess;
volatile u32 m_nIn;
volatile u32 m_nOut;
};
#ifdef __cplusplus
}
#endif
#endif