Add countType support

This commit is contained in:
roblabla 2015-08-13 13:28:05 +00:00
parent 001f0d7cdc
commit f91da617d7
2 changed files with 42 additions and 8 deletions

View File

@ -21,11 +21,17 @@ function readArray(buffer, offset, typeArgs, rootNode) {
size: 0
};
var count;
if(typeof typeArgs.count === "object") {
if(typeof typeArgs.count === "object")
count = evalCount(typeArgs.count, rootNode);
}
else
else if (typeof typeArgs.count !== "undefined")
count = getField(typeArgs.count, rootNode);
else if (typeof typeArgs.countType !== "undefined") {
var countResults = this.read(buffer, offset, { type: typeArgs.countType, typeArgs: typeArgs.countTypeArgs }, rootNode);
results.size += countResults.size;
offset += countResults.size;
count = countResults.value;
} else // TODO : broken schema, should probably error out.
count = 0;
for(var i = 0; i < count; i++) {
var readResults = this.read(buffer, offset, {type: typeArgs.type, typeArgs: typeArgs.typeArgs}, rootNode);
results.size += readResults.size;
@ -36,6 +42,11 @@ function readArray(buffer, offset, typeArgs, rootNode) {
}
function writeArray(value, buffer, offset, typeArgs, rootNode) {
if (typeof typeArgs.count === "undefined" &&
typeof typeArgs.countType !== "undefined") {
offset = this.write(value.length, buffer, offset, { type: typeArgs.countType, typeArgs: typeArgs.countTypeArgs }, rootNode);
} else if (typeof typeArgs.count === "undefined") { // Broken schema, should probably error out
}
for(var index in value) {
offset = this.write(value[index], buffer, offset, {type: typeArgs.type, typeArgs: typeArgs.typeArgs}, rootNode);
}
@ -44,6 +55,10 @@ function writeArray(value, buffer, offset, typeArgs, rootNode) {
function sizeOfArray(value, typeArgs, rootNode) {
var size = 0;
if (typeof typeArgs.count === "undefined" &&
typeof typeArgs.countType !== "undefined") {
size = this.sizeOf(value.length, { type: typeArgs.countType, typeArgs: typeArgs.countTypeArgs }, rootNode);
}
for(var index in value) {
size += this.sizeOf(value[index], {type: typeArgs.type, typeArgs: typeArgs.typeArgs}, rootNode);
}

View File

@ -97,18 +97,37 @@ function writeBool(value, buffer, offset) {
function readBuffer(buffer, offset, typeArgs, rootNode) {
var count = getField(typeArgs.count, rootNode);
var size = 0;
var count;
if (typeof typeArgs.count !== "undefined")
count = getField(typeArgs.count, rootNode);
else if (typeof typeArgs.countType !== "undefined") {
var countResults = this.read(buffer, offset, { type: typeArgs.countType, typeArgs: typeArgs.countTypeArgs }, rootNode);
size += countResults.size;
offset += countResults.size;
count = countResults.value;
}
return {
value: buffer.slice(offset, offset + count),
size: count
size: size + count
};
}
function writeBuffer(value, buffer, offset) {
function writeBuffer(value, buffer, offset, typeArgs, rootNode) {
if (typeof typeArgs.count === "undefined" &&
typeof typeArgs.countType !== "undefined") {
offset = this.write(value.length, buffer, offset, { type: typeArgs.countType, typeArgs: typeArgs.countTypeArgs }, rootNode);
} else if (typeof typeArgs.count === "undefined") { // Broken schema, should probably error out
}
value.copy(buffer, offset);
return offset + value.length;
}
function sizeOfBuffer(value) {
return value.length;
function sizeOfBuffer(value, typeArgs, rootNode) {
var size = 0;
if (typeof typeArgs.count === "undefined" &&
typeof typeArgs.countType !== "undefined") {
size = this.sizeOf(value.length, { type: typeArgs.countType, typeArgs: typeArgs.countTypeArgs }, rootNode);
}
return size + value.length;
}