123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- 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
- this.length = 0
- }
- clear () {
- this.head = this.tail
- this.head.clear()
- this.length = 0
- }
- push (val) {
- this.length++
- 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 () {
- if (this.length !== 0) this.length--
- 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 () {
- const val = this.tail.peek()
- if (val === undefined && this.tail.next) return this.tail.next.peek()
- return val
- }
- isEmpty () {
- return this.length === 0
- }
- }
|