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