UNPKG

@thi.ng/dlogic

Version:

Assorted digital logic ops / constructs

65 lines (64 loc) 1.2 kB
const not = (x) => !x; const nand = (a, b) => !(a && b); const and = (a, b) => a && b; const or = (a, b) => a || b; const nor = (a, b) => !(a || b); const xor = (a, b) => a !== b; const xnor = (a, b) => a === b; const imply = (a, b) => !a || b; const aoi21 = (a, b, c) => !(a || b && c); const aoi22 = (a, b, c, d) => !(a && b || c && d); const oai21 = (a, b, c) => !(a && (b || c)); const oai22 = (a, b, c, d) => !((a || b) && (c || d)); const mux = (a, b, s) => a && !s || b && s; const demux = (i, s) => [ i && !s, i && s ]; const hadd1 = (a, b) => ({ s: a !== b, c: a && b }); const fadd1 = (a, b, c) => ({ s: a !== b !== c, c: a !== b && c || a && b }); const rca = (a, b, c) => { const s = []; for (let n = a.length, i = 0; i < n; i++) { const r = fadd1(a[i], b[i], c); s.push(r.s); c = r.c; } return { s, c }; }; const delay = (n) => { const buf = new Array(n).fill(false); let i = 0; return n > 0 ? (x) => { const y = buf[i]; buf[i++] = x; i %= n; return y; } : (x) => x; }; export { and, aoi21, aoi22, delay, demux, fadd1, hadd1, imply, mux, nand, nor, not, oai21, oai22, or, rca, xnor, xor };