aboutsummaryrefslogtreecommitdiff
path: root/src/enzymatic.js
diff options
context:
space:
mode:
authoralon@honor <none@none>2010-10-22 23:44:04 -0700
committeralon@honor <none@none>2010-10-22 23:44:04 -0700
commit3e7515aa768ada28f640c172a7c355146e75004d (patch)
treedbfd219a5de0703a6e5939d5d437d59fc09b7fb9 /src/enzymatic.js
parentfd0ef38ef855f4cf25814e4418ecea3dfbb9f61c (diff)
optimize enzymatic addItem[s]
Diffstat (limited to 'src/enzymatic.js')
-rw-r--r--src/enzymatic.js19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/enzymatic.js b/src/enzymatic.js
index 29e9e773..cbc111f5 100644
--- a/src/enzymatic.js
+++ b/src/enzymatic.js
@@ -13,17 +13,25 @@ Substrate = function(name_) {
Substrate.prototype = {
addItem: function(item, targetZyme) {
- this.addItems([item], targetZyme);
+ if (targetZyme == '/dev/null') return;
+ if (targetZyme == '/dev/stdout') {
+ this.results.push(item);
+ return;
+ }
+ this.zymes[targetZyme].inbox.push(item);
},
addItems: function(items, targetZyme) {
- assert(targetZyme);
if (targetZyme == '/dev/null') return;
if (targetZyme == '/dev/stdout') {
this.results = this.results.concat(items);
return;
}
- assert(this.zymes[targetZyme]);
+ this.zymes[targetZyme].inbox = this.zymes[targetZyme].inbox.concat(items);
+ },
+
+ checkInbox: function(zyme) {
+ var items = zyme.inbox;
for (var i = 0; i < items.length; i++) {
var item = items[i];
if (!item.__uid__) {
@@ -31,13 +39,15 @@ Substrate.prototype = {
this.currUid ++;
}
}
- this.zymes[targetZyme].items = this.zymes[targetZyme].items.concat(items);
+ zyme.inbox = [];
+ zyme.items = zyme.items.concat(items);
},
addZyme: function(name_, zyme) {
assert(name_ && zyme);
zyme.name_ = name_;
zyme.items = [];
+ zyme.inbox = [];
zyme.forwardItem = bind(this, this.addItem);
zyme.forwardItems = bind(this, this.addItems);
this.zymes[name_] = zyme;
@@ -72,6 +82,7 @@ Substrate.prototype = {
values(this.zymes).forEach(function(zyme) {
midComment();
+ that.checkInbox(zyme);
if (zyme.items.length == 0) return;
var inputs = zyme.items.slice(0);