import Collection from "@arcgis/core/core/Collection";
import { CollectionProxy } from "./CollectionProxy.js";
/**
 * A collection that represents a copy of an existing collection. For
 * efficiency, the collection will just shadow the original collection until a
 * modification is about to be made, at which point it will actually create a
 * copy of the original.
 */
export declare class CopyOnWriteCollection<T> extends CollectionProxy<T> {
    private _originalCollection;
    /**
     * The original collection that this collection is a copy of.
     */
    get originalCollection(): Collection<T>;
    set originalCollection(value: Collection<T>);
    /**
     * Determines whether the collection has been modified.
     */
    get isModified(): boolean;
    constructor(collection: Collection<T>);
    clone(): CopyOnWriteCollection<T>;
    add(item: T, index?: number): this;
    removeAt(index: number): T | undefined;
    reorder(item: T, index: number): T | undefined;
    /**
     * Undoes all local modifications and resets the collection to the original.
     */
    reset(): void;
    sort(compareFunction?: (a: T, b: T) => number): this;
    /**
     * Forks the collection by making a copy of the original.
     */
    private _copy;
    private _cloneCollection;
}
