| /// Count up to `(2^32)-1` occurrences of a byte in a slice |
| /// of bytes, simple |
| /// |
| /// # Example |
| /// |
| /// ``` |
| /// let s = b"This is yet another Text with spaces"; |
| /// let number_of_spaces = bytecount::naive_count_32(s, b' '); |
| /// assert_eq!(number_of_spaces, 6); |
| /// ``` |
| pub fn naive_count_32(haystack: &[u8], needle: u8) -> usize { |
| haystack.iter().fold(0, |n, c| n + (*c == needle) as u32) as usize |
| } |
| |
| /// Count occurrences of a byte in a slice of bytes, simple |
| /// |
| /// # Example |
| /// |
| /// ``` |
| /// let s = b"This is yet another Text with spaces"; |
| /// let number_of_spaces = bytecount::naive_count(s, b' '); |
| /// assert_eq!(number_of_spaces, 6); |
| /// ``` |
| pub fn naive_count(utf8_chars: &[u8], needle: u8) -> usize { |
| utf8_chars |
| .iter() |
| .fold(0, |n, c| n + (*c == needle) as usize) |
| } |
| |
| /// Count the number of UTF-8 encoded Unicode codepoints in a slice of bytes, simple |
| /// |
| /// This function is safe to use on any byte array, valid UTF-8 or not, |
| /// but the output is only meaningful for well-formed UTF-8. |
| /// |
| /// # Example |
| /// |
| /// ``` |
| /// let swordfish = "メカジキ"; |
| /// let char_count = bytecount::naive_num_chars(swordfish.as_bytes()); |
| /// assert_eq!(char_count, 4); |
| /// ``` |
| pub fn naive_num_chars(utf8_chars: &[u8]) -> usize { |
| utf8_chars |
| .iter() |
| .filter(|&&byte| (byte >> 6) != 0b10) |
| .count() |
| } |