use crate::parse_prelude::*;
use core::ops::Range;
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
pub struct TableRecord {
pub tag: Tag,
pub checksum: u32,
pub offset: u32,
pub len: u32,
}
impl ReadData for TableRecord {
unsafe fn read_data_unchecked(buf: &[u8], offset: usize) -> Self {
Self {
tag: Tag(u32::read_data_unchecked(buf, offset)),
checksum: u32::read_data_unchecked(buf, offset + 4),
offset: u32::read_data_unchecked(buf, offset + 8),
len: u32::read_data_unchecked(buf, offset + 12),
}
}
}
impl TableRecord {
pub fn data_range(&self) -> Range<usize> {
let start = self.offset as usize;
start..start + self.len as usize
}
}
#[derive(Copy, Clone)]
pub struct Table<'a> {
pub data: &'a [u8],
pub record: TableRecord,
}