import type { RuntimeDirectLookupDescriptor } from '../runtime-state.js';
export type ExactLookupBatchSkipPlan = {
    readonly kind: 'all';
} | {
    readonly kind: 'single-numeric-dependent';
    readonly operandNumeric: number;
    readonly operandNormalized: number;
    readonly rowEnd: number;
    readonly rowStart: number;
} | {
    readonly kind: 'single-uniform-numeric-dependent';
    readonly matchingOldRow: number | undefined;
    readonly operandNumeric: number;
    readonly operandNormalized: number;
    readonly rowEnd: number;
    readonly rowStart: number;
    readonly start: number;
    readonly step: number;
} | {
    readonly kind: 'multi-numeric-dependents';
    readonly dependents: readonly ExactLookupBatchNumericDependent[];
} | {
    readonly kind: 'fallback';
};
export interface ExactLookupBatchSkipPlanInput {
    readonly col: number;
    readonly formulas: {
        readonly get: (cellIndex: number) => {
            readonly directLookup: RuntimeDirectLookupDescriptor | undefined;
        } | undefined;
    };
    readonly getEntityDependents: (entityId: number) => ArrayLike<number>;
    readonly getSingleEntityDependent: (entityId: number) => number;
    readonly readNumericValue: (cellIndex: number) => number | undefined;
    readonly sheetId: number;
}
interface ExactLookupBatchNumericDependent {
    readonly matchingOldRow?: number | undefined;
    readonly operandNumeric: number;
    readonly operandNormalized: number;
    readonly rowEnd: number;
    readonly rowStart: number;
}
export declare const prepareExactLookupBatchSkipPlan: (input: ExactLookupBatchSkipPlanInput) => ExactLookupBatchSkipPlan;
export declare const exactLookupBatchOldNumeric: (plan: ExactLookupBatchSkipPlan, row: number) => number | undefined;
export declare const exactLookupBatchWriteHandled: (plan: ExactLookupBatchSkipPlan, row: number, oldNumeric: number, newNumeric: number) => boolean;
export {};
