@thi.ng/dlogic
Version:
Assorted digital logic ops / constructs
65 lines (64 loc) • 1.2 kB
JavaScript
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
};