nel-neo-thinsdk
Version:
138 lines (125 loc) • 4.15 kB
text/typescript
type Func<T, TResult> = (arg: T) => TResult;
type Action<T> = Func<T, void>;
interface Array<T>
{
fill(value: T, start?: number, end?: number);
}
interface ArrayConstructor
{
copy<T>(src: ArrayLike<T>, srcOffset: number, dst: ArrayLike<T>, dstOffset: number, count: number): void;
fromArray<T>(arr: ArrayLike<T>): Array<T>;
}
interface String
{
hexToBytes(): Uint8Array;
}
interface Uint8Array
{
toHexString(): string;
clone(): Uint8Array;
concat( data: Uint8Array ): Uint8Array;
}
interface Uint8ArrayConstructor
{
fromArrayBuffer(buffer: ArrayBuffer | ArrayBufferView): Uint8Array
}
Array.copy = function <T>(src: ArrayLike<T>, srcOffset: number, dst: ArrayLike<T>, dstOffset: number, count: number): void
{
for (let i = 0; i < count; i++)
(<any>dst)[i + dstOffset] = src[i + srcOffset];
}
Array.fromArray = function <T>(arr: ArrayLike<T>): Array<T>
{
let array = new Array<T>(arr.length);
for (let i = 0; i < array.length; i++)
array[i] = arr[i];
return array;
}
Uint8Array.fromArrayBuffer = function (buffer: ArrayBuffer | ArrayBufferView): Uint8Array
{
if (buffer instanceof Uint8Array) return buffer;
else if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);
else
{
let view = buffer as ArrayBufferView;
return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);
}
}
String.prototype.hexToBytes = function (): Uint8Array
{
if ((this.length & 1) != 0) throw new RangeError();
var str = this;
if (this.length >= 2 && this[0] == '0' && this[1] == 'x')
str = this.substr(2);
let bytes = new Uint8Array(str.length / 2);
for (let i = 0; i < bytes.length; i++) {
bytes[i] = parseInt(str.substr(i * 2, 2), 16);
}
return bytes;
}
ArrayBuffer.prototype.slice = ArrayBuffer.prototype.slice || function (begin: number, end = this.byteLength): ArrayBuffer
{
if (begin < 0) begin += this.byteLength;
if (begin < 0) begin = 0;
if (end < 0) end += this.byteLength;
if (end > this.byteLength) end = this.byteLength;
let length = end - begin;
if (length < 0) length = 0;
let src = new Uint8Array(this);
let dst = new Uint8Array(length);
for (let i = 0; i < length; i++)
dst[i] = src[i + begin];
return dst.buffer;
}
Uint8Array.prototype.toHexString = function (): string
{
let s = "";
for (let i = 0; i < this.length; i++)
{
s += (this[i] >>> 4).toString(16);
s += (this[i] & 0xf).toString(16);
}
return s;
}
Uint8Array.prototype.clone = function (): Uint8Array
{
var u8 = new Uint8Array(this.length);
for (let i = 0; i < this.length; i++)
u8[i] = this[i];
return u8;
}
Uint8Array.prototype.concat = function ( data )
{
var newarr = new Uint8Array( this.length + data.length );
for ( var i = 0; i < this.length; i++ )
{
newarr[i] = this[i];
}
for ( var i = 0; i < data.length; i++ )
{
newarr[this.length + i] = data[i];
}
return newarr;
}
void function ()
{
function fillArray<T>(value: T, start = 0, end = this.length)
{
if (start < 0) start += this.length;
if (start < 0) start = 0;
if (start >= this.length) return this;
if (end < 0) end += this.length;
if (end < 0) return this;
if (end > this.length) end = this.length;
for (let i = start; i < end; i++)
this[i] = value;
return this;
}
Array.prototype.fill = Array.prototype.fill || fillArray;
Int8Array.prototype.fill = Int8Array.prototype.fill || fillArray;
Int16Array.prototype.fill = Int16Array.prototype.fill || fillArray;
Int32Array.prototype.fill = Int32Array.prototype.fill || fillArray;
Uint8Array.prototype.fill = Uint8Array.prototype.fill || fillArray;
Uint16Array.prototype.fill = Uint16Array.prototype.fill || fillArray;
Uint32Array.prototype.fill = Uint32Array.prototype.fill || fillArray;
} ();