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