empty the buffer
range interface
assignment
push to buffer
retrieve item from buffer (lifo)
range interface
push to buffer
retrieve item from buffer (fifo)
example
RingBuffer!(int, 5) buff; // non-power-of-two lengths are supported, though powers of two will be faster buff.push(69); buff ~= 420; // equivilent to the push syntax assert(buff.shift == 69); assert(buff.shift == 420); import std.array : staticArray; import std.range : iota; immutable int[5] temp = staticArray!(iota(5)); buff.push(temp); // multiple items may be pushed in a single call assert(buff.length == 5); assert(buff.capacity == 0); assert(buff.pop == 4); assert(buff.length == 4); assert(buff.capacity == 1); buff.clear(); assert(buff.length == 0); assert(buff.capacity == 5);
Date: 2022-02-03 Licence: AGPL-3.0 or later
Susan, 2022 special thanks to my good friend flussence, whose advice while making this module was invaluable. <3
a simple @safe and @nogc-compatible template ringbuffer.