From f60d437409a2602517db4c1b22bb9ada0b10ab02 Mon Sep 17 00:00:00 2001 From: Aliaksei Chapyzhenka Date: Sun, 10 Nov 2019 18:00:54 -0800 Subject: [PATCH] set of utility functions --- lib/utils.js | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 lib/utils.js diff --git a/lib/utils.js b/lib/utils.js new file mode 100644 index 0000000..2d9bd4f --- /dev/null +++ b/lib/utils.js @@ -0,0 +1,65 @@ +'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 + }; +};