import type { CfgSimplificationPassName } from '../../control-flow/cfg-simplification';
import { CfgKind } from '../cfg-kind';
import type { ControlFlowInformation } from '../../control-flow/control-flow-graph';
import type { NormalizedAst } from '../../r-bridge/lang-4.x/ast/model/processing/decorate';
import type { DataflowInformation } from '../../dataflow/info';
import type { FlowrAnalyzerContext } from '../context/flowr-analyzer-context';
interface CfgInfo {
    ctx: FlowrAnalyzerContext;
    cfgQuick: ControlFlowInformation | undefined;
    dfg: () => Promise<DataflowInformation>;
    ast: () => Promise<NormalizedAst>;
}
export declare class FlowrAnalyzerControlFlowCache {
    private readonly cache;
    peek(kind: CfgKind, simplifications: readonly CfgSimplificationPassName[] | undefined): ControlFlowInformation | undefined;
    get(force: boolean | undefined, kind: CfgKind, cfgCacheInfo: CfgInfo, simplifications?: readonly CfgSimplificationPassName[]): Promise<ControlFlowInformation>;
    /**
     * Create and cache the base CFG without simplifications.
     */
    private createAndCacheBaseCfg;
    /**
     * Try to get a cached CFG with some of the requested simplifications already applied.
     * Matches the longest prefix of simplifications available.
     * @returns The cached CFG and the missing simplifications to be applied, or `undefined` if no cached CFG is available.
     */
    private tryGetCachedCfg;
    /**
     * Normalize the order of simplification passes.
     * Is currently an identity function, but may be extended in the future to enforce a specific order using heuristics.
     * @param simplifications - the requested simplification passes.
     */
    private normalizeSimplificationOrder;
}
export {};
