/*
 * 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
 */
@@Global @@ProvidedByRuntime

export external public class Buffer implements Iterable<number>{

    public constructor(arg: string | number | /*Uint8Array:*/ any[], encoding: string=)

    public static from(data: ?[] | string | Buffer | Object, offsetOrEncoding: int | string =, length: int =): Buffer;

    public static isBuffer(obj: any): boolean;
    public static isEncoding(encoding: string): boolean;
    public static byteLength(string: string, encoding: string=): number;
    public static concat(list: Buffer[], totalLength: number=): this;
    public static compare(buf1: Buffer, buf2: Buffer): number;
    @Override
    public [Symbol.iterator](): Iterator<number>;
    public entries(): Iterable2<number, number>;
    public keys(): Iterator<number>;
    public values(): Iterator<number>;
//    public number [int index];
    public write(string: string, offset: number=, length: number=, encoding: string=): number;
    @Override public toString(encoding: string=, start: number=, end: number=): string;
    public toJSON(): string;
    public length: number;
    public equals(otherBuffer: Buffer): boolean;
    public compare(otherBuffer: Buffer): number;
    public copy(targetBuffer: Buffer, targetStart: number=, sourceStart: number=, sourceEnd: number=): number;
    public slice(start: number=, end: number=): Buffer;
    public writeUIntLE(value: number, offset: number, byteLength: number, noAssert: boolean=): number;
    public writeUIntBE(value: number, offset: number, byteLength: number, noAssert: boolean=): number;
    public writeIntLE(value: number, offset: number, byteLength: number, noAssert: boolean=): number;
    public writeIntBE(value: number, offset: number, byteLength: number, noAssert: boolean=): number;
    public readUIntLE(offset: number, byteLength: number, noAssert: boolean=): number;
    public readUIntBE(offset: number, byteLength: number, noAssert: boolean=): number;
    public readIntLE(offset: number, byteLength: number, noAssert: boolean=): number;
    public readIntBE(offset: number, byteLength: number, noAssert: boolean=): number;
    public readUInt8(offset: number, noAsset: boolean=): number;
    public readUInt16LE(offset: number, noAssert: boolean=): number;
    public readUInt16BE(offset: number, noAssert: boolean=): number;
    public readUInt32LE(offset: number, noAssert: boolean=): number;
    public readUInt32BE(offset: number, noAssert: boolean=): number;
    public readInt8(offset: number, noAssert: boolean=): number;
    public readInt16LE(offset: number, noAssert: boolean=): number;
    public readInt16BE(offset: number, noAssert: boolean=): number;
    public readInt32LE(offset: number, noAssert: boolean=): number;
    public readInt32BE(offset: number, noAssert: boolean=): number;
    public readFloatLE(offset: number, noAssert: boolean=): number;
    public readFloatBE(offset: number, noAssert: boolean=): number;
    public readDoubleLE(offset: number, noAssert: boolean=): number;
    public readDoubleBE(offset: number, noAssert: boolean=): number;
    public writeUInt8(value: number, offset: number, noAssert: boolean=): number;
    public writeUInt16LE(value: number, offset: number, noAssert: boolean=): number;
    public writeUInt16BE(value: number, offset: number, noAssert: boolean=): number;
    public writeUInt32LE(value: number, offset: number, noAssert: boolean=): number;
    public writeUInt32BE(value: number, offset: number, noAssert: boolean=): number;
    public writeInt8(value: number, offset: number, noAssert: boolean=): number;
    public writeInt16LE(value: number, offset: number, noAssert: boolean=): number;
    public writeInt16BE(value: number, offset: number, noAssert: boolean=): number;
    public writeInt32LE(value: number, offset: number, noAssert: boolean=): number;
    public writeInt32BE(value: number, offset: number, noAssert: boolean=): number;
    public writeFloatLE(value: number, offset: number, noAssert: boolean=): number;
    public writeFloatBE(value: number, offset: number, noAssert: boolean=): number;
    public writeDoubleLE(value: number, offset: number, noAssert: boolean=): number;
    public writeDoubleBE(value: number, offset: number, noAssert: boolean=): number;
    public fill(value: any, offset: number=, end: number=): Buffer;
}


