/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import { EndOfTreeSegment } from "./endOfTreeSegment";
import { LocalReferencePosition } from "./localReference";
import { IMergeTreeDeltaCallbackArgs } from "./mergeTreeDeltaCallback";
import { ISegment } from "./mergeTreeNodes";
import { TrackingGroup } from "./mergeTreeTracking";
import { IJSONSegment, MergeTreeDeltaType, ReferenceType } from "./ops";
import { PropertySet } from "./properties";
/**
 * Revertibles are new and require the option
 * mergeTreeUseNewLengthCalculations to be set as true on the underlying merge tree
 * in order to function correctly.
 *
 * @alpha
 */
export declare type MergeTreeDeltaRevertible = {
    operation: typeof MergeTreeDeltaType.INSERT;
    trackingGroup: TrackingGroup;
} | {
    operation: typeof MergeTreeDeltaType.REMOVE;
    trackingGroup: TrackingGroup;
} | {
    operation: typeof MergeTreeDeltaType.ANNOTATE;
    trackingGroup: TrackingGroup;
    propertyDeltas: PropertySet;
};
/**
 * Revertibles are new and require the option
 * mergeTreeUseNewLengthCalculations to be set as true on the underlying merge tree
 * in order to function correctly.
 *
 * @alpha
 */
export interface MergeTreeRevertibleDriver {
    insertFromSpec(pos: number, spec: IJSONSegment): any;
    removeRange(start: number, end: number): any;
    annotateRange(start: number, end: number, props: PropertySet): any;
    createLocalReferencePosition(segment: ISegment, offset: number, refType: ReferenceType, properties: PropertySet | undefined): LocalReferencePosition;
    localReferencePositionToPosition(lref: LocalReferencePosition): number;
    getPosition(segment: ISegment): number;
    getContainingSegment(pos: number): {
        segment: ISegment | undefined;
        offset: number | undefined;
    };
}
/**
 * exported for test only. should not be exported out the the package
 * @internal
 */
export declare type InternalRevertDriver = MergeTreeRevertibleDriver & {
    __mergeTreeRevertible?: {
        detachedReferences?: EndOfTreeSegment;
        refCallbacks?: LocalReferencePosition["callbacks"];
    };
};
/**
 * Revertibles are new and require the option
 * mergeTreeUseNewLengthCalculations to be set as true on the underlying merge tree
 * in order to function correctly.
 * @alpha
 */
export declare function appendToMergeTreeDeltaRevertibles(driver: MergeTreeRevertibleDriver, deltaArgs: IMergeTreeDeltaCallbackArgs, revertibles: MergeTreeDeltaRevertible[]): void;
/**
 * Revertibles are new and require the option
 * mergeTreeUseNewLengthCalculations to be set as true on the underlying merge tree
 * in order to function correctly.
 * @alpha
 */
export declare function discardMergeTreeDeltaRevertible(revertibles: MergeTreeDeltaRevertible[]): void;
/**
 * Revertibles are new and require the option
 * mergeTreeUseNewLengthCalculations to be set as true on the underlying merge tree
 * in order to function correctly.
 * @alpha
 */
export declare function revertMergeTreeDeltaRevertibles(driver: MergeTreeRevertibleDriver, revertibles: MergeTreeDeltaRevertible[]): void;
//# sourceMappingURL=revertibles.d.ts.map