Struct bytes::buf::UninitSlice

source ·
pub struct UninitSlice(/* private fields */);
Expand description

Uninitialized byte slice.

Returned by BufMut::chunk_mut(), the referenced byte slice may be uninitialized. The wrapper provides safe access without introducing undefined behavior.

The safety invariants of this wrapper are:

  1. Reading from an UninitSlice is undefined behavior.
  2. Writing uninitialized bytes to an UninitSlice is undefined behavior.

The difference between &mut UninitSlice and &mut [MaybeUninit<u8>] is that it is possible in safe code to write uninitialized bytes to an &mut [MaybeUninit<u8>], which this type prohibits.

Implementations§

source§

impl UninitSlice

source

pub unsafe fn from_raw_parts_mut<'a>( ptr: *mut u8, len: usize ) -> &'a mut UninitSlice

Create a &mut UninitSlice from a pointer and a length.

§Safety

The caller must ensure that ptr references a valid memory region owned by the caller representing a byte slice for the duration of 'a.

§Examples
use bytes::buf::UninitSlice;

let bytes = b"hello world".to_vec();
let ptr = bytes.as_ptr() as *mut _;
let len = bytes.len();

let slice = unsafe { UninitSlice::from_raw_parts_mut(ptr, len) };
source

pub fn write_byte(&mut self, index: usize, byte: u8)

Write a single byte at the specified offset.

§Panics

The function panics if index is out of bounds.

§Examples
use bytes::buf::UninitSlice;

let mut data = [b'f', b'o', b'o'];
let slice = unsafe { UninitSlice::from_raw_parts_mut(data.as_mut_ptr(), 3) };

slice.write_byte(0, b'b');

assert_eq!(b"boo", &data[..]);
source

pub fn copy_from_slice(&mut self, src: &[u8])

Copies bytes from src into self.

The length of src must be the same as self.

§Panics

The function panics if src has a different length than self.

§Examples
use bytes::buf::UninitSlice;

let mut data = [b'f', b'o', b'o'];
let slice = unsafe { UninitSlice::from_raw_parts_mut(data.as_mut_ptr(), 3) };

slice.copy_from_slice(b"bar");

assert_eq!(b"bar", &data[..]);
source

pub fn as_mut_ptr(&mut self) -> *mut u8

Return a raw pointer to the slice’s buffer.

§Safety

The caller must not read from the referenced memory and must not write uninitialized bytes to the slice either.

§Examples
use bytes::BufMut;

let mut data = [0, 1, 2];
let mut slice = &mut data[..];
let ptr = BufMut::chunk_mut(&mut slice).as_mut_ptr();
source

pub fn len(&self) -> usize

Returns the number of bytes in the slice.

§Examples
use bytes::BufMut;

let mut data = [0, 1, 2];
let mut slice = &mut data[..];
let len = BufMut::chunk_mut(&mut slice).len();

assert_eq!(len, 3);

Trait Implementations§

source§

impl Debug for UninitSlice

source§

fn fmt(&self, fmt: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Index<Range<usize>> for UninitSlice

§

type Output = UninitSlice

The returned type after indexing.
source§

fn index(&self, index: Range<usize>) -> &UninitSlice

Performs the indexing (container[index]) operation. Read more
source§

impl Index<RangeFrom<usize>> for UninitSlice

§

type Output = UninitSlice

The returned type after indexing.
source§

fn index(&self, index: RangeFrom<usize>) -> &UninitSlice

Performs the indexing (container[index]) operation. Read more
source§

impl Index<RangeFull> for UninitSlice

§

type Output = UninitSlice

The returned type after indexing.
source§

fn index(&self, index: RangeFull) -> &UninitSlice

Performs the indexing (container[index]) operation. Read more
source§

impl Index<RangeInclusive<usize>> for UninitSlice

§

type Output = UninitSlice

The returned type after indexing.
source§

fn index(&self, index: RangeInclusive<usize>) -> &UninitSlice

Performs the indexing (container[index]) operation. Read more
source§

impl Index<RangeTo<usize>> for UninitSlice

§

type Output = UninitSlice

The returned type after indexing.
source§

fn index(&self, index: RangeTo<usize>) -> &UninitSlice

Performs the indexing (container[index]) operation. Read more
source§

impl Index<RangeToInclusive<usize>> for UninitSlice

§

type Output = UninitSlice

The returned type after indexing.
source§

fn index(&self, index: RangeToInclusive<usize>) -> &UninitSlice

Performs the indexing (container[index]) operation. Read more
source§

impl IndexMut<Range<usize>> for UninitSlice

source§

fn index_mut(&mut self, index: Range<usize>) -> &mut UninitSlice

Performs the mutable indexing (container[index]) operation. Read more
source§

impl IndexMut<RangeFrom<usize>> for UninitSlice

source§

fn index_mut(&mut self, index: RangeFrom<usize>) -> &mut UninitSlice

Performs the mutable indexing (container[index]) operation. Read more
source§

impl IndexMut<RangeFull> for UninitSlice

source§

fn index_mut(&mut self, index: RangeFull) -> &mut UninitSlice

Performs the mutable indexing (container[index]) operation. Read more
source§

impl IndexMut<RangeInclusive<usize>> for UninitSlice

source§

fn index_mut(&mut self, index: RangeInclusive<usize>) -> &mut UninitSlice

Performs the mutable indexing (container[index]) operation. Read more
source§

impl IndexMut<RangeTo<usize>> for UninitSlice

source§

fn index_mut(&mut self, index: RangeTo<usize>) -> &mut UninitSlice

Performs the mutable indexing (container[index]) operation. Read more
source§

impl IndexMut<RangeToInclusive<usize>> for UninitSlice

source§

fn index_mut(&mut self, index: RangeToInclusive<usize>) -> &mut UninitSlice

Performs the mutable indexing (container[index]) operation. Read more

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