burstq 0.2.0

A multi-producer, multi-consumer channel that supports sending or receiving multiple values in a single operation.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use core::mem::MaybeUninit;

// Adapted from std
// https://github.com/rust-lang/rust/issues/79995
pub fn maybe_uninit_write_slice<'a, T>(this: &'a mut [MaybeUninit<T>], src: &[T]) -> &'a mut [T]
where
    T: Copy,
{
    // SAFETY: &[T] and &[MaybeUninit<T>] have the same layout
    let uninit_src: &[MaybeUninit<T>] = unsafe { core::mem::transmute(src) };

    this.copy_from_slice(uninit_src);

    // SAFETY: Valid elements have just been copied into `this` so it is initialized
    unsafe { &mut *(this as *mut [MaybeUninit<T>] as *mut [T]) }
}