1use memchr::{memrchr, memrchr2, memrchr3, Memchr, Memchr2, Memchr3}; 2 3use crate::memchr::{c, fallback, naive}; 4 5pub fn memchr1_count(b1: u8, haystack: &[u8]) -> usize { 6 Memchr::new(b1, haystack).count() 7} 8 9pub 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 19pub 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 29pub 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 39pub fn memchr2_count(b1: u8, b2: u8, haystack: &[u8]) -> usize { 40 Memchr2::new(b1, b2, haystack).count() 41} 42 43pub 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 53pub 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 63pub fn memchr3_count(b1: u8, b2: u8, b3: u8, haystack: &[u8]) -> usize { 64 Memchr3::new(b1, b2, b3, haystack).count() 65} 66 67pub 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 77pub 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 87pub 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"))] 98pub 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 108pub 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 118pub 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