Skip to content

Commit 35c0268

Browse files
🚴 perf: Inline loopy code inside core/concatenate/nodes.
1 parent 032d293 commit 35c0268

File tree

1 file changed

+51
-23
lines changed

1 file changed

+51
-23
lines changed

src/0-core/concatenate/nodes.js

+51-23
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,57 @@ import {node2, node3} from '../../2-node/index.js';
44

55
export function nodes(M, list) {
66
assert(list.length >= 3 && list.length <= 12);
7-
const out = [];
8-
9-
const n = list.length;
10-
11-
let i = 0;
12-
13-
switch (n % 3) {
14-
case 1:
15-
out.push(node2(M, list[0], list[1]));
16-
out.push(node2(M, list[2], list[3]));
17-
i += 4;
18-
break;
19-
case 2:
20-
out.push(node2(M, list[0], list[1]));
21-
i += 2;
22-
break;
7+
switch (list.length) {
8+
case 3:
9+
return [node3(M, list[0], list[1], list[2])];
10+
case 4:
11+
return [node2(M, list[0], list[1]), node2(M, list[2], list[3])];
12+
case 5:
13+
return [node3(M, list[0], list[1], list[2]), node2(M, list[3], list[4])];
14+
case 6:
15+
return [
16+
node3(M, list[0], list[1], list[2]),
17+
node3(M, list[3], list[4], list[5]),
18+
];
19+
case 7:
20+
return [
21+
node2(M, list[0], list[1]),
22+
node3(M, list[2], list[3], list[4]),
23+
node2(M, list[5], list[6]),
24+
];
25+
case 8:
26+
return [
27+
node3(M, list[0], list[1], list[2]),
28+
node2(M, list[3], list[4]),
29+
node3(M, list[5], list[6], list[7]),
30+
];
31+
case 9:
32+
return [
33+
node3(M, list[0], list[1], list[2]),
34+
node3(M, list[3], list[4], list[5]),
35+
node3(M, list[6], list[7], list[8]),
36+
];
37+
case 10:
38+
return [
39+
node2(M, list[0], list[1]),
40+
node3(M, list[2], list[3], list[4]),
41+
node3(M, list[5], list[6], list[7]),
42+
node2(M, list[8], list[9]),
43+
];
44+
case 11:
45+
return [
46+
node2(M, list[0], list[1]),
47+
node3(M, list[2], list[3], list[4]),
48+
node3(M, list[5], list[6], list[7]),
49+
node3(M, list[8], list[9], list[10]),
50+
];
2351
default:
24-
break;
52+
assert(list.length === 12);
53+
return [
54+
node3(M, list[0], list[1], list[2]),
55+
node3(M, list[3], list[4], list[5]),
56+
node3(M, list[6], list[7], list[8]),
57+
node3(M, list[9], list[10], list[11]),
58+
];
2559
}
26-
27-
for (; i < n; i += 3) {
28-
out.push(node3(M, list[i], list[i + 1], list[i + 2]));
29-
}
30-
31-
return out;
3260
}

0 commit comments

Comments
 (0)