| 123456789101112131415161718192021222324252627282930313233 | module.exports = class FixedFIFO {  constructor (hwm) {    if (!(hwm > 0) || ((hwm - 1) & hwm) !== 0) throw new Error('Max size for a FixedFIFO should be a power of two')    this.buffer = new Array(hwm)    this.mask = hwm - 1    this.top = 0    this.btm = 0    this.next = null  }  push (data) {    if (this.buffer[this.top] !== undefined) return false    this.buffer[this.top] = data    this.top = (this.top + 1) & this.mask    return true  }  shift () {    const last = this.buffer[this.btm]    if (last === undefined) return undefined    this.buffer[this.btm] = undefined    this.btm = (this.btm + 1) & this.mask    return last  }  peek () {    return this.buffer[this.btm]  }  isEmpty () {    return this.buffer[this.btm] === undefined  }}
 |