add example helper, translate more examples
update to wip servicepoint lib
This commit is contained in:
parent
b8a55d0433
commit
4ab5305377
15 changed files with 195 additions and 61 deletions
|
@ -1,7 +1,5 @@
|
|||
//! FFI slice helper
|
||||
|
||||
use std::ptr::NonNull;
|
||||
|
||||
/// Represents a span of memory (`&mut [u8]` ) as a struct.
|
||||
///
|
||||
/// # Safety
|
||||
|
@ -11,28 +9,39 @@ use std::ptr::NonNull;
|
|||
/// - accesses to the memory pointed to with `start` is never accessed outside `length`
|
||||
/// - the lifetime of the `CByteSlice` does not outlive the memory it points to, as described in
|
||||
/// the function returning this type.
|
||||
/// - if `start` is NULL or `length` is 0, do not dereference `start`.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```c
|
||||
/// ByteSlice empty = {.start: NULL, .length = 0};
|
||||
/// ```
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||
pub struct ByteSlice {
|
||||
/// The start address of the memory.
|
||||
pub start: NonNull<u8>,
|
||||
pub start: *mut u8,
|
||||
/// The amount of memory in bytes.
|
||||
pub length: usize,
|
||||
}
|
||||
|
||||
impl ByteSlice {
|
||||
pub(crate) const INVALID: ByteSlice = ByteSlice {
|
||||
start: std::ptr::null_mut(),
|
||||
length: 0,
|
||||
};
|
||||
|
||||
pub(crate) unsafe fn as_slice(&self) -> &[u8] {
|
||||
unsafe { std::slice::from_raw_parts(self.start.as_ptr(), self.length) }
|
||||
unsafe { std::slice::from_raw_parts(self.start, self.length) }
|
||||
}
|
||||
|
||||
pub(crate) unsafe fn as_slice_mut(&mut self) -> &mut [u8] {
|
||||
unsafe {
|
||||
std::slice::from_raw_parts_mut(self.start.as_ptr(), self.length)
|
||||
}
|
||||
unsafe { std::slice::from_raw_parts_mut(self.start, self.length) }
|
||||
}
|
||||
|
||||
pub(crate) unsafe fn from_slice(slice: &mut [u8]) -> Self {
|
||||
Self {
|
||||
start: NonNull::new(slice.as_mut_ptr()).unwrap(),
|
||||
start: slice.as_mut_ptr(),
|
||||
length: slice.len(),
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue