import type { MutableQueue } from "../../support"; import { AtomicBoolean } from "../../support"; import type { XPromise } from "../XPromise"; import * as T from "./_internal/task"; import type { Queue } from "./model"; export declare const unsafeOfferAll: (q: MutableQueue, as: readonly A[]) => readonly A[]; export declare const unsafePollAll: (q: MutableQueue) => readonly A[]; export declare const unsafeCompletePromise: (p: XPromise, a: A) => void; export declare const unsafeRemove: (q: MutableQueue, a: A) => void; export declare const unsafePollN: (q: MutableQueue, max: number) => readonly A[]; export declare const unsafeCompleteTakers: ( strategy: Strategy, queue: MutableQueue, takers: MutableQueue> ) => void; export interface Strategy { readonly handleSurplus: ( as: readonly A[], queue: MutableQueue, takers: MutableQueue>, isShutdown: AtomicBoolean ) => T.IO; readonly unsafeOnQueueEmptySpace: (queue: MutableQueue) => void; readonly surplusSize: number; readonly shutdown: T.IO; } export declare class BackPressureStrategy implements Strategy { private putters; handleSurplus( as: readonly A[], queue: MutableQueue, takers: MutableQueue>, isShutdown: AtomicBoolean ): T.IO; unsafeRemove(p: XPromise): void; unsafeOffer(as: readonly A[], p: XPromise): void; unsafeOnQueueEmptySpace(queue: MutableQueue): void; get shutdown(): T.IO; get surplusSize(): number; } export declare class DroppingStrategy implements Strategy { handleSurplus( _as: readonly A[], _queue: MutableQueue, _takers: MutableQueue>, _isShutdown: AtomicBoolean ): T.IO; unsafeOnQueueEmptySpace(_queue: MutableQueue): void; get shutdown(): T.IO; get surplusSize(): number; } export declare class SlidingStrategy implements Strategy { handleSurplus( as: readonly A[], queue: MutableQueue, takers: MutableQueue>, _isShutdown: AtomicBoolean ): T.IO; unsafeOnQueueEmptySpace(_queue: MutableQueue): void; get shutdown(): T.IO; get surplusSize(): number; private unsafeSlidingOffer; } export declare const unsafeCreate: ( queue: MutableQueue, takers: MutableQueue>, shutdownHook: XPromise, shutdownFlag: AtomicBoolean, strategy: Strategy ) => Queue; export declare const createQueue: ( strategy: Strategy ) => (queue: MutableQueue) => T.Task>; export declare const makeSliding: (capacity: number) => T.IO>; export declare const makeUnbounded: () => T.IO>; export declare const makeDropping: (capacity: number) => T.IO>; export declare const makeBounded: (capacity: number) => T.IO>; //# sourceMappingURL=implementation.d.ts.map