use super::*;
pub trait View {
fn read_at<E: Endian>(&self, offset: usize) -> Option<E>;
fn write_at<E: Endian>(&mut self, offset: usize, num: E) -> Result<(), ()>;
}
impl View for [u8] {
#[inline]
fn read_at<E: Endian>(&self, offset: usize) -> Option<E> {
if offset + size_of::<E>() > self.len() {
return None;
}
Some(unsafe { E::__read_at__(self.as_ptr().add(offset)) })
}
#[inline]
fn write_at<E: Endian>(&mut self, offset: usize, num: E) -> Result<(), ()> {
if offset + size_of::<E>() > self.len() {
return Err(());
}
unsafe { E::__write_at__(num, self.as_mut_ptr().add(offset)) };
Ok(())
}
}