Mnemonist
Circular Buffer
The CircularBuffer
is a buffer with a fixed capacity that can be used both as a LIFO or FIFO list very efficiently.
As such, it is mainly used as a fixed capacity Queue
.
For more information about the circular buffer, you can head here.
Note, that contrary to the FixedDeque
, the CircularBuffer
will overwrite old values when overflowing capacity.
const CircularBuffer = require('mnemonist/circular-buffer');
Constructor
The CircularBuffer
takes two arguments: a array class to use, and the desired capacity.
const buffer = new CircularBuffer(Array, 10);
// Using byte arrays
const buffer = new CircularBuffer(Int8Array, 10);
Static #.from
Alternatively, one can build a CircularBuffer
from an arbitrary JavaScript iterable likewise:
// Attempting the guess the given iterable's length/size
const buffer = CircularBuffer.from([1, 2, 3], Int8Array);
// Providing the desired capacity
const buffer = CircularBuffer.from([1, 2, 3], Int8Array, 10);
Members
Methods
Mutation
Read
Iteration
#.capacity
Maximum number of items the buffer is able to store.
const buffer = new CircularBuffer(Array, 10);
buffer.capacity
>>> 10
#.size
Number of items in the buffer.
const buffer = new CircularBuffer(Array, 10);
buffer.size
>>> 0
#.push
Append an item at the end of the buffer.
Will overwrite first value when the buffer’s capacity is exceeded.
O(1)
const buffer = new CircularBuffer(Array, 10);
buffer.push(1);
#.unshift
Prepend an item at the beginning of the buffer.
Will overwrite the last value when the buffer’s capacity is exceeded.
O(1)
const buffer = new CircularBuffer(Array, 10);
buffer.unshift(1);
#.pop
Retrieve & remove the last item of the buffer.
O(1)
const buffer = new CircularBuffer(Array, 10);
buffer.push(1);
buffer.push(2);
buffer.pop();
>>> 2
#.shift
Retrieve & remove the first item of the buffer.
O(1)
const buffer = new CircularBuffer(Array, 10);
buffer.push(1);
buffer.push(2);
buffer.shift();
>>> 1
#.clear
Completely clears the buffer.
O(1)
const buffer = new CircularBuffer(Array, 10);
buffer.push(1);
buffer.clear();
buffer.toArray();
>>> []
#.peekFirst
Retrieves the first item of the buffer.
O(1)
const buffer = new CircularBuffer(Array, 10);
buffer.push(1);
buffer.push(2);
buffer.peekFirst();
>>> 1
#.peekLast
Retrieves the last item of the buffer.
O(1)
const buffer = new CircularBuffer(Array, 10);
buffer.push(1);
buffer.push(2);
buffer.peekLast();
>>> 2
#.forEach
Iterates over the buffer’s values.
const buffer = new CircularBuffer(Array, 10);
buffer.push(1);
buffer.push(2);
buffer.forEach((item, index, buffer) => {
console.log(index, item);
});
#.toArray
Converts the buffer into a JavaScript array.
Note that the resulting array will be instantiated using the provided class.
const buffer = new CircularBuffer(Array, 10);
buffer.push(1);
buffer.push(2);
buffer.toArray();
>>> [1, 2]
#.values
Returns an iterator over the buffer’s values.
const buffer = CircularBuffer.from([1, 2, 3], Array);
const iterator = buffer.values();
iterator.next().value
>>> 1
#.entries
Returns an iterator over the buffer’s entries.
const buffer = CircularBuffer.from([1, 2, 3], Array);
const iterator = buffer.entries();
iterator.next().value
>>> [0, 1]
Iterable
Alternatively, you can iterate over a buffer’s values using ES2015 for...of
protocol:
const buffer = CircularBuffer.from([1, 2, 3], Array);
for (const item of buffer) {
console.log(item);
}