import { BrsValue, ValueKind, BrsString, BrsBoolean, BrsInvalid } from "../BrsType";
import { BrsComponent, BrsIterable } from "./BrsComponent";
import { BrsType } from "..";
/** A member of an `AssociativeArray` in BrightScript. */
export interface AAMember {
    /** The member's name. */
    name: BrsString;
    /** The value associated with `name`. */
    value: BrsType;
}
export declare class RoAssociativeArray extends BrsComponent implements BrsValue, BrsIterable {
    readonly kind = ValueKind.Object;
    elements: Map<string, BrsType>;
    enumIndex: number;
    /** Maps lowercased element name to original name used in this.elements.
     * Main benefit of it is fast, case-insensitive access.
     */
    keyMap: Map<string, Set<string>>;
    private modeCaseSensitive;
    constructor(elements: AAMember[], cs?: boolean);
    toString(parent?: BrsType): string;
    equalTo(other: BrsType): BrsBoolean;
    getValue(): Map<string, BrsType>;
    getElements(): BrsString[];
    getValues(): BrsType[];
    clearElements(): number;
    deepCopy(): RoAssociativeArray;
    get(index: BrsType, isCaseSensitive?: boolean): BrsType;
    set(index: BrsType, value: BrsType, isCaseSensitive?: boolean): BrsInvalid;
    hasNext(): BrsBoolean;
    getNext(): BrsString | BrsInvalid;
    resetNext(): void;
    updateNext(): void;
    dispose(): void;
    addChildRef(value: BrsType | undefined): void;
    removeChildRef(value: BrsType | undefined): boolean;
    /** if AA is in insensitive mode, it means that we should do insensitive search of real key */
    private findElementKey;
    private findElement;
    /** Removes all elements from the associative array */
    private readonly clear;
    /** Removes a given item from the associative array */
    private readonly delete;
    /** Given a key and value, adds an item to the associative array if it doesn't exist
     * Or replaces the value of a key that already exists in the associative array
     */
    private readonly addReplace;
    /** Returns the number of items in the associative array */
    private readonly count;
    /** Returns a boolean indicating whether or not a given key exists in the associative array */
    private readonly doesExist;
    /** Appends a new associative array to another. If two keys are the same, the value of the original AA is replaced with the new one. */
    private readonly append;
    /** Returns an array of keys from the associative array in lexicographical order */
    private readonly keys;
    /** Returns an array of values from the associative array in lexicographical order */
    private readonly items;
    /** Given a key, returns the value associated with that key.
     * This method is case insensitive either-or case sensitive, depends on whether `setModeCasesensitive` was called or not.
     */
    private readonly lookup;
    /** Given a key, returns the value associated with that key. This method always is case insensitive. */
    private readonly lookupCI;
    /** Changes the sensitive case method for lookups */
    private readonly setModeCaseSensitive;
}
