/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import { TreeNavigationResult, ITreeSubscriptionCursor } from "../../core/index.js";
import { disposeSymbol, IDisposable } from "../../util/index.js";
import { Context } from "./context.js";
import { FlexTreeEntity, FlexTreeEntityKind, TreeStatus, flexTreeMarker } from "./flexTreeTypes.js";
/**
 * Like {@link makePropertyNotEnumerable}, but less type safe so it works on private properties.
 */
export declare function makePrivatePropertyNotEnumerable(target: object, key: string | symbol | number): void;
export declare const prepareForEditSymbol: unique symbol;
export declare const isFreedSymbol: unique symbol;
export declare const tryMoveCursorToAnchorSymbol: unique symbol;
export declare const forgetAnchorSymbol: unique symbol;
export declare const cursorSymbol: unique symbol;
export declare const anchorSymbol: unique symbol;
/**
 * Assert `entity` is not deleted.
 * @privateRemarks
 * This can be faster than getting the tree status and checking that since that can require computing removed vs deleted.
 * TODO: provide a non implementation dependent way to leverage this optimization.
 */
export declare function assertFlexTreeEntityNotFreed(entity: FlexTreeEntity): void;
/**
 * This is a base class for lazy (cursor based) UntypedEntity implementations, which uniformly handles cursors and anchors.
 */
export declare abstract class LazyEntity<TSchema = unknown, TAnchor = unknown> implements FlexTreeEntity<TSchema>, IDisposable {
    #private;
    readonly context: Context;
    readonly schema: TSchema;
    readonly [anchorSymbol]: TAnchor;
    protected constructor(context: Context, schema: TSchema, cursor: ITreeSubscriptionCursor, anchor: TAnchor);
    abstract boxedIterator(): IterableIterator<FlexTreeEntity>;
    abstract get [flexTreeMarker](): FlexTreeEntityKind;
    abstract treeStatus(): TreeStatus;
    [disposeSymbol](): void;
    [prepareForEditSymbol](): void;
    [isFreedSymbol](): boolean;
    get [cursorSymbol](): ITreeSubscriptionCursor;
    protected abstract [tryMoveCursorToAnchorSymbol](anchor: TAnchor, cursor: ITreeSubscriptionCursor): TreeNavigationResult;
    /**
     * Called when disposing of this target, iff it has an anchor.
     */
    protected abstract [forgetAnchorSymbol](anchor: TAnchor): void;
}
//# sourceMappingURL=lazyEntity.d.ts.map