pub struct UninitSlice(/* private fields */);展开描述
未初始化的字节切片。
由 BufMut::chunk_mut() 返回,所引用的字节切片可能是未初始化的。此包装器提供安全访问,不会引入未定义行为。
此包装器的安全不变量为:
- Reading from an
UninitSliceis undefined behavior. - Writing uninitialized bytes to an
UninitSliceis undefined behavior.
&mut UninitSlice 与 &mut [MaybeUninit<u8>] 的区别在于:在安全代码中,可以向 &mut [MaybeUninit<u8>] 写入未初始化的字节,而本类型禁止这样做。
实现§
Source§impl UninitSlice
impl UninitSlice
Sourcepub fn new(slice: &mut [u8]) -> &mut UninitSlice
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[..]);Sourcepub fn uninit(slice: &mut [MaybeUninit<u8>]) -> &mut UninitSlice
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();Sourcepub unsafe fn from_raw_parts_mut<'a>(
ptr: *mut u8,
len: usize,
) -> &'a mut UninitSlice
pub unsafe fn from_raw_parts_mut<'a>( ptr: *mut u8, len: usize, ) -> &'a mut UninitSlice
Sourcepub fn write_byte(&mut self, index: usize, byte: u8)
pub fn write_byte(&mut self, index: usize, byte: u8)
Sourcepub fn copy_from_slice(&mut self, src: &[u8])
pub fn copy_from_slice(&mut self, src: &[u8])
Sourcepub fn as_mut_ptr(&mut self) -> *mut u8
pub fn as_mut_ptr(&mut self) -> *mut u8
Sourcepub unsafe fn as_uninit_slice_mut(&mut self) -> &mut [MaybeUninit<u8>]
pub unsafe fn as_uninit_slice_mut(&mut self) -> &mut [MaybeUninit<u8>]
返回此切片缓冲区的 &mut [MaybeUninit<u8>]。
§Safety
调用方不得读取所引用的内存,也不得向切片写入未初始化的字节。这是因为创建 UninitSlice 的 BufMut 实现知道哪些部分是初始化的。向切片写入未初始化的字节可能导致 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();
};Trait 实现§
Source§impl Debug for UninitSlice
impl Debug for UninitSlice
Source§impl<'a> From<&'a mut [MaybeUninit<u8>]> for &'a mut UninitSlice
impl<'a> From<&'a mut [MaybeUninit<u8>]> for &'a mut UninitSlice
Source§fn from(slice: &'a mut [MaybeUninit<u8>]) -> Self
fn from(slice: &'a mut [MaybeUninit<u8>]) -> Self
从输入类型转换为此类型。
Source§impl<'a> From<&'a mut [u8]> for &'a mut UninitSlice
impl<'a> From<&'a mut [u8]> for &'a mut UninitSlice
Source§impl Index<RangeFull> for UninitSlice
impl Index<RangeFull> for UninitSlice
Source§type Output = UninitSlice
type Output = UninitSlice
The returned type after indexing.
Source§impl Index<RangeInclusive<usize>> for UninitSlice
impl Index<RangeInclusive<usize>> for UninitSlice
Source§type Output = UninitSlice
type Output = UninitSlice
The returned type after indexing.
Source§fn index(&self, index: RangeInclusive<usize>) -> &UninitSlice
fn index(&self, index: RangeInclusive<usize>) -> &UninitSlice
Performs the indexing (
container[index]) operation. 更多信息Source§impl Index<RangeToInclusive<usize>> for UninitSlice
impl Index<RangeToInclusive<usize>> for UninitSlice
Source§type Output = UninitSlice
type Output = UninitSlice
The returned type after indexing.
Source§fn index(&self, index: RangeToInclusive<usize>) -> &UninitSlice
fn index(&self, index: RangeToInclusive<usize>) -> &UninitSlice
Performs the indexing (
container[index]) operation. 更多信息Source§impl IndexMut<RangeFull> for UninitSlice
impl IndexMut<RangeFull> for UninitSlice
Source§impl IndexMut<RangeInclusive<usize>> for UninitSlice
impl IndexMut<RangeInclusive<usize>> for UninitSlice
Source§fn index_mut(&mut self, index: RangeInclusive<usize>) -> &mut UninitSlice
fn index_mut(&mut self, index: RangeInclusive<usize>) -> &mut UninitSlice
Performs the mutable indexing (
container[index]) operation. 更多信息Source§impl IndexMut<RangeToInclusive<usize>> for UninitSlice
impl IndexMut<RangeToInclusive<usize>> for UninitSlice
Source§fn index_mut(&mut self, index: RangeToInclusive<usize>) -> &mut UninitSlice
fn index_mut(&mut self, index: RangeToInclusive<usize>) -> &mut UninitSlice
Performs the mutable indexing (
container[index]) operation. 更多信息