跳到主要内容

UninitSlice

搜索

结构体 UninitSlice 

Source
pub struct UninitSlice(/* private fields */);
展开描述

未初始化的字节切片。

BufMut::chunk_mut() 返回,所引用的字节切片可能是未初始化的。此包装器提供安全访问,不会引入未定义行为。

此包装器的安全不变量为:

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

&mut UninitSlice&mut [MaybeUninit<u8>] 的区别在于:在安全代码中,可以向 &mut [MaybeUninit<u8>] 写入未初始化的字节,而本类型禁止这样做。

实现§

Source§

impl UninitSlice

Source

pub fn new(slice: &mut [u8]) -> &mut UninitSlice

创建一个 &mut UninitSlice,包装一段已初始化的内存切片。

§示例
use bytes::buf::UninitSlice;

let mut buffer = [0u8; 64];
let slice = UninitSlice::new(&mut buffer[..]);
Source

pub fn uninit(slice: &mut [MaybeUninit<u8>]) -> &mut UninitSlice

创建一个 &mut UninitSlice,包装一段未初始化的内存切片。

§示例
use bytes::buf::UninitSlice;
use core::mem::MaybeUninit;

let mut buffer = [MaybeUninit::uninit(); 64];
let slice = UninitSlice::uninit(&mut buffer[..]);

let mut vec = Vec::with_capacity(1024);
let spare: &mut UninitSlice = vec.spare_capacity_mut().into();
Source

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

从指针和长度创建 &mut UninitSlice

§Safety

调用方必须确保 ptr 引用了由调用方拥有的有效内存区域,且在 'a 的整个生命周期内代表一个字节切片。

§示例
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)

在指定偏移处写入单个字节。

§Panics

index 越界,本函数会 panic。

§示例
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])

src 复制字节到 self

src 的长度必须与 self 相同。

§Panics

srcself 长度不同,本函数会 panic。

§示例
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

返回指向切片缓冲区的裸指针。

§Safety

调用方不得读取所引用的内存,也不得向切片写入未初始化的字节。

§示例
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 unsafe fn as_uninit_slice_mut(&mut self) -> &mut [MaybeUninit<u8>]

返回此切片缓冲区的 &mut [MaybeUninit<u8>]

§Safety

调用方不得读取所引用的内存,也不得向切片写入未初始化的字节。这是因为创建 UninitSliceBufMut 实现知道哪些部分是初始化的。向切片写入未初始化的字节可能导致 BufMut 之后读取这些字节并触发未定义行为。

§示例
use bytes::BufMut;

let mut data = [0, 1, 2];
let mut slice = &mut data[..];
unsafe {
    let uninit_slice = BufMut::chunk_mut(&mut slice).as_uninit_slice_mut();
};
Source

pub fn len(&self) -> usize

返回切片中的字节数。

§示例
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 实现§

Source§

impl Debug for UninitSlice

Source§

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

使用给定的格式化器格式化此值。 更多信息
Source§

impl<'a> From<&'a mut [MaybeUninit<u8>]> for &'a mut UninitSlice

Source§

fn from(slice: &'a mut [MaybeUninit<u8>]) -> Self

从输入类型转换为此类型。
Source§

impl<'a> From<&'a mut [u8]> for &'a mut UninitSlice

Source§

fn from(slice: &'a mut [u8]) -> Self

从输入类型转换为此类型。
Source§

impl Index<Range<usize>> for UninitSlice

Source§

type Output = UninitSlice

The returned type after indexing.
Source§

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

Performs the indexing (container[index]) operation. 更多信息
Source§

impl Index<RangeFrom<usize>> for UninitSlice

Source§

type Output = UninitSlice

The returned type after indexing.
Source§

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

Performs the indexing (container[index]) operation. 更多信息
Source§

impl Index<RangeFull> for UninitSlice

Source§

type Output = UninitSlice

The returned type after indexing.
Source§

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

Performs the indexing (container[index]) operation. 更多信息
Source§

impl Index<RangeInclusive<usize>> for UninitSlice

Source§

type Output = UninitSlice

The returned type after indexing.
Source§

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

Performs the indexing (container[index]) operation. 更多信息
Source§

impl Index<RangeTo<usize>> for UninitSlice

Source§

type Output = UninitSlice

The returned type after indexing.
Source§

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

Performs the indexing (container[index]) operation. 更多信息
Source§

impl Index<RangeToInclusive<usize>> for UninitSlice

Source§

type Output = UninitSlice

The returned type after indexing.
Source§

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

Performs the indexing (container[index]) operation. 更多信息
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. 更多信息
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. 更多信息
Source§

impl IndexMut<RangeFull> for UninitSlice

Source§

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

Performs the mutable indexing (container[index]) operation. 更多信息
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. 更多信息
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. 更多信息
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. 更多信息

自动 Trait 实现§

Blanket 实现§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. 更多信息
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. 更多信息
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. 更多信息