Aliaksei Chapyzhenka 47fd7856e2 library refactoring
2019-11-10 18:11:19 -08:00

66 lines
1.8 KiB
JavaScript

'use strict';
exports.and = () => {
let state = 0; // idle
let total = 0;
let start = 0;
return {
onA: (time, cmd) => {
switch(state) {
case 0: if (cmd === 15) { state = 1; } break;
case 1: if (cmd === 14) { state = 0; } break;
case 2: if (cmd === 15) { state = 3; start = time; } break;
case 3: if (cmd === 14) { state = 2; total += (time - start); start = 0; } break;
default: throw new Error();
}
},
onNotA: (time, cmd) => {
switch(state) {
case 0: if (cmd === 14) { state = 1; } break;
case 1: if (cmd === 15) { state = 0; } break;
case 2: if (cmd === 14) { state = 3; start = time; } break;
case 3: if (cmd === 15) { state = 2; total += (time - start); start = 0; } break;
default: throw new Error();
}
},
onB: (time, cmd) => {
switch(state) {
case 0: if (cmd === 15) { state = 2; } break;
case 1: if (cmd === 15) { state = 3; start = time; } break;
case 2: if (cmd === 14) { state = 0; } break;
case 3: if (cmd === 14) { state = 1; total += (time - start); start = 0; } break;
default: throw new Error();
}
},
onNotB: (time, cmd) => {
switch(state) {
case 0: if (cmd === 14) { state = 2; } break;
case 1: if (cmd === 14) { state = 3; start = time; } break;
case 2: if (cmd === 15) { state = 0; } break;
case 3: if (cmd === 15) { state = 1; total += (time - start); start = 0; } break;
default: throw new Error();
}
},
time: () => total + start
};
};
exports.activity = skip => {
let start = 0;
let stop = 0;
return {
on: time => {
if (time > skip) {
if (start == 0) {
start = time;
} else {
stop = time;
}
}
},
time: () => stop - start
};
};