import { BrsType } from "..";
import { BrsBoolean, BrsInvalid } from "../BrsType";
import { Callable } from "../Callable";
import { BrsInterface } from "../interfaces/BrsInterface";
export declare class BrsComponent {
    protected readonly componentName: string;
    private readonly methods;
    private filter;
    protected references: number;
    protected returnFlag: boolean;
    readonly interfaces: Map<string, BrsInterface>;
    constructor(name: string);
    /**
     * Returns the name of the component, used to create instances via `createObject`.
     * @returns the name of this component.
     */
    getComponentName(): string;
    hasInterface(interfaceName: string): boolean;
    setFilter(interfaceName: string): void;
    protected registerMethods(interfaces: Record<string, Callable[]>): void;
    /** Given a list of methods, appends all of them to the component. */
    appendMethods(methods: Callable[]): void;
    getMethod(index: string): Callable | undefined;
    getReferenceCount(): number;
    setReturn(beingReturned: boolean): void;
    addReference(): void;
    removeReference(): number;
    dispose(): void;
}
/** Represents a BrightScript component that has elements that can be accessed via index. */
export interface BrsCollection {
    /**
     * Returns the set of iterable elements contained in this component.
     * @returns an array of elements contained in this component.
     */
    getElements(): readonly BrsType[];
    /**
     * Retrieves an element from this component at the provided `index`.
     * @param index the index in this component from which to retrieve the desired element.
     * @param isCaseSensitive determinate whether operation of getting should be case sensitive or not.
     * @returns the element at `index` if one exists, otherwise throws an Error.
     */
    get(index: BrsType, isCaseSensitive?: boolean): BrsType;
    /**
     * Sets the element at the provided `index` to the provided `value`.
     * @param index the index in this component at which to set the provided `value`.
     * @param value the value to update at the provided `index`.
     * @param isCaseSensitive determinate whether operation of setting should be case sensitive or not.
     */
    set(index: BrsType, value: BrsType, isCaseSensitive?: boolean): BrsInvalid;
}
/** Represents a BrightScript component that has elements that can be iterated across. */
export interface BrsIterable extends BrsCollection {
    /**
     * Determines if the iteration index is at the end of the iterable component.
     * @returns `true` if there are more elements to iterate, otherwise `false`.
     */
    hasNext(): BrsBoolean;
    /**
     * Retrieves the next element in the iteration sequence.
     * @returns the next element in the iteration sequence.
     */
    getNext(): BrsType;
    /**
     * Resets the iteration sequence to the beginning of the iterable component.
     */
    resetNext(): void;
    /**
     * Update the iteration index to the next element in the iteration sequence.
     */
    updateNext(): void;
}
