File tree Expand file tree Collapse file tree 1 file changed +9
-6
lines changed Expand file tree Collapse file tree 1 file changed +9
-6
lines changed Original file line number Diff line number Diff line change @@ -1280,17 +1280,20 @@ impl TextBuffer {
12801280
12811281 let mut start = offset;
12821282 let pattern = search. pattern . as_bytes ( ) ;
1283+ let pattern_len = pattern. len ( ) ;
12831284
12841285 let skip_table = {
1285- let mut table = HashMap :: new ( ) ;
1286- let pattern_len = pattern. len ( ) ;
1286+ let mut table: [ usize ; 128 ] = [ pattern. len ( ) ; 128 ] ;
12871287
12881288 for i in 0 ..pattern_len. saturating_sub ( 1 ) {
12891289 let c = pattern[ i] ;
1290+ if c > 128 {
1291+ continue ;
1292+ }
12901293 let skip_distance = pattern_len - i - 1 ;
12911294
1292- table. insert ( c. to_ascii_lowercase ( ) , skip_distance) ;
1293- table. insert ( c. to_ascii_uppercase ( ) , skip_distance) ;
1295+ table[ c. to_ascii_lowercase ( ) as usize ] = skip_distance;
1296+ table[ c. to_ascii_uppercase ( ) as usize ] = skip_distance;
12941297 }
12951298
12961299 table
@@ -1299,7 +1302,6 @@ impl TextBuffer {
12991302 let mut hit = None ;
13001303
13011304 let buffer_len = self . buffer . len ( ) ;
1302- let pattern_len = pattern. len ( ) ;
13031305
13041306 while start <= buffer_len {
13051307 let chunk = self . read_forward ( start) ;
@@ -1314,7 +1316,8 @@ impl TextBuffer {
13141316 break ;
13151317 }
13161318
1317- skip = skip + skip_table. get ( & chunk[ skip + pattern_len - 1 ] ) . copied ( ) . unwrap_or ( 1 ) ;
1319+ skip +=
1320+ skip_table. get ( chunk[ skip + pattern_len - 1 ] as usize ) . unwrap_or ( & pattern_len) ;
13181321 }
13191322
13201323 start += chunk. len ( ) ;
You can’t perform that action at this time.
0 commit comments