This commit is contained in:
DrMeepster
2021-01-17 22:28:18 -08:00
parent 3802025f40
commit 98c6200b16
18 changed files with 772 additions and 294 deletions

View File

@@ -5,7 +5,7 @@ mod tests;
use crate::fmt;
use crate::io::{
self, BufRead, Initializer, IoSlice, IoSliceMut, Read, Seek, SeekFrom, SizeHint, Write,
self, BufRead, IoSlice, IoSliceMut, Read, ReadBuf, Seek, SeekFrom, SizeHint, Write,
};
/// A reader which is always at EOF.
@@ -47,8 +47,8 @@ impl Read for Empty {
}
#[inline]
unsafe fn initializer(&self) -> Initializer {
Initializer::nop()
fn read_buf(&mut self, _buf: &mut ReadBuf<'_>) -> io::Result<()> {
Ok(())
}
}
#[stable(feature = "rust1", since = "1.0.0")]
@@ -130,6 +130,22 @@ impl Read for Repeat {
Ok(buf.len())
}
fn read_buf(&mut self, buf: &mut ReadBuf<'_>) -> io::Result<()> {
for slot in unsafe { buf.unfilled_mut() } {
slot.write(self.byte);
}
let remaining = buf.remaining();
unsafe {
buf.assume_init(remaining);
}
buf.add_filled(remaining);
Ok(())
}
#[inline]
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
let mut nwritten = 0;
@@ -143,11 +159,6 @@ impl Read for Repeat {
fn is_read_vectored(&self) -> bool {
true
}
#[inline]
unsafe fn initializer(&self) -> Initializer {
Initializer::nop()
}
}
impl SizeHint for Repeat {