pub const CLASS_STRUCTURAL: u8 = 0b0001;
pub const CHAR_CLASS: [u8; 256] = {
let mut table = [0u8; 256];
table[b'{' as usize] = CLASS_STRUCTURAL;
table[b'}' as usize] = CLASS_STRUCTURAL;
table[b'[' as usize] = CLASS_STRUCTURAL;
table[b']' as usize] = CLASS_STRUCTURAL;
table[b':' as usize] = CLASS_STRUCTURAL;
table[b',' as usize] = CLASS_STRUCTURAL;
table[b'"' as usize] = CLASS_STRUCTURAL;
table
};
#[inline(always)]
pub fn is_structural(byte: u8) -> bool {
CHAR_CLASS[usize::from(byte)] & CLASS_STRUCTURAL != 0
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_structural_chars() {
assert!(is_structural(b'{'));
assert!(is_structural(b'}'));
assert!(is_structural(b'['));
assert!(is_structural(b']'));
assert!(is_structural(b':'));
assert!(is_structural(b','));
assert!(is_structural(b'"'));
assert!(!is_structural(b'a'));
assert!(!is_structural(b'0'));
assert!(!is_structural(b' '));
}
}