use forEach for better speed for containers

This commit is contained in:
Romain Beaumont 2015-09-15 20:28:46 +02:00 committed by roblabla
parent b85fa944d7
commit 537a99562a

View File

@ -104,26 +104,26 @@ function readContainer(buffer, offset, typeArgs, rootNode) {
}; };
var backupThis = rootNode.this; var backupThis = rootNode.this;
rootNode.this = results.value; rootNode.this = results.value;
for(var index in typeArgs) { typeArgs.forEach((typeArg) => {
var readResults; var readResults;
tryCatch(() => { tryCatch(() => {
readResults = this.read(buffer, offset, typeArgs[index].type, rootNode); readResults = this.read(buffer, offset, typeArg.type, rootNode);
}, (e) => {
if (typeArgs && typeArgs[index] && typeArgs[index].name)
addErrorField(e, typeArgs[index].name);
else
addErrorField(e, "unknown");
throw e;
});
results.size += readResults.size; results.size += readResults.size;
offset += readResults.size; offset += readResults.size;
if (typeArgs[index].anon) { if (typeArg.anon) {
Object.keys(readResults.value).forEach(function(key) { Object.keys(readResults.value).forEach(function(key) {
results.value[key] = readResults.value[key]; results.value[key] = readResults.value[key];
}); });
} else } else
results.value[typeArgs[index].name] = readResults.value; results.value[typeArg.name] = readResults.value;
} }, (e) => {
if (typeArgs && typeArg && typeArg.name)
addErrorField(e, typeArg.name);
else
addErrorField(e, "unknown");
throw e;
});
});
rootNode.this = backupThis; rootNode.this = backupThis;
return results; return results;
} }
@ -131,20 +131,20 @@ function readContainer(buffer, offset, typeArgs, rootNode) {
function writeContainer(value, buffer, offset, typeArgs, rootNode) { function writeContainer(value, buffer, offset, typeArgs, rootNode) {
var backupThis = rootNode.this; var backupThis = rootNode.this;
rootNode.this = value; rootNode.this = value;
for(var index in typeArgs) { typeArgs.forEach((typeArg) => {
tryCatch(() => { tryCatch(() => {
if (typeArgs[index].anon) if (typeArg.anon)
offset = this.write(value, buffer, offset, typeArgs[index].type, rootNode); offset = this.write(value, buffer, offset, typeArg.type, rootNode);
else else
offset = this.write(value[typeArgs[index].name], buffer, offset, typeArgs[index].type, rootNode); offset = this.write(value[typeArg.name], buffer, offset, typeArg.type, rootNode);
}, (e) => { }, (e) => {
if (typeArgs && typeArgs[index] && typeArgs[index].name) if (typeArgs && typeArg && typeArg.name)
addErrorField(e, typeArgs[index].name); addErrorField(e, typeArg.name);
else else
addErrorField(e, "unknown"); addErrorField(e, "unknown");
throw e; throw e;
}); });
} });
rootNode.this = backupThis; rootNode.this = backupThis;
return offset; return offset;
} }
@ -153,20 +153,20 @@ function sizeOfContainer(value, typeArgs, rootNode) {
var size = 0; var size = 0;
var backupThis = rootNode.this; var backupThis = rootNode.this;
rootNode.this = value; rootNode.this = value;
for(var index in typeArgs) { typeArgs.forEach((typeArg) => {
tryCatch(() => { tryCatch(() => {
if (typeArgs[index].anon) if (typeArg.anon)
size += this.sizeOf(value, typeArgs[index].type, rootNode); size += this.sizeOf(value, typeArg.type, rootNode);
else else
size += this.sizeOf(value[typeArgs[index].name], typeArgs[index].type, rootNode); size += this.sizeOf(value[typeArg.name], typeArg.type, rootNode);
}, (e) => { }, (e) => {
if (typeArgs && typeArgs[index] && typeArgs[index].name) if (typeArgs && typeArg && typeArg.name)
addErrorField(e, typeArgs[index].name); addErrorField(e, typeArg.name);
else else
addErrorField(e, "unknown"); addErrorField(e, "unknown");
throw e; throw e;
}); });
} });
rootNode.this = backupThis; rootNode.this = backupThis;
return size; return size;
} }