@@ -309,21 +309,11 @@ impl Patterns {
309
309
}
310
310
311
311
/// Checks if input string matches the present patterns.
312
- ///
313
- /// # Arguments
314
- ///
315
- /// * `input` - object that implements [AsRef](AsRef) for [str](str) and describes line.
316
- ///
317
- /// # Returns
318
- ///
319
- /// Returns [bool](bool) - `true` if input matches present patterns, else `false`.
320
312
fn matches (
321
313
& self ,
322
- input : impl AsRef < [ u8 ] > ,
314
+ input : & [ u8 ] ,
323
315
collect_matching_substrings : bool ,
324
316
) -> Result < MatchesData , Box < dyn Error > > {
325
- let input = input. as_ref ( ) ;
326
-
327
317
let mut matching_substrings = Vec :: < Vec < u8 > > :: new ( ) ;
328
318
329
319
let mut any_pattern_matched = false ;
@@ -332,7 +322,7 @@ impl Patterns {
332
322
Patterns :: Fixed ( patterns, ignore_case, line_regexp) => {
333
323
let input_ascii_lowercase: Vec < u8 > ;
334
324
335
- let input = if * ignore_case {
325
+ let input_after_ignore_case = if * ignore_case {
336
326
input_ascii_lowercase = input. to_ascii_lowercase ( ) ;
337
327
338
328
input_ascii_lowercase. as_slice ( )
@@ -341,8 +331,10 @@ impl Patterns {
341
331
} ;
342
332
343
333
for pattern in patterns {
334
+ let pattern_as_bytes = pattern. as_bytes ( ) ;
335
+
344
336
if * line_regexp {
345
- if input != pattern . as_bytes ( ) {
337
+ if input_after_ignore_case != pattern_as_bytes {
346
338
continue ;
347
339
}
348
340
@@ -352,20 +344,24 @@ impl Patterns {
352
344
353
345
any_pattern_matched = true ;
354
346
355
- matching_substrings. push ( pattern . as_bytes ( ) . to_vec ( ) ) ;
347
+ matching_substrings. push ( input . to_vec ( ) ) ;
356
348
} else {
357
- let pattern_len = pattern. len ( ) ;
358
-
359
- for index in memmem:: find_iter ( input, pattern) {
360
- if !collect_matching_substrings {
361
- return Ok ( MatchesData :: fast_path_match ( ) ) ;
362
- }
349
+ if collect_matching_substrings {
350
+ let pattern_as_bytes_len = pattern_as_bytes. len ( ) ;
363
351
364
- any_pattern_matched = true ;
352
+ for index in
353
+ memmem:: find_iter ( input_after_ignore_case, pattern_as_bytes)
354
+ {
355
+ any_pattern_matched = true ;
365
356
366
- let match_slice = & input[ index..( index + pattern_len ) ] ;
357
+ let match_slice = & input[ index..( index + pattern_as_bytes_len ) ] ;
367
358
368
- matching_substrings. push ( match_slice. to_vec ( ) ) ;
359
+ matching_substrings. push ( match_slice. to_vec ( ) ) ;
360
+ }
361
+ } else {
362
+ if memmem:: find ( input_after_ignore_case, pattern_as_bytes) . is_some ( ) {
363
+ return Ok ( MatchesData :: fast_path_match ( ) ) ;
364
+ }
369
365
}
370
366
}
371
367
}
@@ -503,6 +499,7 @@ struct MatchesData {
503
499
}
504
500
505
501
impl MatchesData {
502
+ #[ inline]
506
503
pub fn fast_path_match ( ) -> MatchesData {
507
504
MatchesData {
508
505
any_pattern_matched : true ,
0 commit comments