DragonNest/Common/Utility/CircularQueue.h
Cussrro 47f7895977 Revert "修复编码问题"
This reverts commit 9e69c01767.
2024-12-21 10:04:04 +08:00

73 lines
No EOL
1.1 KiB
C++

#pragma once
template < class T >
class CCircularQueue
{
public:
CCircularQueue( int nQueueSize )
{
m_nQueueSize = nQueueSize;
m_pQueueData = new T[ nQueueSize ];
m_nDataCount = 0;
m_nHead = 0;
m_nTail = 0;
}
virtual ~CCircularQueue()
{
if( m_pQueueData )
{
delete [] m_pQueueData;
m_pQueueData = NULL;
}
}
private:
T *m_pQueueData;
int m_nQueueSize;
int m_nDataCount;
int m_nHead;
int m_nTail;
public:
bool Push( T &Data )
{
if( m_nDataCount >= m_nQueueSize )
{
return false;
}
m_pQueueData[ m_nTail ] = Data;
m_nTail = ( m_nTail + 1 ) % m_nQueueSize;
m_nDataCount++;
return true;
}
bool Pop( T &Data )
{
if( m_nDataCount <= 0 )
{
return false;
}
Data = m_pQueueData[ m_nHead ];
m_nHead = ( m_nHead + 1) % m_nQueueSize;
m_nDataCount--;
return true;
}
bool IsEmpty() { return m_nDataCount == 0; }
int Size() { return m_nDataCount; }
T operator[] ( int nIndex )
{
ASSERT( nIndex < m_nDataCount );
int nNewIndex;
nNewIndex = ( m_nHead + nIndex ) % m_nQueueSize;
return m_pQueueData[ nNewIndex ];
}
};