# Mnemonist

## SparseQueueSet

A `SparseQueueSet` is a very time-efficient set structure used to store a range of unsigned integers in FIFO order. Note however that this structure can consume a lot of memory (it relies on two byte arrays having a length equal to the maximum integer you need to store).

The `SparseQueueSet` is to be used as a queue where elements cannot exist more than once.

``````const SparseQueueSet = require('mnemonist/sparse-queue-set');
``````

## Constructor

``````const queue = new SparseQueueSet(length);
``````

## Methods

Mutation

Iteration

### #.capacity

Capacity of the set, that is to say the maximum number one can expect to store in this set minus one.

``````const queue = new SparseQueueSet(4);

queue.capacity;
>>> 4
``````

### #.size

Number of items currently in the queue.

``````const queue = new SparseQueueSet(4);

queue.size;
>>> 0

queue.enqueue(2);

queue.size;
>>> 1
``````

### #.enqueue

Adds a number to the queue.

`O(1)`

``````const queue = new SparseQueueSet(4);

queue.enqueue(2);
queue.has(2);
>>> true
``````

### #.dequeue

Removes and retrieves the first item stored in the queue or `undefined`.

`O(1)`

``````const queue = new SparseQueueSet(4);

queue.enqueue(2);
queue.enqueue(0);
queue.dequeue();
>>> 2

queue.has(2)
>>> false
``````

Removes every number stored in the queue.

``````const queue = new SparseQueueSet(4);

queue.enqueue(1);
queue.enqueue(3);

queue.clear();
queue.size
>>> 0
``````

### #.has

Returns whether the given number exists in the queue.

`O(1)`

``````const queue = new SparseQueueSet(4);

queue.has(3);
>>> false

queue.enqueue(3);
queue.has(3);
>>> true
``````

### #.forEach

Iterates over the queue’s numbers.

``````const queue = new SparseQueueSet(4);

queue.enqueue(1);

queue.forEach((number) => {
console.log(number);
});
``````

### #.values

Returns an iterator over the queue’s number.

``````const queue = new SparseQueueSet(4);

queue.enqueue(2);

const iterator = queue.values()

iteraror.next().value
>>> 2
``````

### Iterable

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

``````const queue = new SparseQueueSet(4);

for (const number of queue) {
console.log(number);
}
``````