pub(crate) fn make_decode_table_entry(decode_results: &[u32], sym: usize, len: u32) -> u32
{
decode_results[sym] + (len << 8) + len
}
pub fn fixed_copy<const SIZE: usize>(
src: &[u8], dest: &mut [u8], src_offset: usize, dest_offset: usize
)
{
debug_assert!(
src_offset + SIZE - 1 <= src.len(),
"[src]: End position {} out of range for slice of length {}",
src_offset + SIZE,
src.len()
);
debug_assert!(
dest_offset + SIZE <= dest.len(),
"[dst]: End position {} out of range for slice of length {}",
dest_offset + SIZE,
dest.len()
);
dest[dest_offset..dest_offset + SIZE].copy_from_slice(&src[src_offset..src_offset + SIZE]);
}
pub fn fixed_copy_within<const SIZE: usize>(dest: &mut [u8], src_offset: usize, dest_offset: usize)
{
debug_assert!(
dest_offset + SIZE <= dest.len(),
"[dst]: End position {} out of range for slice of length {}",
dest_offset + SIZE,
dest.len()
);
dest.copy_within(src_offset..src_offset + SIZE, dest_offset);
}
#[inline(always)]
pub fn copy_rep_matches(dest: &mut [u8], offset: usize, dest_offset: usize, length: usize)
{
for i in 0..length
{
let byte = dest[offset + i];
dest[dest_offset + i] = byte;
}
}
#[rustfmt::skip]
pub const fn const_min_usize(a: usize, b: usize) -> usize
{
if a < b { a } else { b }
}
#[inline(never)]
#[cfg(feature = "zlib")]
pub fn calc_adler_hash(data: &[u8]) -> u32
{
use simd_adler32::Adler32;
let mut hasher = Adler32::new();
hasher.write(data);
hasher.finish()
}