Socket
Socket
Sign inDemoInstall

dequeue

Package Overview
Dependencies
0
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    dequeue

A simple double ended queue datastructure


Version published
Weekly downloads
21K
increased by11.93%
Maintainers
1
Created
Weekly downloads
 

Readme

Source

A Simple Double Ended Queue Datastructure

Dequeue is implemented as a doubly linked circular list with a titular head node. By "titular head node", I mean an empty node to designate the beginning and end of the circularly linked list. I first saw this construction in the linux kernel source and it seem simple and elegant. I added the .length property to use it like I was using an Array.

I was using a javascript Array as a FIFO. Somewhere between 100,000 and 200,000 entries the program performance went to hell (dev host is a MBP w/8GB RAM). 15 minutes later, I implemented a simple dequeue and my FIFO scales up to millions of entries.

It is a drop-in replacement for javascript-arrays-as-fifo.

Example: Dequeue as a replacement for an Array as a FIFO

var Dequeue = require('dequeue')

//var fifo = []
var fifo = new Dequeue()

fifo.length === 0 //=> true

fifo.push(d1)
fifo.length === 1 //=> true

fifo.unshift(d2)

fifo.pop() === d1 //=> true

fifo.push(d3)

fifo.shift() === d2 //=> true

fifo.length === 1 //=> true; only d3 is in the dequeue

API

deque = new Dequeue()

deque.push(value)

Push a value on the end.

value = deque.pop()

Remove a value off the end.

deque.unshift(value)

Push a value on the beginning.

value = deque.shift()

Remove a value off the beginning.

value = deque.last()

Examine the value of the end without removing it.

value = deque.first()

Examine the value of the beginning without removing it.

deque.empty()

Remove all entries. This is NOT a test for an empty dequeue; use deque.length for that.

Future Development

Something this simple does not really need a roadmap. However, I am thinking of adding APIs to facilitate walking the Linked List via an iterator. It will be simple and fully backward compatible.

About the Code

I was convinced by a blog posting by Issac Z. Schlueter that I don't need semicolons. So I don't use them.

Keywords

FAQs

Last updated on 29 Aug 2013

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc