/*
 * Copyright (c) 2017 NumberFour AG.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *   NumberFour AG - Initial API and implementation
 */

export external public interface ~IEventEmitter {
    public addListener(event: string, listener: Function): this;
    public on(event: string, listener: Function): this;
    public once(event: string, listener: Function): this;
    public removeListener(event: string, listener: Function): this;
    public removeAllListeners(event: string=): this;
    public setMaxListeners(n: number): void;
    public listeners(event: string): Function[];
    public emit(event: string, ...args: any): boolean;
}

export external public class EventEmitter implements IEventEmitter {
    public static listenerCount(emitter: EventEmitter, event: string): number;
    @Override public addListener(event: string, listener: Function): this;
    @Override public on(event: string, listener: Function): this;
    @Override public once(event: string, listener: Function): this;
    @Override public removeListener(event: string, listener: Function): this;
    @Override public removeAllListeners(event: string=): this;
    @Override public setMaxListeners(n: number): void;
    @Override public listeners(event: string): Function[];
    @Override public emit(event: string, ...args: any): boolean;
}
