#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct BitBufferMeta {
offset: usize,
len: usize,
}
impl BitBufferMeta {
pub fn new(offset: usize, len: usize) -> Self {
assert!(offset < 8, "BitBufferMeta offset must be < 8, got {offset}");
Self { offset, len }
}
pub fn from_raw_offset(offset: usize, len: usize) -> (usize, Self) {
(
offset / 8,
Self {
offset: offset % 8,
len,
},
)
}
#[inline(always)]
pub fn offset(&self) -> usize {
self.offset
}
#[inline(always)]
pub fn len(&self) -> usize {
self.len
}
#[inline(always)]
pub fn is_empty(&self) -> bool {
self.len == 0
}
#[inline]
pub fn byte_len(&self) -> usize {
(self.offset + self.len).div_ceil(8)
}
}