mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-26 07:05:49 +00:00
passed tests (however, the test cases themselves are unverified.)
This commit is contained in:
@@ -57,6 +57,7 @@ SerializedObject.prototype.resetPointer = function () {
|
|||||||
this.pointer = 0;
|
this.pointer = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
SerializedObject.prototype.read = function (numberOfBytes) {
|
SerializedObject.prototype.read = function (numberOfBytes) {
|
||||||
var start = this.pointer;
|
var start = this.pointer;
|
||||||
var end = start+numberOfBytes;
|
var end = start+numberOfBytes;
|
||||||
@@ -68,6 +69,23 @@ SerializedObject.prototype.read = function (numberOfBytes) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
var readOrPeek = function (advance) {
|
||||||
|
return function(numberOfBytes) {
|
||||||
|
var start = this.pointer;
|
||||||
|
var end = start+numberOfBytes;
|
||||||
|
if (end > this.buffer.length) {
|
||||||
|
throw new Error("There aren't that many bytes left.");
|
||||||
|
} else {
|
||||||
|
var result = this.buffer.slice(start,end);
|
||||||
|
if (advance) {this.pointer = end;}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SerializedObject.prototype.read = readOrPeek(true);
|
||||||
|
SerializedObject.prototype.peek = readOrPeek(false);
|
||||||
|
|
||||||
|
|
||||||
SerializedObject.prototype.to_bits = function ()
|
SerializedObject.prototype.to_bits = function ()
|
||||||
|
|||||||
@@ -540,15 +540,19 @@ function parse_whatever(so) {
|
|||||||
} else {
|
} else {
|
||||||
type = TYPES_MAP[type_bits];
|
type = TYPES_MAP[type_bits];
|
||||||
}
|
}
|
||||||
if (field_bits === 0) {
|
if ("undefined" === typeof type) {
|
||||||
field_name = FIELDS_MAP[type_bits][so.read(1)[0]];
|
throw Error("Unknown type");
|
||||||
} else {
|
} else {
|
||||||
field_name = FIELDS_MAP[type_bits][field_bits];
|
if (field_bits === 0) {
|
||||||
}
|
field_name = FIELDS_MAP[type_bits][so.read(1)[0]];
|
||||||
if ("undefined" === typeof field_name) {
|
} else {
|
||||||
return;
|
field_name = FIELDS_MAP[type_bits][field_bits];
|
||||||
} else {
|
}
|
||||||
return [field_name, type.parse(so)]; //key, value
|
if ("undefined" === typeof field_name) {
|
||||||
|
throw Error("Unknown field");
|
||||||
|
} else {
|
||||||
|
return [field_name, type.parse(so)]; //key, value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -585,10 +589,10 @@ var STObject = exports.Object = new SerializedType({
|
|||||||
parse: function (so) {
|
parse: function (so) {
|
||||||
var output = {};
|
var output = {};
|
||||||
while (true) {
|
while (true) {
|
||||||
var key_and_value = parse_whatever(so);
|
if (so.peek(1)[0] === 0xe1) { //ending marker
|
||||||
if ("undefined" === typeof key_and_value) { //Careful: are there any legitimate cases where we'd get this?
|
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
|
var key_and_value = parse_whatever(so);
|
||||||
output[key_and_value[0]] = key_and_value[1];
|
output[key_and_value[0]] = key_and_value[1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -613,10 +617,10 @@ var STArray = exports.Array = new SerializedType({
|
|||||||
parse: function (so) {
|
parse: function (so) {
|
||||||
var output = [];
|
var output = [];
|
||||||
while (true) {
|
while (true) {
|
||||||
var key_and_value = parse_whatever(so);
|
if (so.peek(1)[0] === 0xf1) { //ending marker
|
||||||
if ("undefined" === typeof key_and_value) { //Careful: are there any legitimate cases where we'd get this?
|
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
|
var key_and_value = parse_whatever(so);
|
||||||
var obj = {};
|
var obj = {};
|
||||||
obj[key_and_value[0]] = key_and_value[1];
|
obj[key_and_value[0]] = key_and_value[1];
|
||||||
output.push(obj);
|
output.push(obj);
|
||||||
|
|||||||
Reference in New Issue
Block a user