#[repr(C)]
pub struct DynamicBuffer { pub pointer: *mut u8, pub length: usize, pub destructor: Option<unsafe extern "C" fn(_: *mut u8, _: usize) -> c_int>, }

Fields§

§pointer: *mut u8§length: usize§destructor: Option<unsafe extern "C" fn(_: *mut u8, _: usize) -> c_int>

Implementations§

source§

impl DynamicBuffer

source

pub unsafe fn destroy(&mut self) -> Result<(), &str>

Destroy the DynamicBuffer freeing the underlying memory using the provided destructor_callback and clearing or zeroing all the members.

If the pointer stored in DynamicBuffer is NULL, then length is zeroed out and the destructor_callback is set to None. It is similar to how free ignores NULL in C, we just do some additional housekeeping to signal the DynamicBuffer is an empty shell.

Safety

Destroy is safe to call only if the destructor_callback is the method that needs to be called to free the stored pointer. For example in C++, memory allocated with new must be freed with delete, memory allocated with new[] must be freed with delete[].

Length must indicate how many u8 are present in the allocation and can be used by the destructor_callback to free memory. For example in the case of a Vec being turned into a DynamicBuffer the length is obtained by first calling the len function on the Vec.

Trait Implementations§

source§

impl From<Vec<u8>> for DynamicBuffer

source§

fn from(value: Vec<u8>) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.