1
1
'use strict'
2
2
3
- const { wellknownHeaderNames } = require ( './constants' )
3
+ const {
4
+ wellknownHeaderNames,
5
+ headerNameLowerCasedRecord
6
+ } = require ( './constants' )
4
7
5
8
class TstNode {
6
9
/** @type {any } */
@@ -16,14 +19,15 @@ class TstNode {
16
19
/**
17
20
* @param {Uint8Array } key
18
21
* @param {any } value
22
+ * @param {number } index
19
23
*/
20
- constructor ( key , value ) {
21
- if ( key . length === 0 ) {
24
+ constructor ( key , value , index ) {
25
+ if ( index === undefined || index >= key . length ) {
22
26
throw new TypeError ( 'Unreachable' )
23
27
}
24
- this . code = key [ 0 ]
25
- if ( key . length > 1 ) {
26
- this . middle = new TstNode ( key . subarray ( 1 ) , value )
28
+ this . code = key [ index ]
29
+ if ( key . length !== ++ index ) {
30
+ this . middle = new TstNode ( key , value , index )
27
31
} else {
28
32
this . value = value
29
33
}
@@ -32,31 +36,32 @@ class TstNode {
32
36
/**
33
37
* @param {Uint8Array } key
34
38
* @param {any } value
39
+ * @param {number } index
35
40
*/
36
- add ( key , value ) {
37
- if ( key . length === 0 ) {
41
+ add ( key , value , index ) {
42
+ if ( index === undefined || index >= key . length ) {
38
43
throw new TypeError ( 'Unreachable' )
39
44
}
40
- const code = key [ 0 ]
45
+ const code = key [ index ]
41
46
if ( this . code === code ) {
42
- if ( key . length === 1 ) {
47
+ if ( key . length === ++ index ) {
43
48
this . value = value
44
49
} else if ( this . middle !== null ) {
45
- this . middle . add ( key . subarray ( 1 ) , value )
50
+ this . middle . add ( key , value , index )
46
51
} else {
47
- this . middle = new TstNode ( key . subarray ( 1 ) , value )
52
+ this . middle = new TstNode ( key , value , index )
48
53
}
49
54
} else if ( this . code < code ) {
50
55
if ( this . left !== null ) {
51
- this . left . add ( key , value )
56
+ this . left . add ( key , value , index )
52
57
} else {
53
- this . left = new TstNode ( key , value )
58
+ this . left = new TstNode ( key , value , index )
54
59
}
55
60
} else {
56
61
if ( this . right !== null ) {
57
- this . right . add ( key , value )
62
+ this . right . add ( key , value , index )
58
63
} else {
59
- this . right = new TstNode ( key , value )
64
+ this . right = new TstNode ( key , value , index )
60
65
}
61
66
}
62
67
}
@@ -102,9 +107,9 @@ class TernarySearchTree {
102
107
* */
103
108
insert ( key , value ) {
104
109
if ( this . node === null ) {
105
- this . node = new TstNode ( key , value )
110
+ this . node = new TstNode ( key , value , 0 )
106
111
} else {
107
- this . node . add ( key , value )
112
+ this . node . add ( key , value , 0 )
108
113
}
109
114
}
110
115
@@ -119,7 +124,7 @@ class TernarySearchTree {
119
124
const tree = new TernarySearchTree ( )
120
125
121
126
for ( let i = 0 ; i < wellknownHeaderNames . length ; ++ i ) {
122
- const key = wellknownHeaderNames [ i ] . toLowerCase ( )
127
+ const key = headerNameLowerCasedRecord [ wellknownHeaderNames [ i ] ]
123
128
tree . insert ( Buffer . from ( key ) , key )
124
129
}
125
130
0 commit comments