Struct bz_stream

Source
#[repr(C)]
pub struct bz_stream { pub next_in: *const c_char, pub avail_in: c_uint, pub total_in_lo32: c_uint, pub total_in_hi32: c_uint, pub next_out: *mut c_char, pub avail_out: c_uint, pub total_out_lo32: c_uint, pub total_out_hi32: c_uint, pub state: *mut c_void, pub bzalloc: Option<unsafe extern "C" fn(*mut c_void, c_int, c_int) -> *mut c_void>, pub bzfree: Option<unsafe extern "C" fn(*mut c_void, *mut c_void)>, pub opaque: *mut c_void, }
Expand description

The current stream state.

§Custom allocators

The low-level API supports passing in a custom allocator as part of the bz_stream:

struct bz_stream {
    // ...
    pub bzalloc: Option<unsafe extern "C" fn(_: *mut c_void, _: c_int, _: c_int) -> *mut c_void>,
    pub bzfree: Option<unsafe extern "C" fn(_: *mut c_void, _: *mut c_void)>,
    pub opaque: *mut c_void,
}

When these fields are None (or NULL in C), the initialization functions will try to put in a default allocator, based on feature flags:

  • "rust-allocator" uses the rust global allocator
  • "c-allocator" uses an allocator based on malloc and free

When both configured, "rust-allocator" is preferred. When no default allocator is configured, the high-level interface will return a BZ_CONFIG_ERROR. The low-level interface (the functions that take a bz_stream as their argument) return a BZ_PARAM_ERROR, unless the user set the bzalloc and bzfree fields.

When custom bzalloc and bzfree functions are given, they must adhere to the following contract to be safe:

  • a call bzalloc(opaque, n, m) must return a pointer p to n * m bytes of memory, or NULL if out of memory
  • a call bzfree(opaque, p) must free that memory

The strm.opaque value is passed to as the first argument to all calls to bzalloc and bzfree, but is otherwise ignored by the library.

Fields§

§next_in: *const c_char§avail_in: c_uint§total_in_lo32: c_uint§total_in_hi32: c_uint§next_out: *mut c_char§avail_out: c_uint§total_out_lo32: c_uint§total_out_hi32: c_uint§state: *mut c_void§bzalloc: Option<unsafe extern "C" fn(*mut c_void, c_int, c_int) -> *mut c_void>§bzfree: Option<unsafe extern "C" fn(*mut c_void, *mut c_void)>§opaque: *mut c_void

Implementations§

Source§

impl bz_stream

Source

pub const fn zeroed() -> Self

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>,

Source§

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>,

Source§

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.