[][src]Trait uninit::ReadIntoUninit

pub unsafe trait ReadIntoUninit: Read {
    fn read_into_uninit<'buf>(
        &mut self,
        buf: &'buf mut [MaybeUninit<u8>]
    ) -> Result<&'buf mut [u8]>; fn read_into_uninit_exact<'buf>(
        &mut self,
        buf: &'buf mut [MaybeUninit<u8>]
    ) -> Result<&'buf mut [u8]> { ... } }

Trait for a Readable type that can output the bytes read into uninitialised memory.

Safety

The trait is marked unsafe because it needs to guarantee that:

  • if let Ok(init_buf) = self.read_into_uninit(buf), then init_buf is a prefix slice of buf.

    • this property is equivalent to:

      init_buf.as_mut_ptr() == buf.as_mut_ptr() as *mut u8 and init_buf.len() <= buf.len()

    • as well as:

      buf[.. init_buf.len()] is sound to assume_init

unsafe code can assume this property to skip checks or manual initialization, and that's why incorrectly impl-ementing this marker trait can compromise memory safety.

Required methods

fn read_into_uninit<'buf>(
    &mut self,
    buf: &'buf mut [MaybeUninit<u8>]
) -> Result<&'buf mut [u8]>

"Read into uninitialized memory" logic.

Loading content...

Provided methods

fn read_into_uninit_exact<'buf>(
    &mut self,
    buf: &'buf mut [MaybeUninit<u8>]
) -> Result<&'buf mut [u8]>

"Read into uninitialized memory" logic.

Loading content...

Implementations on Foreign Types

impl<'_, R: ReadIntoUninit + ?Sized> ReadIntoUninit for &'_ mut R[src]

impl<'_> ReadIntoUninit for &'_ [u8][src]

impl<R: Read> ReadIntoUninit for BufReader<R>[src]

impl<T: AsRef<[u8]>> ReadIntoUninit for Cursor<T>[src]

impl ReadIntoUninit for Empty[src]

impl<'_> ReadIntoUninit for StdinLock<'_>[src]

impl<T: BufRead> ReadIntoUninit for Take<T>[src]

impl<R: ReadIntoUninit + ?Sized> ReadIntoUninit for Box<R>[src]

Loading content...

Implementors

Loading content...