123456789101112131415161718192021222324252627282930313233343536 |
- const FixedFIFO = require('./fixed-size')
- module.exports = class FastFIFO {
- constructor (hwm) {
- this.hwm = hwm || 16
- this.head = new FixedFIFO(this.hwm)
- this.tail = this.head
- }
- push (val) {
- if (!this.head.push(val)) {
- const prev = this.head
- this.head = prev.next = new FixedFIFO(2 * this.head.buffer.length)
- this.head.push(val)
- }
- }
- shift () {
- const val = this.tail.shift()
- if (val === undefined && this.tail.next) {
- const next = this.tail.next
- this.tail.next = null
- this.tail = next
- return this.tail.shift()
- }
- return val
- }
- peek () {
- return this.tail.peek()
- }
- isEmpty () {
- return this.head.isEmpty()
- }
- }
|