mod bytes;
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct Page {
pub start: u64,
pub bytes: u32,
pub(super) values: u32,
}
impl Page {
const RAW_FLAG: u32 = 1 << 31;
pub fn compressed(start: u64, bytes: u32, values: u32) -> Self {
debug_assert!(values & Self::RAW_FLAG == 0, "values too large");
Self {
start,
bytes,
values,
}
}
pub fn raw(start: u64, bytes: u32, values: u32) -> Self {
debug_assert!(values & Self::RAW_FLAG == 0, "values too large");
Self {
start,
bytes,
values: values | Self::RAW_FLAG,
}
}
#[inline]
pub fn is_raw(&self) -> bool {
self.values & Self::RAW_FLAG != 0
}
#[inline]
pub fn values_count(&self) -> u32 {
self.values & !Self::RAW_FLAG
}
#[inline]
pub fn end(&self) -> u64 {
self.start + self.bytes as u64
}
}