use std::marker::PhantomData;
#[repr(C)]
#[derive(Copy, Clone, Debug, PartialEq)]
pub struct VmSlice<T> {
ptr: u64,
len: u64,
resource_type: PhantomData<T>,
}
impl<T> VmSlice<T> {
pub fn new(ptr: u64, len: u64) -> Self {
VmSlice {
ptr,
len,
resource_type: PhantomData,
}
}
pub fn ptr(&self) -> u64 {
self.ptr
}
pub fn len(&self) -> u64 {
self.len
}
pub fn is_empty(&self) -> bool {
self.len == 0
}
pub fn end(&self) -> u64 {
self.ptr()
.saturating_add(self.len().saturating_mul(size_of::<T>() as u64))
}
pub unsafe fn set_len(&mut self, new_len: u64) {
self.len = new_len;
}
}