5#ifndef _COLLECTION2_QUEUE_H_
6#define _COLLECTION2_QUEUE_H_
12namespace collection2 {
20template <
typename Element,
typename Size =
size_t>
26 Element*
const internalData;
31 Size internalDataSize;
56 Queue(Element*
const data,
const Size& dataSize);
85 return internalDataSize;
103 return count < internalDataSize;
116template <
typename Element,
typename Size>
120 internalDataSize = dataSize;
125 unsigned char maxbitPos = 0;
126 Size size = dataSize;
127 while ((size >>= 1) != 0) {
130 internalDataSize = 1 << maxbitPos;
133template <
typename Element,
typename Size>
137 return OperationResult::Overflow;
141 *(internalData + tail) = data;
143 tail = (tail + 1) & (internalDataSize - 1);
146 return OperationResult::Success;
149template <
typename Element,
typename Size>
153 return OperationResult::Empty;
157 *data = *(internalData + head);
159 head = (head + 1) & (internalDataSize - 1);
162 return OperationResult::Success;
キュー
Definition: queue.hpp:21
Queue(Element *const data, const Size &dataSize)
内部データを扱う領域とそのサイズを指定してキューを初期化
Definition: queue.hpp:117
Size amount() const
現在キュー内にあるデータ数を返す
Definition: queue.hpp:93
OperationResult enqueue(const Element &data)
キューにデータを追加
Definition: queue.hpp:134
bool isEmpty() const
キューが空かどうか
Definition: queue.hpp:111
OperationResult dequeue(Element *const data)
キューからデータを取り出し
Definition: queue.hpp:150
Size capacity() const
キューの全体長を返す
Definition: queue.hpp:84
bool hasSpace() const
キューに値を追加できるか
Definition: queue.hpp:102
OperationResult
コレクション操作結果
Definition: common.hpp:14