/// 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() }