use crate::base::*;
pub trait AsPtr {
#[inline(always)]
fn as_ptr(&self) -> *const u8 {
self as *const _ as *const u8
}
#[inline(always)]
fn as_mut_ptr(&mut self) -> *mut u8 {
self as *mut _ as *mut u8
}
}
pub trait SizedType {
#[inline(always)]
fn size(&self) -> usize;
}
impl SizedType for [u8] { fn size(&self) -> usize { self.len() } }
impl SizedType for &[u8] { fn size(&self) -> usize { self.len() } }
impl SizedType for RUMVec<u8> { fn size(&self) -> usize { self.len() } }
impl SizedType for &RUMVec<u8> { fn size(&self) -> usize { self.len() } }
impl SizedType for RUMString { fn size(&self) -> usize { self.len() } }
pub trait AsSlice: AsPtr + SizedType {
#[inline(always)]
fn as_slice(&self) -> &[u8] { as_slice(self.as_ptr(), self.size()) }
#[inline(always)]
fn as_slice_mut(&mut self) -> &mut [u8] { as_slice_mut(self.as_mut_ptr(), self.size()) }
#[inline(always)]
fn contains(&self, x: &u8) -> bool {
self.as_slice().contains(x)
}
}
#[inline]
pub fn as_slice<'a>(src: *const u8, size: usize) -> &'a [u8] {
unsafe { std::slice::from_raw_parts(src, size) }
}
#[inline]
pub fn as_slice_mut<'a>(src: *mut u8, size: usize) -> &'a mut [u8] {
unsafe { std::slice::from_raw_parts_mut(src, size) }
}