Trait possibly_uninit::slice::BorrowOutSlice[][src]

pub unsafe trait BorrowOutSlice<Item>: BorrowUninitSlice<Item> {
    fn borrow_out_slice(&mut self) -> &mut OutSlice<Item>;

    fn zero_if_needed(&mut self) -> &mut [Item]
    where
        Item: ZeroValid
, { ... }
fn init_with_copy_from_slice(&mut self, slice: &[Item]) -> &mut [Item]
    where
        Item: Copy
, { ... }
fn init_with_copy_from_slice_min(&mut self, slice: &[Item]) -> &mut [Item]
    where
        Item: Copy
, { ... }
unsafe fn assume_init_mut(&mut self) -> &mut [Item] { ... } }

A trait somewhat similar to core::borrow::BorrowMut, but very specific about being a slice containing MaybeUninit<Item>

The main reason for it is to allow use of array-like types in these scenarios:

  • Wrapper<[Item]>
  • Wrapper<MaybeUninit<Item>>
  • Wrapper<ReferenceTypeMut<Item>>
  • Wrapper<ReferenceTypeMut<MaybeUninit<Item>>>

Required methods

fn borrow_out_slice(&mut self) -> &mut OutSlice<Item>[src]

Borrows the value as a mutable slice of MaybeUninit<Item>

Loading content...

Provided methods

fn zero_if_needed(&mut self) -> &mut [Item] where
    Item: ZeroValid
[src]

Zeroes the buffer if it’s needed and returns it as initialized.

This can be used when interfacing with an old code which doesn’t support MaybeUninit<Item>. However, it may cause performance decrease, especially in loops. If you hit such issue, you can supply &mut [Item] instead of &mut [MaybeUninit<Item>], which doesn’t need to zero the buffer anymore.

Note that while strictly safe, the returned slice may contain garbage! Reading from the returned slice is not UB but nearly certainly a logic bug.

fn init_with_copy_from_slice(&mut self, slice: &[Item]) -> &mut [Item] where
    Item: Copy
[src]

Initializes the slice by copying from another slice.

The returned slice will have the same length as self.borrow_uninit_slice()

Panics if the lengths differ.

fn init_with_copy_from_slice_min(&mut self, slice: &[Item]) -> &mut [Item] where
    Item: Copy
[src]

Initializes a subslice by copying from another slice.

This is similar to init_with_copy_from_slice except that instead of panicking, it copies minimum of the slice lengths.

unsafe fn assume_init_mut(&mut self) -> &mut [Item][src]

Treat the slice as initialized.

This method is unsafe because calling it without all the slice being initialized is undefined behavior.

Loading content...

Implementors

impl<'a, T> BorrowOutSlice<T> for OutSlice<T>[src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 0][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 1][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 2][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 3][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 4][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 5][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 6][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 7][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 8][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 9][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 10][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 11][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 12][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 13][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 14][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 15][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 16][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 17][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 18][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 19][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 20][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 21][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 22][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 23][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 24][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 25][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 26][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 27][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 28][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 29][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 30][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 31][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>; 32][src]

impl<Item> BorrowOutSlice<Item> for [MaybeUninit<Item>][src]

impl<Item> BorrowOutSlice<Item> for [Item; 0][src]

impl<Item> BorrowOutSlice<Item> for [Item; 1][src]

impl<Item> BorrowOutSlice<Item> for [Item; 2][src]

impl<Item> BorrowOutSlice<Item> for [Item; 3][src]

impl<Item> BorrowOutSlice<Item> for [Item; 4][src]

impl<Item> BorrowOutSlice<Item> for [Item; 5][src]

impl<Item> BorrowOutSlice<Item> for [Item; 6][src]

impl<Item> BorrowOutSlice<Item> for [Item; 7][src]

impl<Item> BorrowOutSlice<Item> for [Item; 8][src]

impl<Item> BorrowOutSlice<Item> for [Item; 9][src]

impl<Item> BorrowOutSlice<Item> for [Item; 10][src]

impl<Item> BorrowOutSlice<Item> for [Item; 11][src]

impl<Item> BorrowOutSlice<Item> for [Item; 12][src]

impl<Item> BorrowOutSlice<Item> for [Item; 13][src]

impl<Item> BorrowOutSlice<Item> for [Item; 14][src]

impl<Item> BorrowOutSlice<Item> for [Item; 15][src]

impl<Item> BorrowOutSlice<Item> for [Item; 16][src]

impl<Item> BorrowOutSlice<Item> for [Item; 17][src]

impl<Item> BorrowOutSlice<Item> for [Item; 18][src]

impl<Item> BorrowOutSlice<Item> for [Item; 19][src]

impl<Item> BorrowOutSlice<Item> for [Item; 20][src]

impl<Item> BorrowOutSlice<Item> for [Item; 21][src]

impl<Item> BorrowOutSlice<Item> for [Item; 22][src]

impl<Item> BorrowOutSlice<Item> for [Item; 23][src]

impl<Item> BorrowOutSlice<Item> for [Item; 24][src]

impl<Item> BorrowOutSlice<Item> for [Item; 25][src]

impl<Item> BorrowOutSlice<Item> for [Item; 26][src]

impl<Item> BorrowOutSlice<Item> for [Item; 27][src]

impl<Item> BorrowOutSlice<Item> for [Item; 28][src]

impl<Item> BorrowOutSlice<Item> for [Item; 29][src]

impl<Item> BorrowOutSlice<Item> for [Item; 30][src]

impl<Item> BorrowOutSlice<Item> for [Item; 31][src]

impl<Item> BorrowOutSlice<Item> for [Item; 32][src]

impl<Item> BorrowOutSlice<Item> for [Item][src]

impl<T: ?Sized, Item> BorrowOutSlice<Item> for T where
    T: SameDataDeref + Deref + DerefMut,
    T::Target: BorrowOutSlice<Item>, 
[src]

Loading content...