use super::kernel_tables;
use crate::checksum::common::portable;
#[inline]
pub fn crc16_ccitt_slice8(crc: u16, data: &[u8]) -> u16 {
portable::slice8_16(crc, data, &kernel_tables::CCITT_TABLES_8)
}
#[inline]
pub fn crc16_ibm_slice8(crc: u16, data: &[u8]) -> u16 {
portable::slice8_16(crc, data, &kernel_tables::IBM_TABLES_8)
}
#[inline(always)]
pub fn crc16_ccitt_bytewise(crc: u16, data: &[u8]) -> u16 {
crc16_bytewise(crc, data, &kernel_tables::CCITT_TABLES_8[0])
}
#[inline(always)]
pub fn crc16_ibm_bytewise(crc: u16, data: &[u8]) -> u16 {
crc16_bytewise(crc, data, &kernel_tables::IBM_TABLES_8[0])
}
#[inline(always)]
#[allow(clippy::indexing_slicing)] fn crc16_bytewise(mut crc: u16, data: &[u8], table: &[u16; 256]) -> u16 {
for &b in data {
let index = ((crc ^ (b as u16)) & 0xFF) as usize;
crc = table[index] ^ (crc >> 8);
}
crc
}