#[allow(unused_imports)]
use crate::native::TracepointState;
use core::marker::PhantomData;
use core::mem;
#[repr(C)]
#[derive(Debug, Default)]
pub struct EventDataDescriptor<'a> {
ptr: usize,
size: usize,
lifetime: PhantomData<&'a [u8]>,
}
impl<'a> EventDataDescriptor<'a> {
pub const fn zero() -> Self {
return Self {
ptr: 0,
size: 0,
lifetime: PhantomData,
};
}
pub const fn is_empty(&self) -> bool {
return self.size == 0;
}
pub const unsafe fn from_raw_ptr(ptr: usize, size: usize) -> Self {
return Self {
ptr,
size,
lifetime: PhantomData,
};
}
pub fn from_bytes(value: &'a [u8]) -> Self {
return Self {
ptr: value.as_ptr() as usize,
size: value.len(),
lifetime: PhantomData,
};
}
pub fn from_value<T: Copy>(value: &'a T) -> Self {
return Self {
ptr: value as *const T as usize,
size: mem::size_of::<T>(),
lifetime: PhantomData,
};
}
pub fn from_cstr<T: Copy + Default + Eq>(mut value: &'a [T]) -> Self {
let mut value_len = value.len();
const MAX_LEN: usize = 65535;
if value_len > MAX_LEN {
value = &value[..MAX_LEN];
value_len = value.len();
}
let zero = T::default();
let mut len = 0;
while len < value_len {
if value[len] == zero {
value = &value[..len];
break;
}
len += 1;
}
return Self {
ptr: value.as_ptr() as usize,
size: mem::size_of_val(value),
lifetime: PhantomData,
};
}
pub fn from_slice<T: Copy>(mut value: &'a [T]) -> Self {
let value_len = value.len();
const MAX_LEN: usize = 65535;
if MAX_LEN < value_len {
value = &value[..MAX_LEN];
}
return Self {
ptr: value.as_ptr() as usize,
size: mem::size_of_val(value),
lifetime: PhantomData,
};
}
}