43template<
typename TYP,
bool ISI = false,
class INV = TYP>
54 explicit CSimpleQueueT(
size_t size = 10000) : m_bufferSize(size), m_pBuffer(new TYP[size]), m_dataSize(0), m_readIndex(0)
78 m_pBuffer =
new TYP[size];
127 return (
AddElements(1, &t) == 1) ? r : INVALID_INDEX;
152 if ( (m_dataSize) + size > (m_bufferSize) )
157 size_t bs = m_bufferSize;
158 INDEX tmp = (m_readIndex + m_dataSize) % bs;
163 m_pBuffer[tmp++] = *P++;
174 m_pBuffer[tmp++] = TYP();
198 ASSERT0(
false,
"CSimpleQueueT::Take()",
"キューが空の時取得操作されました。" );
213 if ( m_dataSize < size )
218 size_t bs = m_bufferSize;
219 if ( P != NULL || ISI )
221 INDEX tmp = m_readIndex;
226 *P++ = m_pBuffer[tmp];
230 m_pBuffer[tmp] = INV();
250 const TYP&
Ref(INDEX index)
const
254 INDEX tmp = m_readIndex + index;
256 return m_pBuffer[tmp];
271 INDEX tmp = m_readIndex + index;
273 return m_pBuffer[tmp];
285 return (m_bufferSize) - (m_dataSize);
#define loop(VAR, CNT)
loop構文.
void SetQueueSize(size_t size)
[設定] リングキューサイズ指定.
TYP Take(void)
[取得] 先頭要素取り出し.
size_t GetSize(void) const
[取得] 要素数取得
bool RemoveAll(void)
[削除] データ全削除.
virtual ~CSimpleQueueT(void)
デストラクタ
size_t TakeElements(size_t size, TYP *P=NULL)
[取得] 複数要素取り出し.
size_t AddElements(size_t size, const TYP *P=NULL)
[追加] 複数要素追加.
TYP & Ref(INDEX index)
[取得] 要素アドレス取得
bool IsFull(void) const
[確認] 満タン?
const TYP & Ref(INDEX index) const
[取得] 要素参照
size_t GetFreeSize(void) const
[取得] 格納可能数取得.
INDEX Add(const TYP &t)
[追加] 要素追加.
size_t GetQueueSize(void) const
[取得] リングキューサイズ取得.
CSimpleQueueT(size_t size=10000)
コンストラクタ