1use crate::def::{NSTDAny, NSTDAnyConst};
2
3#[repr(C)]
5#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
6pub struct NSTDPointer {
7 pub raw: NSTDAny,
9 pub size: usize,
11}
12impl NSTDPointer {
14 #[inline]
16 pub unsafe fn as_byte_slice(&self) -> &[u8] {
17 core::slice::from_raw_parts(self.raw.cast(), self.size)
18 }
19
20 #[inline]
22 pub unsafe fn as_byte_slice_mut(&mut self) -> &mut [u8] {
23 core::slice::from_raw_parts_mut(self.raw.cast(), self.size)
24 }
25}
26
27#[inline]
33#[cfg_attr(feature = "clib", no_mangle)]
34pub unsafe extern "C" fn nstd_core_pointer_new(obj: NSTDAny, size: usize) -> NSTDPointer {
35 NSTDPointer { raw: obj, size }
36}
37
38#[inline]
43#[cfg_attr(feature = "clib", no_mangle)]
44pub unsafe extern "C" fn nstd_core_pointer_write(ptr: &mut NSTDPointer, obj: NSTDAnyConst) {
45 let obj_data = core::slice::from_raw_parts(obj.cast(), ptr.size);
46 ptr.as_byte_slice_mut().copy_from_slice(obj_data);
47}