UNPKG

recoder-code

Version:

🚀 AI-powered development platform - Chat with 32+ models, build projects, automate workflows. Free models included!

49 lines (41 loc) • 972 B
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 } }