import { N, B, A } from './baseType'; interface BaseQueue { items: A[]; readonly capacity: N; getHead: () => A; getTail: () => A; size: () => N; isEmpty: () => B; clear: () => void; } interface Queue extends BaseQueue { items: T[]; enqueue: (p: T) => Error | N; dequeue: () => T; toArray: () => T[]; clear: () => void; reverse: () => void; peek: () => T | undefined; } interface PriorityQueueNode { value: T; position: N; priority: N; } interface PriorityQueue { items: PriorityQueueNode[]; defaultPriority: N; enqueue: (element: T, priority?: N, positionFlag?: B, needSetPosition?: B) => Error | N; dequeue: () => T; highestPriority: () => N | undefined; toArray: () => T[]; getHead: () => T; getTail: () => T; size: () => N; isEmpty: () => B; clear: () => void; updatePriorityAt: (p: N, v: N, positionFlag?: B) => B; updateDimension: (v: N) => void; peek: () => T | undefined; } export { BaseQueue, Queue, PriorityQueueNode, PriorityQueue };