import { TaskQueue } from "../utils/tasks/taskQueue";
interface HoldObject {
    (object: object): void;
}
interface ReleaseObject {
    (object: object): void;
}
export interface ClearKeptObjects {
    (): void;
}
export interface KeepDuringJob {
    (object: object): void;
}
export interface WeakRefJobs {
    readonly keepDuringJob: KeepDuringJob;
    readonly clearKeptObjects: ClearKeptObjects;
    readonly isKeepingObjects: boolean;
}
export declare function createWeakRefJobs(scheduleClearKeptObjects: () => number, hooks?: {
    holdObject?: HoldObject;
    releaseObject?: ReleaseObject;
}): WeakRefJobs;
export declare function createWeakRefJobsForTaskQueue(setTask: TaskQueue.Set<number>, hooks?: {
    holdObject?: HoldObject;
    releaseObject?: ReleaseObject;
}): WeakRefJobs;
export {};
