import type { CellRangeRef, CellValue } from '@bilig/protocol';
import type { EngineExistingNumericCellMutationResult } from '../../cell-mutations-at.js';
import type { U32 } from '../runtime-state.js';
export declare function reverseUint32Array(values: Uint32Array): Uint32Array;
export declare function reverseUint32ArrayInPlace(values: Uint32Array): Uint32Array;
export declare function mutationErrorMessage(message: string, cause: unknown): string;
export declare function assertNever(value: never): never;
export declare function normalizeRange(range: CellRangeRef): CellRangeRef & {
    startRow: number;
    endRow: number;
    startCol: number;
    endCol: number;
};
export declare function rangesIntersect(left: CellRangeRef, right: CellRangeRef): boolean;
export declare function cellRange(sheetName: string, address: string): CellRangeRef;
export declare function throwProtectionBlocked(message: string): never;
export declare function mergeChangedCellIndices(base: readonly number[] | U32, extras: readonly number[] | U32): U32;
export declare function tagTrustedPhysicalTrackedChanges(changed: U32, sheetId: number, sortedSliceSplit: number): void;
export declare function canTrustPhysicalTrackedChangeSplit(changed: U32, sheetId: number, split: number, workbook: {
    readonly cellStore: {
        readonly sheetIds: ArrayLike<number | undefined>;
        readonly rows: ArrayLike<number | undefined>;
        readonly cols: ArrayLike<number | undefined>;
    };
    getSheetById(sheetId: number): {
        readonly structureVersion: number;
    } | undefined;
}): boolean;
export declare function makeExistingNumericMutationResult(changedCellIndices: U32, explicitChangedCount: number): EngineExistingNumericCellMutationResult;
export declare function makeCompactExistingNumericMutationResult(firstChangedCellIndex: number, secondChangedCellIndex: number | undefined, explicitChangedCount: number, secondChangedNumericValue?: number, secondChangedRow?: number | {
    readonly row: number;
    readonly col: number;
}, secondChangedCol?: number, secondChangedValue?: CellValue): EngineExistingNumericCellMutationResult;
