import { Chunk } from "@tsplus/stdlib/collections/Chunk/definition";
import { MutableQueue } from "@tsplus/stdlib/collections/mutable/MutableQueue/definition";
import { Deferred } from "@effect/core/io/Deferred/definition";
import { AtomicBoolean } from "@tsplus/stdlib/data/AtomicBoolean";
import { Effect } from "@effect/core/io/Effect/definition";
import { EmptyMutableQueue } from "@tsplus/stdlib/collections/mutable/MutableQueue";
/**
 * @tsplus type ets/QueueStrategy
 */
export interface Strategy<A> {
    readonly handleSurplus: (as: Chunk<A>, queue: MutableQueue<A>, takers: MutableQueue<Deferred<never, A>>, isShutdown: AtomicBoolean, __tsplusTrace?: string) => Effect<never, never, boolean>;
    readonly unsafeOnQueueEmptySpace: (queue: MutableQueue<A>, takers: MutableQueue<Deferred<never, A>>) => void;
    readonly surplusSize: number;
    readonly shutdown: Effect<never, never, void>;
}
/**
 * @tsplus type ets/QueueStrategy/Ops
 */
export interface StrategyOps {
}
export declare const Strategy: StrategyOps;
export declare class DroppingStrategy<A> implements Strategy<A> {
    handleSurplus(_as: Chunk<A>, _queue: MutableQueue<A>, _takers: MutableQueue<Deferred<never, A>>, _isShutdown: AtomicBoolean, __tsplusTrace?: string): Effect<never, never, boolean>;
    unsafeOnQueueEmptySpace(_queue: MutableQueue<A>): void;
    get surplusSize(): number;
    get shutdown(): Effect<never, never, void>;
}
export declare class SlidingStrategy<A> implements Strategy<A> {
    handleSurplus(as: Chunk<A>, queue: MutableQueue<A>, takers: MutableQueue<Deferred<never, A>>, _isShutdown: AtomicBoolean, __tsplusTrace?: string): Effect<never, never, boolean>;
    unsafeOnQueueEmptySpace(_queue: MutableQueue<A>): void;
    get surplusSize(): number;
    get shutdown(): Effect<never, never, void>;
    private unsafeSlidingOffer;
}
/**
 * @tsplus static ets/QueueStrategy/Ops Sliding
 * @tsplus location "@effect/core/io/Queue/operations/strategy"
 */
export declare function slidingStrategy<A>(): SlidingStrategy<A>;
/**
 * @tsplus static ets/QueueStrategy/Ops Dropping
 * @tsplus location "@effect/core/io/Queue/operations/strategy"
 */
export declare function dropppingStrategy<A>(): DroppingStrategy<A>;
//# sourceMappingURL=strategy.d.ts.map