import { type Fingerprint } from './fingerprint';
import type { NodeToSlice, SliceResult } from './slicer-types';
import type { REnvironmentInformation } from '../../dataflow/environments/environment';
import type { NodeId } from '../../r-bridge/lang-4.x/ast/model/processing/node-id';
import type { DataflowGraphVertexInfo } from '../../dataflow/graph/vertex';
export declare class VisitingQueue {
    private readonly threshold;
    private timesHitThreshold;
    private readonly seen;
    private readonly seenByCache;
    private readonly idThreshold;
    private readonly queue;
    private readonly cache?;
    potentialAdditions: Map<NodeId, [NodeId, NodeToSlice]>;
    private cachedCallTargets;
    constructor(threshold: number, cache?: Map<Fingerprint, Set<NodeId>>);
    /**
     * Adds a node to the queue if it has not been seen before.
     * @param target             - the node to add
     * @param env                - the environment the node is traversed in
     * @param envFingerprint     - the fingerprint of the environment
     * @param onlyForSideEffects - whether the node is only used for its side effects
     */
    add(target: NodeId, env: REnvironmentInformation, envFingerprint: string, onlyForSideEffects: boolean): void;
    next(): NodeToSlice;
    nonEmpty(): boolean;
    hasId(id: NodeId): boolean;
    memoizeCallTargets(id: NodeId, targets: () => Set<DataflowGraphVertexInfo>): Set<DataflowGraphVertexInfo>;
    status(): Readonly<Pick<SliceResult, 'timesHitThreshold' | 'result'>>;
}
