import * as std from "tstl";
import { ICollection } from "../basic/ICollection";
import { CollectionEvent } from "../basic/CollectionEvent";
export declare class List<T> extends std.List<T> implements ICollection<T, std.List<T>, std.List.Iterator<T>, std.List.ReverseIterator<T>> {
    /**
     * @hidden
     */
    private dispatcher_;
    clear(): void;
    /**
     * @hidden
     */
    protected _Insert_by_range<U extends T, InputIterator extends std.IForwardIterator<U, InputIterator>>(pos: std.List.Iterator<T>, first: InputIterator, last: InputIterator): std.List.Iterator<T>;
    /**
     * @hidden
     */
    protected _Erase_by_range(first: std.List.Iterator<T>, last: std.List.Iterator<T>): std.List.Iterator<T>;
    /**
     * @inheritDoc
     */
    sort(): void;
    /**
     * @inheritDoc
     */
    sort(comp: (x: T, y: T) => boolean): void;
    /**
     * @inheritDoc
     */
    reverse(): void;
    /**
     * @inheritdoc
     */
    refresh(): void;
    /**
     * @inheritdoc
     */
    refresh(it: std.List.Iterator<T>): void;
    /**
     * @inheritdoc
     */
    refresh(first: std.List.Iterator<T>, last: std.List.Iterator<T>): void;
    /**
     * @inheritdoc
     */
    dispatchEvent(event: List.Event<T>): void;
    /**
     * @hidden
     */
    private _Notify_insert(first, last);
    /**
     * @hidden
     */
    private _Notify_erase(first, last);
    /**
     * @inheritdoc
     */
    hasEventListener(type: CollectionEvent.Type): boolean;
    /**
     * @inheritdoc
     */
    addEventListener(type: CollectionEvent.Type, listener: List.Listener<T>): void;
    /**
     * @inheritdoc
     */
    removeEventListener(type: CollectionEvent.Type, listener: List.Listener<T>): void;
}
export declare namespace List {
    type Event<T> = CollectionEvent<T, std.List<T>, std.List.Iterator<T>, std.List.ReverseIterator<T>>;
    type Listener<T> = CollectionEvent.Listener<T, std.List<T>, std.List.Iterator<T>, std.List.ReverseIterator<T>>;
    const Event: typeof CollectionEvent;
    export import Iterator = std.List.Iterator;
    export import ReverseIterator = std.List.ReverseIterator;
}
