📄 dataqueue.h
字号:
/************************************
*file: dataqueue.h
*writer: linsh
*date: 2004-07-24
************************************/
#ifndef DATAQUEUE_H_LINSH_2004_07_24
#define DATAQUEUE_H_LINSH_2004_07_24
#define MAX_QUEUE_COUNST 1000
template <class _Tp>
class CDataQueue
{
struct QUEUE_NODE
{
_Tp body;
struct QUEUE_NODE *next;
};
typedef _Tp NodeType;
public:
CDataQueue();
CDataQueue(int imax);
~CDataQueue();
void WriteDataToQueue(NodeType *snode);
int ReadDataFromQueue(NodeType *dnode);
protected:
struct QUEUE_NODE *m_pHead;
struct QUEUE_NODE *m_pTail;
int m_counst;
int m_counLimit;
};
template <class _Tp>
CDataQueue<_Tp>::CDataQueue()
{
m_pHead = NULL;
m_pTail = NULL;
m_counst = 0;
m_counLimit = MAX_QUEUE_COUNST;
}
template <class _Tp>
CDataQueue<_Tp>::CDataQueue(int imax)
{
m_pHead = NULL;
m_pTail = NULL;
m_counst = 0;
m_counLimit = imax;
}
template <class _Tp>
CDataQueue<_Tp>::~CDataQueue()
{
QUEUE_NODE *ppNode;
QUEUE_NODE *delNode;
ppNode = m_pHead;
while (ppNode != NULL)
{
delNode = ppNode;
ppNode = ppNode->next;
delete delNode;
}
m_pHead = NULL;
m_pTail = NULL;
m_counst = 0;
}
template <class _Tp>
void CDataQueue<_Tp>::WriteDataToQueue(NodeType *snode)
{
QUEUE_NODE *node;
if(m_counst >= m_counLimit)
return;
node = new (QUEUE_NODE);
memcpy(&node->body, snode,sizeof(NodeType));
node->next = NULL;
if(m_pTail == NULL)
{
m_pHead = node;
m_pTail = node;
}
else
{
m_pTail->next = node;
m_pTail = node;
}
m_counst++;
}
template <class _Tp>
int CDataQueue<_Tp>::ReadDataFromQueue(NodeType *dnode)
{
QUEUE_NODE *node;
if(m_pHead == NULL)
return -1;
if(m_pHead == m_pTail)
{
memcpy(dnode, (void *)&m_pHead->body, sizeof(NodeType));
delete m_pHead;
m_pHead = NULL;
m_pTail = NULL;
}else
{
memcpy(dnode, (void *)&m_pHead->body, sizeof(NodeType));
node = m_pHead;
m_pHead = m_pHead->next;
delete node;
}
m_counst--;
return 0;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -