8template <
typename T>
class queueIterator {
11 unsigned int position;
15 queueIterator(T *values_ptr,
unsigned int p,
unsigned int maxSize)
16 : values_ptr{values_ptr}, position{p}, maxSize(maxSize) {
19 bool operator!=(
const queueIterator<T> &other)
const {
20 return !(*
this == other);
23 bool operator==(
const queueIterator<T> &other)
const {
24 return position == other.position;
27 queueIterator &operator++() {
28 position = (position + 1) % maxSize;
32 T &operator*()
const {
33 return *(values_ptr + position);
87 unsigned int peakSize;
95 queue(
unsigned int maxQueueSize) : maxSize(maxQueueSize) {
104 que = (T *)malloc(
sizeof(T) * maxSize);
110 peakSize = qu.peakSize;
111 maxSize = qu.maxSize;
113 quePtr0 = qu.quePtr0;
114 quePtr1 = qu.quePtr1;
116 que = (T *)malloc(
sizeof(T) * maxSize);
117 if (que ==
nullptr) {
121 unsigned int in = quePtr0;
122 for (
unsigned int i = 0; i < size; i++) {
123 que[in] = qu.que[in];
124 in = (in + 1) % maxSize;
133 if (que !=
nullptr) {
142 return queueIterator<T>(que, quePtr0, maxSize);
146 return queueIterator<T>(que, (quePtr0 + size) % maxSize, maxSize);
149 queueIterator<const T>
begin()
const {
151 return queueIterator<const T>(que, quePtr0, maxSize);
154 queueIterator<const T>
end()
const {
156 return queueIterator<const T>(que, (quePtr0 + size) % maxSize, maxSize);
159 void getInternalStartStopPtrs(
unsigned int *p0,
unsigned int *p1) {
169 if (size >= maxSize) {
173 quePtr1 = (quePtr1 + 1) % maxSize;
175 if (size > peakSize) {
187 T ent = que[quePtr0];
188 quePtr0 = (quePtr0 + 1) % maxSize;
201 bad = entryInvalidValue;
Lightweight c++11 ring buffer queue implementation.
Definition: ustd_queue.h:84
void setInvalidValue(T &entryInvalidValue)
Definition: ustd_queue.h:193
queueIterator< T > end()
Definition: ustd_queue.h:144
unsigned int peak()
Definition: ustd_queue.h:221
T pop()
Definition: ustd_queue.h:181
~queue()
Definition: ustd_queue.h:129
queueIterator< const T > end() const
Definition: ustd_queue.h:154
bool push(T ent)
Definition: ustd_queue.h:164
queue(unsigned int maxQueueSize)
Definition: ustd_queue.h:95
queueIterator< const T > begin() const
Definition: ustd_queue.h:149
queueIterator< T > begin()
Definition: ustd_queue.h:140
unsigned int length()
Definition: ustd_queue.h:214
bool isEmpty()
Definition: ustd_queue.h:204
The ustd namespace.
Definition: ustd_array.h:34