HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //opt/coauthor/node_modules/lib0/queue.js
export class QueueNode {
  constructor () {
    /**
     * @type {QueueNode|null}
     */
    this.next = null
  }
}

/**
 * @template V
 */
export class QueueValue extends QueueNode {
  /**
   * @param {V} v
   */
  constructor (v) {
    super()
    this.v = v
  }
}

/**
 * @template {QueueNode} N
 */
export class Queue {
  constructor () {
    /**
     * @type {N | null}
     */
    this.start = null
    /**
     * @type {N | null}
     */
    this.end = null
  }
}

/**
 * @note The queue implementation is experimental and unfinished.
 * Don't use this in production yet.
 *
 * @template {QueueNode} N
 * @return {Queue<N>}
 */
export const create = () => new Queue()

/**
 * @param {Queue<any>} queue
 */
export const isEmpty = queue => queue.start === null

/**
 * @template {Queue<any>} Q
 * @param {Q} queue
 * @param {Q extends Queue<infer N> ? N : never} n
 */
export const enqueue = (queue, n) => {
  if (queue.end !== null) {
    queue.end.next = n
    queue.end = n
  } else {
    queue.end = n
    queue.start = n
  }
}

/**
 * @template {QueueNode} N
 * @param {Queue<N>} queue
 * @return {N | null}
 */
export const dequeue = queue => {
  const n = queue.start
  if (n !== null) {
    // @ts-ignore
    queue.start = n.next
    if (queue.start === null) {
      queue.end = null
    }
    return n
  }
  return null
}