Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var BinaryReader = function(buffer) {
- this.position = 0;
- this.length = buffer.length;
- this.data = buffer;
- }
- BinaryReader.prototype.readInt8 = function() {
- var ret = this.data.charCodeAt(this.position);
- ++this.position;
- return ret & 0xFF;
- }
- BinaryReader.prototype.readInt16 = function() {
- var b1 = this.readInt8();
- var b2 = this.readInt8();
- return b1 | (b2 << 8);
- }
- BinaryReader.prototype.readInt32 = function() {
- var s1 = this.readInt16();
- var s2 = this.readInt16();
- return s1 | (s2 << 16);
- }
- BinaryReader.prototype.readInt64 = function() {
- var i1 = this.readInt32();
- var i2 = this.readInt32();
- return i1 | (i2 << 32);
- }
- BinaryReader.prototype.readFloat = function() {
- var bits = this.readInt32();
- var sign = ((bits & 0x80000000) == 0) ? 1 : -1;
- var exponent = ((bits & 0x7f800000) >> 23);
- var mantissa = (bits & 0x007fffff);
- mantissa |= 0x00800000;
- return (sign * mantissa * Math.pow(2, exponent - 150));
- }
- BinaryReader.prototype.readString = function(length) {
- if(typeof length !== "undefined") {
- var ret = "";
- var cur = this.readInt8();
- while(cur !== 0) {
- ret += String.fromCharCode(cur);
- cur = this.readInt8();
- }
- return ret;
- } else {
- var content = [];
- for(var i = 0; i < length; ++i) {
- content.push(this.readInt8());
- }
- return String.fromCharCode.apply(String, content);
- }
- }
- BinaryReader.prototype.readArray = function(length, typeDesc) {
- if(typeDesc === Float32Array) {
- var ret = new Float32Array(length);
- for(var i = 0; i < length; ++i) {
- ret[i] = this.readFloat();
- }
- return ret;
- }
- if(typeDesc === Int32Array) {
- var ret = new Int32Array(length);
- for(var i = 0; i < length; ++i) {
- ret[i] = this.readInt32();
- }
- return ret;
- }
- if(typeDesc === Int16Array) {
- var ret = new Int16Array(length);
- for(var i = 0; i < length; ++i) {
- ret[i] = this.readInt16();
- }
- return ret;
- }
- if(typeDesc === Int8Array) {
- var ret = new Int8Array(length);
- for(var i = 0; i < length; ++i) {
- ret[i] = this.readInt8();
- }
- return ret;
- }
- if(typeDesc === Uint8Array) {
- var ret = new Uint8Array(length);
- for(var i = 0; i < length; ++i) {
- ret[i] = this.readInt8() & 0xFF;
- }
- return ret;
- }
- var ret = [];
- for(var i = 0; i < length; ++i) {
- ret.push(this.readType(typeDesc));
- }
- return ret;
- }
- BinaryReader.prototype.readType = function(typeDesc) {
- var ret = { };
- for(var i = 0; i < typeDesc.length; ++i) {
- var valName = typeDesc[i].name;
- var value = undefined;
- switch(typeDesc[i].type) {
- case "i64":
- value = this.readInt64();
- break;
- case "i32":
- value = this.readInt32();
- break;
- case "i16":
- value = this.readInt16();
- break;
- case "i8":
- value = this.readInt8();
- break;
- case "f32":
- value = this.readFloat();
- break;
- case "s":
- value = this.readString(typeDesc[i].strLen);
- break;
- case "v3":
- value = {
- x: this.readFloat(),
- y: this.readFloat(),
- z: this.readFloat()
- }
- break;
- case "v2":
- value = {
- x: this.readFloat(),
- y: this.readFloat()
- }
- break;
- }
- ret[valName] = value;
- }
- return ret;
- }
Advertisement
Add Comment
Please, Sign In to add comment