@@ -4,29 +4,57 @@ import {node2, node3} from '../../2-node/index.js';
44
55export 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