Add inherent versions of MaybeUninit methods for slices
This commit is contained in:
parent
12445e0b2c
commit
e37daf0c86
18 changed files with 543 additions and 441 deletions
|
@ -295,7 +295,7 @@ fn clone_to_uninit() {
|
|||
|
||||
let mut storage = vec![MaybeUninit::<u8>::uninit(); size_of_val::<OsStr>(a)];
|
||||
unsafe { a.clone_to_uninit(ptr::from_mut::<[_]>(storage.as_mut_slice()).cast()) };
|
||||
assert_eq!(a.as_encoded_bytes(), unsafe { MaybeUninit::slice_assume_init_ref(&storage) });
|
||||
assert_eq!(a.as_encoded_bytes(), unsafe { storage.assume_init_ref() });
|
||||
|
||||
let mut b: Box<OsStr> = OsStr::new("world.exe").into();
|
||||
assert_eq!(size_of_val::<OsStr>(a), size_of_val::<OsStr>(&b));
|
||||
|
|
|
@ -50,7 +50,7 @@ impl Buffer {
|
|||
pub fn buffer(&self) -> &[u8] {
|
||||
// SAFETY: self.pos and self.cap are valid, and self.cap => self.pos, and
|
||||
// that region is initialized because those are all invariants of this type.
|
||||
unsafe { MaybeUninit::slice_assume_init_ref(self.buf.get_unchecked(self.pos..self.filled)) }
|
||||
unsafe { self.buf.get_unchecked(self.pos..self.filled).assume_init_ref() }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
|
|
@ -2069,9 +2069,7 @@ fn clone_to_uninit() {
|
|||
|
||||
let mut storage = vec![MaybeUninit::<u8>::uninit(); size_of_val::<Path>(a)];
|
||||
unsafe { a.clone_to_uninit(ptr::from_mut::<[_]>(storage.as_mut_slice()).cast()) };
|
||||
assert_eq!(a.as_os_str().as_encoded_bytes(), unsafe {
|
||||
MaybeUninit::slice_assume_init_ref(&storage)
|
||||
});
|
||||
assert_eq!(a.as_os_str().as_encoded_bytes(), unsafe { storage.assume_init_ref() });
|
||||
|
||||
let mut b: Box<Path> = Path::new("world.exe").into();
|
||||
assert_eq!(size_of_val::<Path>(a), size_of_val::<Path>(&b));
|
||||
|
|
|
@ -272,7 +272,7 @@ where
|
|||
unreachable!();
|
||||
} else {
|
||||
// Safety: First `k` values are initialized.
|
||||
let slice: &[u16] = MaybeUninit::slice_assume_init_ref(&buf[..k]);
|
||||
let slice: &[u16] = buf[..k].assume_init_ref();
|
||||
return Ok(f2(slice));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -207,7 +207,7 @@ fn write_valid_utf8_to_console(handle: c::HANDLE, utf8: &str) -> io::Result<usiz
|
|||
assert!(result != 0, "Unexpected error in MultiByteToWideChar");
|
||||
|
||||
// Safety: MultiByteToWideChar initializes `result` values.
|
||||
MaybeUninit::slice_assume_init_ref(&utf16[..result as usize])
|
||||
utf16[..result as usize].assume_init_ref()
|
||||
};
|
||||
|
||||
let mut written = write_u16s(handle, utf16)?;
|
||||
|
@ -283,7 +283,7 @@ impl io::Read for Stdin {
|
|||
let read = read_u16s_fixup_surrogates(handle, &mut utf16_buf, 1, &mut self.surrogate)?;
|
||||
// Read bytes, using the (now-empty) self.incomplete_utf8 as extra space.
|
||||
let read_bytes = utf16_to_utf8(
|
||||
unsafe { MaybeUninit::slice_assume_init_ref(&utf16_buf[..read]) },
|
||||
unsafe { utf16_buf[..read].assume_init_ref() },
|
||||
&mut self.incomplete_utf8.bytes,
|
||||
)?;
|
||||
|
||||
|
@ -303,7 +303,7 @@ impl io::Read for Stdin {
|
|||
read_u16s_fixup_surrogates(handle, &mut utf16_buf, amount, &mut self.surrogate)?;
|
||||
// Safety `read_u16s_fixup_surrogates` returns the number of items
|
||||
// initialized.
|
||||
let utf16s = unsafe { MaybeUninit::slice_assume_init_ref(&utf16_buf[..read]) };
|
||||
let utf16s = unsafe { utf16_buf[..read].assume_init_ref() };
|
||||
match utf16_to_utf8(utf16s, buf) {
|
||||
Ok(value) => return Ok(bytes_copied + value),
|
||||
Err(e) => return Err(e),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue