this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at c8d3db63099e68d453f8d28e369c6e9d129bd94c 78 lines 2.1 kB view raw
1var R_INSTRUCTION_PARSER = /^([0-9a-z]+)?\s*([A-Z]+)?\s*([0-9a-z]+)?\s+\->\s+([a-z]+)$/; 2 3var wires = {}; 4 5module.exports = { 6 7 processInstruction: function(instruction) { 8 if (!instruction.match(R_INSTRUCTION_PARSER)) return; 9 var parts = this.parseParts(instruction); 10 this.registerWire(parts); 11 }, 12 13 parseParts: function(instruction) { 14 var parts = instruction.match(R_INSTRUCTION_PARSER); 15 16 parts[1] = convertToNumberIfNumber(parts[1]); 17 parts[3] = convertToNumberIfNumber(parts[3]); 18 19 var returnObj = { 20 // convert missing input1 to null instead of undefined 21 input1: typeof(parts[1]) === 'undefined' ? null : parts[1], 22 input2: typeof(parts[3]) === 'undefined' ? null : parts[3], 23 operation: typeof(parts[2]) === 'undefined' ? null : parts[2], 24 output: parts[4] 25 }; 26 27 return returnObj; 28 }, 29 30 registerWire: function(parts) { 31 wires[parts.output] = function() { 32 var getInput1 = useNumberOrWireInput(parts.input1); 33 var getInput2 = useNumberOrWireInput(parts.input2); 34 35 var result; 36 37 if (parts.operation !== 'NOT') { 38 switch(parts.operation) { 39 case 'AND': result = getInput1() & getInput2(); break; 40 case 'OR': result = getInput1() | getInput2(); break; 41 case 'LSHIFT': result = getInput1() << getInput2(); break; 42 case 'RSHIFT': result = getInput1() >> getInput2(); break; 43 case null: result = getInput1(); break; 44 } 45 } else { 46 result = getInput2() ^ 65535 47 } 48 49 wires[parts.output] = function() { return result }; 50 return result; 51 }; 52 }, 53 54 getWireSignal: function(wire) { 55 return wires[wire](); 56 }, 57 58 setSignal: function(wire, signal) { 59 wires[wire] = function() { return signal }; 60 }, 61 62 resetWires: function() { 63 wires = {}; 64 } 65 66}; 67 68function convertToNumberIfNumber(x) { 69 return parseInt(x) == x ? parseInt(x) : x; 70} 71 72function useNumberOrWireInput(input) { 73 if (typeof(input) === 'number') { 74 return function() { return input }; 75 } else { 76 return function() { return wires[input]() }; 77 } 78}