# fifo

> FIFO queue implemented using a double linked-list

Latest version **2.4.1** (published 2021-07-10) · MIT license · 0 weekly downloads

## Install

```sh
npm install fifo
pnpm add fifo
yarn add fifo
bun add fifo
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.4.1 |
| Published | 2021-07-10 |
| First published | 2013-07-13 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 10.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 57 |
| Author | Mathias Buus |
| Maintainers | mafintosh |

## Links

- npm: https://www.npmjs.com/package/fifo
- Repository: https://github.com/mafintosh/fifo
- Issues: https://github.com/mafintosh/fifo/issues
- npm.io page: https://npm.io/package/fifo

## Recent versions

- 2.4.1 (latest) — 2021-07-10
- 2.4.0 — 2021-07-05
- 2.3.0 — 2015-11-08
- 2.2.1 — 2015-11-08
- 2.2.0 — 2015-11-08
- 2.1.0 — 2015-04-17
- 2.0.0 — 2015-01-14
- 0.2.0 — 2013-09-21
- 0.1.4 — 2013-07-28
- 0.1.3 — 2013-07-15
- 0.1.2 — 2013-07-13
- 0.1.1 — 2013-07-13
- 0.1.0 — 2013-07-13

## README

# fifo

FIFO queue implemented using a double linked-list

```
npm install fifo
```

[![build status](http://img.shields.io/travis/mafintosh/fifo.svg?style=flat)](http://travis-ci.org/mafintosh/fifo)

## Usage

``` js
var fifo = require('fifo')()

fifo.push('hello')
fifo.push('world')

console.log(fifo.first()) // prints hello
console.log(fifo.last())  // prints world

console.log(fifo.shift()) // prints hello
console.log(fifo.shift()) // prints world

var node = fifo.push('meh')

fifo.remove(node)     // remove 'meh' from the stack
fifo.unshift('hello') // insert at the beginning
```

`fifo` uses a linked list behind the scene so all list manipulation methods run in O(1)

## API

#### `fifo = FIFO()`

Create a new instance

#### `fifo.node`

Contains the first node on the list.

#### `fifo.length`

Number of nodes in the list.

#### `node = fifo.push(value)`

Push a new value to the end of the list. Returns a node that contains this value.
The value can be accessed by accessing `node.value`.

#### `value = fifo.shift()`

Removes the first node and returns the value

#### `value = fifo.pop()`

Removes the last node and returns the value

#### `value = fifo.remove(node)`

Removes the node and returns the value

#### `fifo.add(node)`

Readds a node. Should only be done with a node that has been removed.

#### `value = fifo.first()`

Peek at the first value

#### `value = fifo.last()`

Peek at the last value

#### `node = fifo.unshift(value)`

Inserts a value at the beginning of the list

#### `node = fifo.next(node)`

Returns the next node relative to the node you pass.
If the node was the last node in the list `null` is returned.

#### `node = fifo.prev(node)`

Returns the previous node relative to the node you pass.
If the node was the first node in the list `null` is returned.

#### `fifo.bump(node)`

Moves a node to the end of the list

#### `fifo.clear()`

Clears the list.

#### `fifo.forEach(fn)`

Iterate over all values in the list. Calls the function with `value, node`.

## Iteration

To iterate the list simply use the following for loop

``` js
for (var node = fifo.node; node; node = fifo.next(node)) {
  console.log('value is', node.value)
}
```

Optionally you can call `fifo.forEach(fn)` which does the above internally.

## License

MIT

---
_Source: https://npm.io/package/fifo · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
