Mnemonist

Fixed Deque


The FixedDeque is a fixed capacity double-ended queue (abbr. deque) that can be used both as a LIFO or FIFO list very efficiently.

For more information about the deque, you can head here.

Note that, contrary to the CircularBuffer, the FixedDeque will throw when overflowing capacity.

const FixedDeque = require('mnemonist/fixed-deque');

Constructor

The FixedDeque takes two arguments: a array class to use, and the desired capacity.

const deque = new FixedDeque(Array, 10);
// Using byte arrays
const deque = new FixedDeque(Int8Array, 10);

Static #.from

Alternatively, one can build a FixedDeque from an arbitrary JavaScript iterable likewise:

// Attempting the guess the given iterable's length/size
const deque = FixedDeque.from([1, 2, 3], Int8Array);
// Providing the desired capacity
const deque = FixedDeque.from([1, 2, 3], Int8Array, 10);

Members

Methods

Mutation

Read

Iteration

#.capacity

Maximum number of items the deque is able to store.

const deque = new FixedDeque(Array, 10);
deque.capacity
>>> 10

#.size

Number of items in the deque.

const deque = new FixedDeque(Array, 10);
deque.size
>>> 0

#.push

Append an item at the end of the deque.

Will throw if the deque’s capacity is exceeded.

O(1)

const deque = new FixedDeque(Array, 10);

deque.push(1);

#.unshift

Prepend an item at the beginning of the deque.

Will throw if the deque’s capacity is exceeded.

O(1)

const deque = new FixedDeque(Array, 10);

deque.unshift(1);

#.pop

Retrieve & remove the last item of the deque.

O(1)

const deque = new FixedDeque(Array, 10);

deque.push(1);
deque.push(2);
deque.pop();
>>> 2

#.shift

Retrieve & remove the first item of the deque.

O(1)

const deque = new FixedDeque(Array, 10);

deque.push(1);
deque.push(2);
deque.shift();
>>> 1

#.clear

Completely clears the deque.

O(1)

const deque = new FixedDeque(Array, 10);

deque.push(1);
deque.clear();
deque.toArray();
>>> []

#.peekFirst

Retrieves the first item of the deque.

O(1)

const deque = new FixedDeque(Array, 10);

deque.push(1);
deque.push(2);
deque.peekFirst();
>>> 1

#.peekLast

Retrieves the last item of the deque.

O(1)

const deque = new FixedDeque(Array, 10);

deque.push(1);
deque.push(2);
deque.peekLast();
>>> 2

#.forEach

Iterates over the deque’s values.

const deque = new FixedDeque(Array, 10);

deque.push(1);
deque.push(2);

deque.forEach((item, index, deque) => {
  console.log(index, item);
});

#.toArray

Converts the deque into a JavaScript array.

Note that the resulting array will be instantiated using the provided class.

const deque = new FixedDeque(Array, 10);

deque.push(1);
deque.push(2);

deque.toArray();
>>> [1, 2]

#.values

Returns an iterator over the deque’s values.

const deque = FixedDeque.from([1, 2, 3], Array);

const iterator = deque.values();

iterator.next().value
>>> 1

#.entries

Returns an iterator over the deque’s entries.

const deque = FixedDeque.from([1, 2, 3], Array);

const iterator = deque.entries();

iterator.next().value
>>> [0, 1]

Iterable

Alternatively, you can iterate over a deque’s values using ES2015 for...of protocol:

const deque = FixedDeque.from([1, 2, 3], Array);

for (const item of deque) {
  console.log(item);
}