CryptoAssist/client/src/outputCalculation.js

35 lines
995 B
JavaScript

var diagram = require("./diagram.js");
var events = require("./events.js");
var blocks = require("./blocks");
function resolveOutput(block, cache){
var inputValues = {};
for(var input in block.inputs){
if(block.inputs[input] in cache){
inputValues[input] = cache[block.inputs[input]];
}
else{
var inputBlock = diagram.state.filter((diagramBlock)=>(diagramBlock.id == block.inputs[input]))[0];
inputValues[input] = resolveOutput(inputBlock, cache);
}
}
var output = blocks[block.type].execute(inputValues, block);
cache[block.id] = output;
return output;
}
function calculateOutputBlocks(){
var cache = {};
var outputBlocks = diagram.state.filter((block)=>((block.type == "output") || (block.type == "frequency")));
for(var block of outputBlocks){
resolveOutput(block, cache);
}
}
events.subscribe("inputChanged", calculateOutputBlocks);
events.subscribe("newJoin", calculateOutputBlocks);
window.calculate = calculateOutputBlocks;