Coverage Report

Created: 2025-09-27 07:40

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/regex-automata-0.4.11/src/util/memchr.rs
Line
Count
Source
1
/*!
2
This module defines simple wrapper routines for the memchr functions from the
3
`memchr` crate. Basically, when the `memchr` crate is available, we use it,
4
otherwise we use a naive implementation which is still pretty fast.
5
*/
6
7
pub(crate) use self::inner::*;
8
9
#[cfg(feature = "perf-literal-substring")]
10
pub(super) mod inner {
11
    #[cfg_attr(feature = "perf-inline", inline(always))]
12
0
    pub(crate) fn memchr(n1: u8, haystack: &[u8]) -> Option<usize> {
13
0
        memchr::memchr(n1, haystack)
14
0
    }
15
16
    #[cfg_attr(feature = "perf-inline", inline(always))]
17
0
    pub(crate) fn memchr2(n1: u8, n2: u8, haystack: &[u8]) -> Option<usize> {
18
0
        memchr::memchr2(n1, n2, haystack)
19
0
    }
20
21
    #[cfg_attr(feature = "perf-inline", inline(always))]
22
0
    pub(crate) fn memchr3(
23
0
        n1: u8,
24
0
        n2: u8,
25
0
        n3: u8,
26
0
        haystack: &[u8],
27
0
    ) -> Option<usize> {
28
0
        memchr::memchr3(n1, n2, n3, haystack)
29
0
    }
30
31
    #[cfg_attr(feature = "perf-inline", inline(always))]
32
0
    pub(crate) fn memrchr(n1: u8, haystack: &[u8]) -> Option<usize> {
33
0
        memchr::memrchr(n1, haystack)
34
0
    }
35
36
    #[cfg_attr(feature = "perf-inline", inline(always))]
37
0
    pub(crate) fn memrchr2(n1: u8, n2: u8, haystack: &[u8]) -> Option<usize> {
38
0
        memchr::memrchr2(n1, n2, haystack)
39
0
    }
40
41
    #[cfg_attr(feature = "perf-inline", inline(always))]
42
0
    pub(crate) fn memrchr3(
43
0
        n1: u8,
44
0
        n2: u8,
45
0
        n3: u8,
46
0
        haystack: &[u8],
47
0
    ) -> Option<usize> {
48
0
        memchr::memrchr3(n1, n2, n3, haystack)
49
0
    }
50
}
51
52
#[cfg(not(feature = "perf-literal-substring"))]
53
pub(super) mod inner {
54
    #[cfg_attr(feature = "perf-inline", inline(always))]
55
    pub(crate) fn memchr(n1: u8, haystack: &[u8]) -> Option<usize> {
56
        haystack.iter().position(|&b| b == n1)
57
    }
58
59
    #[cfg_attr(feature = "perf-inline", inline(always))]
60
    pub(crate) fn memchr2(n1: u8, n2: u8, haystack: &[u8]) -> Option<usize> {
61
        haystack.iter().position(|&b| b == n1 || b == n2)
62
    }
63
64
    #[cfg_attr(feature = "perf-inline", inline(always))]
65
    pub(crate) fn memchr3(
66
        n1: u8,
67
        n2: u8,
68
        n3: u8,
69
        haystack: &[u8],
70
    ) -> Option<usize> {
71
        haystack.iter().position(|&b| b == n1 || b == n2 || b == n3)
72
    }
73
74
    #[cfg_attr(feature = "perf-inline", inline(always))]
75
    pub(crate) fn memrchr(n1: u8, haystack: &[u8]) -> Option<usize> {
76
        haystack.iter().rposition(|&b| b == n1)
77
    }
78
79
    #[cfg_attr(feature = "perf-inline", inline(always))]
80
    pub(crate) fn memrchr2(n1: u8, n2: u8, haystack: &[u8]) -> Option<usize> {
81
        haystack.iter().rposition(|&b| b == n1 || b == n2)
82
    }
83
84
    #[cfg_attr(feature = "perf-inline", inline(always))]
85
    pub(crate) fn memrchr3(
86
        n1: u8,
87
        n2: u8,
88
        n3: u8,
89
        haystack: &[u8],
90
    ) -> Option<usize> {
91
        haystack.iter().rposition(|&b| b == n1 || b == n2 || b == n3)
92
    }
93
}