rumtk_arena/mem/
traits.rs1use crate::base::*;
22
23pub trait AsPtr {
24 #[inline(always)]
25 fn as_ptr(&self) -> *const u8 {
26 self as *const _ as *const u8
27 }
28 #[inline(always)]
29 fn as_mut_ptr(&mut self) -> *mut u8 {
30 self as *mut _ as *mut u8
31 }
32}
33
34pub trait SizedType {
35 #[inline(always)]
36 fn size(&self) -> usize;
37}
38
39impl SizedType for [u8] { fn size(&self) -> usize { self.len() } }
40impl SizedType for &[u8] { fn size(&self) -> usize { self.len() } }
41impl SizedType for RUMVec<u8> { fn size(&self) -> usize { self.len() } }
42impl SizedType for &RUMVec<u8> { fn size(&self) -> usize { self.len() } }
43impl SizedType for RUMString { fn size(&self) -> usize { self.len() } }
44
45pub trait AsSlice: AsPtr + SizedType {
46 #[inline(always)]
47 fn as_slice(&self) -> &[u8] { as_slice(self.as_ptr(), self.size()) }
48 #[inline(always)]
49 fn as_slice_mut(&mut self) -> &mut [u8] { as_slice_mut(self.as_mut_ptr(), self.size()) }
50
51 #[inline(always)]
52 fn contains(&self, x: &u8) -> bool {
53 self.as_slice().contains(x)
54 }
55}
56
57#[inline]
58pub fn as_slice<'a>(src: *const u8, size: usize) -> &'a [u8] {
59 unsafe { std::slice::from_raw_parts(src, size) }
60}
61
62#[inline]
63pub fn as_slice_mut<'a>(src: *mut u8, size: usize) -> &'a mut [u8] {
64 unsafe { std::slice::from_raw_parts_mut(src, size) }
65}