import { Worker } from "../Worker.js";
import { TriggeringObject } from "./Mvcc.js";
export declare abstract class Indicator extends TriggeringObject {
    abstract readonly isBusy: boolean;
    abstract readonly counter: number;
    abstract readonly workers: ReadonlySet<Worker>;
    abstract readonly busyDuration: number;
    abstract whenBusy(): Promise<void>;
    abstract whenIdle(): Promise<void>;
    static create(hint: string, activationDelay: number, deactivationDelay: number, durationResolution: number): Indicator;
}
export declare class IndicatorImpl extends Indicator {
    isBusy: boolean;
    counter: number;
    workers: Set<Worker>;
    busyDuration: number;
    readonly internals: {
        whenBusy: Promise<void> | undefined;
        resolveWhenBusy: ((value?: void) => void) | undefined;
        whenIdle: Promise<void> | undefined;
        resolveWhenIdle: ((value?: void) => void) | undefined;
        started: number;
        activationDelay: number;
        activationTimeout: undefined;
        deactivationDelay: number;
        deactivationTimeout: undefined;
        durationResolution: number;
    };
    whenBusy(): Promise<void>;
    whenIdle(): Promise<void>;
    enter(worker: Worker): void;
    leave(worker: Worker): void;
    static createImpl(hint: string, activationDelay: number, deactivationDelay: number, durationResolution: number): IndicatorImpl;
    static enter(mon: IndicatorImpl, worker: Worker): void;
    static leave(mon: IndicatorImpl, worker: Worker): void;
    private static doCreate;
    private static activate;
    private static deactivate;
    private static tick;
}
