1fb6c1f39Sopenharmony_ciuse memchr::{memrchr, memrchr2, memrchr3, Memchr, Memchr2, Memchr3};
2fb6c1f39Sopenharmony_ci
3fb6c1f39Sopenharmony_ciuse crate::memchr::{c, fallback, naive};
4fb6c1f39Sopenharmony_ci
5fb6c1f39Sopenharmony_cipub fn memchr1_count(b1: u8, haystack: &[u8]) -> usize {
6fb6c1f39Sopenharmony_ci    Memchr::new(b1, haystack).count()
7fb6c1f39Sopenharmony_ci}
8fb6c1f39Sopenharmony_ci
9fb6c1f39Sopenharmony_cipub fn memchr1_libc_count(b1: u8, haystack: &[u8]) -> usize {
10fb6c1f39Sopenharmony_ci    let mut count = 0;
11fb6c1f39Sopenharmony_ci    let mut start = 0;
12fb6c1f39Sopenharmony_ci    while let Some(i) = c::memchr(b1, &haystack[start..]) {
13fb6c1f39Sopenharmony_ci        count += 1;
14fb6c1f39Sopenharmony_ci        start += i + 1;
15fb6c1f39Sopenharmony_ci    }
16fb6c1f39Sopenharmony_ci    count
17fb6c1f39Sopenharmony_ci}
18fb6c1f39Sopenharmony_ci
19fb6c1f39Sopenharmony_cipub fn fallback1_count(b1: u8, haystack: &[u8]) -> usize {
20fb6c1f39Sopenharmony_ci    let mut count = 0;
21fb6c1f39Sopenharmony_ci    let mut start = 0;
22fb6c1f39Sopenharmony_ci    while let Some(i) = fallback::memchr(b1, &haystack[start..]) {
23fb6c1f39Sopenharmony_ci        count += 1;
24fb6c1f39Sopenharmony_ci        start += i + 1;
25fb6c1f39Sopenharmony_ci    }
26fb6c1f39Sopenharmony_ci    count
27fb6c1f39Sopenharmony_ci}
28fb6c1f39Sopenharmony_ci
29fb6c1f39Sopenharmony_cipub fn naive1_count(b1: u8, haystack: &[u8]) -> usize {
30fb6c1f39Sopenharmony_ci    let mut count = 0;
31fb6c1f39Sopenharmony_ci    let mut start = 0;
32fb6c1f39Sopenharmony_ci    while let Some(i) = naive::memchr(b1, &haystack[start..]) {
33fb6c1f39Sopenharmony_ci        count += 1;
34fb6c1f39Sopenharmony_ci        start += i + 1;
35fb6c1f39Sopenharmony_ci    }
36fb6c1f39Sopenharmony_ci    count
37fb6c1f39Sopenharmony_ci}
38fb6c1f39Sopenharmony_ci
39fb6c1f39Sopenharmony_cipub fn memchr2_count(b1: u8, b2: u8, haystack: &[u8]) -> usize {
40fb6c1f39Sopenharmony_ci    Memchr2::new(b1, b2, haystack).count()
41fb6c1f39Sopenharmony_ci}
42fb6c1f39Sopenharmony_ci
43fb6c1f39Sopenharmony_cipub fn fallback2_count(b1: u8, b2: u8, haystack: &[u8]) -> usize {
44fb6c1f39Sopenharmony_ci    let mut count = 0;
45fb6c1f39Sopenharmony_ci    let mut start = 0;
46fb6c1f39Sopenharmony_ci    while let Some(i) = fallback::memchr2(b1, b2, &haystack[start..]) {
47fb6c1f39Sopenharmony_ci        count += 1;
48fb6c1f39Sopenharmony_ci        start += i + 1;
49fb6c1f39Sopenharmony_ci    }
50fb6c1f39Sopenharmony_ci    count
51fb6c1f39Sopenharmony_ci}
52fb6c1f39Sopenharmony_ci
53fb6c1f39Sopenharmony_cipub fn naive2_count(b1: u8, b2: u8, haystack: &[u8]) -> usize {
54fb6c1f39Sopenharmony_ci    let mut count = 0;
55fb6c1f39Sopenharmony_ci    let mut start = 0;
56fb6c1f39Sopenharmony_ci    while let Some(i) = naive::memchr2(b1, b2, &haystack[start..]) {
57fb6c1f39Sopenharmony_ci        count += 1;
58fb6c1f39Sopenharmony_ci        start += i + 1;
59fb6c1f39Sopenharmony_ci    }
60fb6c1f39Sopenharmony_ci    count
61fb6c1f39Sopenharmony_ci}
62fb6c1f39Sopenharmony_ci
63fb6c1f39Sopenharmony_cipub fn memchr3_count(b1: u8, b2: u8, b3: u8, haystack: &[u8]) -> usize {
64fb6c1f39Sopenharmony_ci    Memchr3::new(b1, b2, b3, haystack).count()
65fb6c1f39Sopenharmony_ci}
66fb6c1f39Sopenharmony_ci
67fb6c1f39Sopenharmony_cipub fn fallback3_count(b1: u8, b2: u8, b3: u8, haystack: &[u8]) -> usize {
68fb6c1f39Sopenharmony_ci    let mut count = 0;
69fb6c1f39Sopenharmony_ci    let mut start = 0;
70fb6c1f39Sopenharmony_ci    while let Some(i) = fallback::memchr3(b1, b2, b3, &haystack[start..]) {
71fb6c1f39Sopenharmony_ci        count += 1;
72fb6c1f39Sopenharmony_ci        start += i + 1;
73fb6c1f39Sopenharmony_ci    }
74fb6c1f39Sopenharmony_ci    count
75fb6c1f39Sopenharmony_ci}
76fb6c1f39Sopenharmony_ci
77fb6c1f39Sopenharmony_cipub fn naive3_count(b1: u8, b2: u8, b3: u8, haystack: &[u8]) -> usize {
78fb6c1f39Sopenharmony_ci    let mut count = 0;
79fb6c1f39Sopenharmony_ci    let mut start = 0;
80fb6c1f39Sopenharmony_ci    while let Some(i) = naive::memchr3(b1, b2, b3, &haystack[start..]) {
81fb6c1f39Sopenharmony_ci        count += 1;
82fb6c1f39Sopenharmony_ci        start += i + 1;
83fb6c1f39Sopenharmony_ci    }
84fb6c1f39Sopenharmony_ci    count
85fb6c1f39Sopenharmony_ci}
86fb6c1f39Sopenharmony_ci
87fb6c1f39Sopenharmony_cipub fn memrchr1_count(b1: u8, haystack: &[u8]) -> usize {
88fb6c1f39Sopenharmony_ci    let mut count = 0;
89fb6c1f39Sopenharmony_ci    let mut end = haystack.len();
90fb6c1f39Sopenharmony_ci    while let Some(i) = memrchr(b1, &haystack[..end]) {
91fb6c1f39Sopenharmony_ci        count += 1;
92fb6c1f39Sopenharmony_ci        end = i;
93fb6c1f39Sopenharmony_ci    }
94fb6c1f39Sopenharmony_ci    count
95fb6c1f39Sopenharmony_ci}
96fb6c1f39Sopenharmony_ci
97fb6c1f39Sopenharmony_ci#[cfg(all(target_os = "linux"))]
98fb6c1f39Sopenharmony_cipub fn memrchr1_libc_count(b1: u8, haystack: &[u8]) -> usize {
99fb6c1f39Sopenharmony_ci    let mut count = 0;
100fb6c1f39Sopenharmony_ci    let mut end = haystack.len();
101fb6c1f39Sopenharmony_ci    while let Some(i) = c::memrchr(b1, &haystack[..end]) {
102fb6c1f39Sopenharmony_ci        count += 1;
103fb6c1f39Sopenharmony_ci        end = i;
104fb6c1f39Sopenharmony_ci    }
105fb6c1f39Sopenharmony_ci    count
106fb6c1f39Sopenharmony_ci}
107fb6c1f39Sopenharmony_ci
108fb6c1f39Sopenharmony_cipub fn memrchr2_count(b1: u8, b2: u8, haystack: &[u8]) -> usize {
109fb6c1f39Sopenharmony_ci    let mut count = 0;
110fb6c1f39Sopenharmony_ci    let mut end = haystack.len();
111fb6c1f39Sopenharmony_ci    while let Some(i) = memrchr2(b1, b2, &haystack[..end]) {
112fb6c1f39Sopenharmony_ci        count += 1;
113fb6c1f39Sopenharmony_ci        end = i;
114fb6c1f39Sopenharmony_ci    }
115fb6c1f39Sopenharmony_ci    count
116fb6c1f39Sopenharmony_ci}
117fb6c1f39Sopenharmony_ci
118fb6c1f39Sopenharmony_cipub fn memrchr3_count(b1: u8, b2: u8, b3: u8, haystack: &[u8]) -> usize {
119fb6c1f39Sopenharmony_ci    let mut count = 0;
120fb6c1f39Sopenharmony_ci    let mut end = haystack.len();
121fb6c1f39Sopenharmony_ci    while let Some(i) = memrchr3(b1, b2, b3, &haystack[..end]) {
122fb6c1f39Sopenharmony_ci        count += 1;
123fb6c1f39Sopenharmony_ci        end = i;
124fb6c1f39Sopenharmony_ci    }
125fb6c1f39Sopenharmony_ci    count
126fb6c1f39Sopenharmony_ci}
127