Rollup merge of #102811 - the8472:bufread-memset, r=m-ou-se
Use memset to initialize readbuf The write loop was found to be slow in #102727 The proper fix is in #102760 but this might still help debug builds and code running under miri by using the write_bytes intrinsic instead of writing one byte at a time.
This commit is contained in:
commit
658169b7db
@ -3,10 +3,10 @@
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests;
|
mod tests;
|
||||||
|
|
||||||
use crate::cmp;
|
|
||||||
use crate::fmt::{self, Debug, Formatter};
|
use crate::fmt::{self, Debug, Formatter};
|
||||||
use crate::io::{Result, Write};
|
use crate::io::{Result, Write};
|
||||||
use crate::mem::{self, MaybeUninit};
|
use crate::mem::{self, MaybeUninit};
|
||||||
|
use crate::{cmp, ptr};
|
||||||
|
|
||||||
/// A borrowed byte buffer which is incrementally filled and initialized.
|
/// A borrowed byte buffer which is incrementally filled and initialized.
|
||||||
///
|
///
|
||||||
@ -250,8 +250,11 @@ impl<'a> BorrowedCursor<'a> {
|
|||||||
/// Initializes all bytes in the cursor.
|
/// Initializes all bytes in the cursor.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn ensure_init(&mut self) -> &mut Self {
|
pub fn ensure_init(&mut self) -> &mut Self {
|
||||||
for byte in self.uninit_mut() {
|
let uninit = self.uninit_mut();
|
||||||
byte.write(0);
|
// SAFETY: 0 is a valid value for MaybeUninit<u8> and the length matches the allocation
|
||||||
|
// since it is comes from a slice reference.
|
||||||
|
unsafe {
|
||||||
|
ptr::write_bytes(uninit.as_mut_ptr(), 0, uninit.len());
|
||||||
}
|
}
|
||||||
self.buf.init = self.buf.capacity();
|
self.buf.init = self.buf.capacity();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user