Skip to content

Commit

Permalink
🚴 perf: Inline loopy code inside core/concatenate/nodes.
Browse files Browse the repository at this point in the history
  • Loading branch information
make-github-pseudonymous-again committed Oct 15, 2021
1 parent 032d293 commit 35c0268
Showing 1 changed file with 51 additions and 23 deletions.
74 changes: 51 additions & 23 deletions src/0-core/concatenate/nodes.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,57 @@ import {node2, node3} from '../../2-node/index.js';

export function nodes(M, list) {
assert(list.length >= 3 && list.length <= 12);
const out = [];

const n = list.length;

let i = 0;

switch (n % 3) {
case 1:
out.push(node2(M, list[0], list[1]));
out.push(node2(M, list[2], list[3]));
i += 4;
break;
case 2:
out.push(node2(M, list[0], list[1]));
i += 2;
break;
switch (list.length) {
case 3:
return [node3(M, list[0], list[1], list[2])];
case 4:
return [node2(M, list[0], list[1]), node2(M, list[2], list[3])];
case 5:
return [node3(M, list[0], list[1], list[2]), node2(M, list[3], list[4])];
case 6:
return [
node3(M, list[0], list[1], list[2]),
node3(M, list[3], list[4], list[5]),
];
case 7:
return [
node2(M, list[0], list[1]),
node3(M, list[2], list[3], list[4]),
node2(M, list[5], list[6]),
];
case 8:
return [
node3(M, list[0], list[1], list[2]),
node2(M, list[3], list[4]),
node3(M, list[5], list[6], list[7]),
];
case 9:
return [
node3(M, list[0], list[1], list[2]),
node3(M, list[3], list[4], list[5]),
node3(M, list[6], list[7], list[8]),
];
case 10:
return [
node2(M, list[0], list[1]),
node3(M, list[2], list[3], list[4]),
node3(M, list[5], list[6], list[7]),
node2(M, list[8], list[9]),
];
case 11:
return [
node2(M, list[0], list[1]),
node3(M, list[2], list[3], list[4]),
node3(M, list[5], list[6], list[7]),
node3(M, list[8], list[9], list[10]),
];
default:
break;
assert(list.length === 12);
return [
node3(M, list[0], list[1], list[2]),
node3(M, list[3], list[4], list[5]),
node3(M, list[6], list[7], list[8]),
node3(M, list[9], list[10], list[11]),
];
}

for (; i < n; i += 3) {
out.push(node3(M, list[i], list[i + 1], list[i + 2]));
}

return out;
}

0 comments on commit 35c0268

Please sign in to comment.