passed tests (however, the test cases themselves are unverified.)

This commit is contained in:
jatchili
2013-08-12 18:44:34 -07:00
parent 63038d3603
commit 942bfe88c1
2 changed files with 34 additions and 12 deletions

View File

@@ -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 ()

View File

@@ -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);