Files
agent/config-serializer/ClassArray.ts
2016-06-26 15:12:50 +02:00

55 lines
1.4 KiB
TypeScript

import {Serializable} from './Serializable';
import {UhkBuffer} from './UhkBuffer';
export abstract class ClassArray<T extends Serializable<T>> extends Serializable<ClassArray<T>> {
elements: T[] = [];
_fromJsObject(jsObjects: any): ClassArray<T> {
for (let jsObject of jsObjects) {
this.elements.push(this.jsObjectToClass(jsObject));
}
return this;
}
_fromBinary(buffer: UhkBuffer): ClassArray<T> {
let arrayLength = buffer.readCompactLength();
if (buffer.enableDump) {
buffer.enableDump = false;
}
for (let i = 0; i < arrayLength; i++) {
this.elements.push(this.binaryToClass(buffer));
}
return this;
}
_toJsObject(): any {
let array: any[] = [];
for (let element of this.elements) {
array.push(element.toJsObject());
}
return array;
}
_toBinary(buffer: UhkBuffer) {
buffer.writeCompactLength(this.elements.length);
if (buffer.enableDump) {
buffer.enableDump = false;
}
for (let element of this.elements) {
element.toBinary(buffer);
}
}
toString(): string {
return `<${this.constructor.name} length="${this.elements.length}">`;
}
abstract jsObjectToClass(jsObject: any): T;
abstract binaryToClass(buffer: UhkBuffer): T;
}