14 struct WrappingIndex {
15 WrappingIndex(
size_t sz) : sz(sz) { }
16 WrappingIndex(
const WrappingIndex &other) : val(other.val), sz(other.sz) {}
17 WrappingIndex& operator=(
const WrappingIndex &other) {
27 size_t operator++(
int) {
49 void push(T &&val)
override {
51 q[tail++] = std::move(val);
68 return std::move(q[head++]);
92 return q[(head + idx) % head.sz];
simple Buffer backed queue implementation
Definition queue.h:12
Queue(const Buffer< T > &buf)
create Queue directly from filled Buffer
Definition queue.h:36
T pop() override
remove front of queue and return it
Definition queue.h:65
T getAt(size_t idx)
return element at idx
Definition queue.h:91
Queue(size_t size=30)
create Queue with constant size
Definition queue.h:39
bool empty() override
check if queue is empty
Definition queue.h:83
bool full() override
return true if queue is full
Definition queue.h:87
void push(T &&val) override
move element into queue
Definition queue.h:49
void drop()
shift head of queue without touching underlying memory
Definition queue.h:73
size_t size()
return number of elements in queue
Definition queue.h:79
T & front()
return reference to first element in queue
Definition queue.h:55
dynamically allocated, but fixed-size buffer template
Definition buffer.h:18
size_t size
total capacity of buffer
Definition buffer.h:23
size_t len
number of items stored in buffer
Definition buffer.h:21
generic object sink, i.e.
Definition streams.h:15
generic object source, i.e.
Definition streams.h:40