#[cfg(any(feature = "bpe", feature = "byte_level"))]
pub const BYTE_TO_CHAR: [char; 256] = {
let mut table = ['\0'; 256];
let mut next: u32 = 256;
let mut i: usize = 0;
while i < 256 {
let b = i as u8;
let nice = (b >= b'!' && b <= b'~') || (b >= 0xA1 && b <= 0xAC) || b >= 0xAE;
let cp = if nice {
i as u32
} else {
let cp = next;
next += 1;
cp
};
table[i] = char::from_u32(cp).expect("valid codepoint");
i += 1;
}
table
};
#[cfg(feature = "byte_level")]
pub const BYTE_TO_UTF8: [[u8; 2]; 256] = {
let mut table = [[0u8; 2]; 256];
let mut i: usize = 0;
while i < 256 {
let cp = BYTE_TO_CHAR[i] as u32;
if cp < 0x80 {
table[i] = [cp as u8, 0];
} else {
table[i] = [(0xC0 | (cp >> 6)) as u8, (0x80 | (cp & 0x3F)) as u8];
}
i += 1;
}
table
};
#[cfg(feature = "byte_level")]
pub const BYTE_TO_UTF8_LEN: [u8; 256] = {
let mut table = [0u8; 256];
let mut i: usize = 0;
while i < 256 {
let cp = BYTE_TO_CHAR[i] as u32;
table[i] = if cp < 0x80 { 1 } else { 2 };
i += 1;
}
table
};