import { ISetLike } from "../typescript/i-set-like.js";
/**
 * @public
 * Provides a unique array with O(1) add & remove, with dirty checking on `getArray`.
 */
export interface IDirtyCheckedUniqueCollection<TItem> extends ISetLike<TItem> {
    readonly isDirty: boolean;
    /**
     * @returns true if the item was added.
     */
    reportingAdd(item: TItem): boolean;
    getArray(): readonly TItem[];
    getSet(): ReadonlySet<TItem>;
}
/**
 * @public
 * {@inheritDoc IDirtyCheckedUniqueCollection}
 */
export declare class DirtyCheckedUniqueCollection<TItem> implements IDirtyCheckedUniqueCollection<TItem>, ISetLike<TItem> {
    get size(): number;
    isDirty: boolean;
    static mapInitializeAdd<TKey, TValue>(map: Map<TKey, IDirtyCheckedUniqueCollection<TValue>>, key: TKey, value: TValue): boolean;
    static mapInitializeAdd<TKey extends object, TValue>(map: WeakMap<TKey, IDirtyCheckedUniqueCollection<TValue>>, key: TKey, value: TValue): boolean;
    constructor(itemsToCopy?: readonly TItem[] | ReadonlySet<TItem>);
    add(item: TItem): void;
    reportingAdd(item: TItem): boolean;
    delete(item: TItem): boolean;
    has(item: TItem): boolean;
    clear(): void;
    getArray(): readonly TItem[];
    getSet(): ReadonlySet<TItem>;
    private readonly itemsSet;
    private itemsArray;
}
//# sourceMappingURL=dirty-checked-unique-collection.d.ts.map