/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import { RevisionTagCodec } from "../rebase/index.js";
import { FieldKey } from "../schema-stored/index.js";
import { DetachedField, Anchor, ITreeCursorSynchronous, DeltaVisitor } from "../tree/index.js";
import { IForestSubscription, ITreeSubscriptionCursor } from "./forest.js";
/**
 * Editing APIs.
 * @internal
 */
export interface IEditableForest extends IForestSubscription {
    /**
     * Provides a visitor that can be used to mutate the forest.
     *
     * @returns a visitor that can be used to mutate the forest.
     *
     * @remarks
     * Mutating the forest does NOT update anchors.
     * The visitor must be released after use by calling {@link DeltaVisitor.free} on it.
     * It is invalid to acquire a visitor without releasing the previous one.
     */
    acquireVisitor(): DeltaVisitor;
}
/**
 * Sets the contents of the forest via delta.
 * Requires the fores starts empty.
 *
 * @remarks
 * This does not perform an edit: it updates the forest content as if there was an edit that did that.
 */
export declare function initializeForest(forest: IEditableForest, content: readonly ITreeCursorSynchronous[], revisionTagCodec: RevisionTagCodec): void;
/**
 * Ways to refer to a node in an IEditableForest.
 * @internal
 */
export type ForestLocation = ITreeSubscriptionCursor | Anchor;
/**
 * @internal
 */
export interface TreeLocation {
    readonly range: FieldLocation | DetachedField;
    readonly index: number;
}
export declare function isFieldLocation(range: FieldLocation | DetachedField): range is FieldLocation;
/**
 * Location of a field within a tree that is not a detached/root field.
 * @internal
 */
export interface FieldLocation {
    readonly key: FieldKey;
    readonly parent: ForestLocation;
}
//# sourceMappingURL=editableForest.d.ts.map