Relax implicit R: Sized
bound on BufReader<R>
This commit is contained in:
parent
b7d8c88b64
commit
e77b14e2ac
@ -47,9 +47,9 @@
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
pub struct BufReader<R> {
|
pub struct BufReader<R: ?Sized> {
|
||||||
inner: R,
|
|
||||||
buf: Buffer,
|
buf: Buffer,
|
||||||
|
inner: R,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<R: Read> BufReader<R> {
|
impl<R: Read> BufReader<R> {
|
||||||
@ -95,7 +95,7 @@ pub fn with_capacity(capacity: usize, inner: R) -> BufReader<R> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<R> BufReader<R> {
|
impl<R: ?Sized> BufReader<R> {
|
||||||
/// Gets a reference to the underlying reader.
|
/// Gets a reference to the underlying reader.
|
||||||
///
|
///
|
||||||
/// It is inadvisable to directly read from the underlying reader.
|
/// It is inadvisable to directly read from the underlying reader.
|
||||||
@ -213,7 +213,10 @@ pub fn capacity(&self) -> usize {
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
pub fn into_inner(self) -> R {
|
pub fn into_inner(self) -> R
|
||||||
|
where
|
||||||
|
R: Sized,
|
||||||
|
{
|
||||||
self.inner
|
self.inner
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -226,13 +229,13 @@ fn discard_buffer(&mut self) {
|
|||||||
|
|
||||||
// This is only used by a test which asserts that the initialization-tracking is correct.
|
// This is only used by a test which asserts that the initialization-tracking is correct.
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
impl<R> BufReader<R> {
|
impl<R: ?Sized> BufReader<R> {
|
||||||
pub fn initialized(&self) -> usize {
|
pub fn initialized(&self) -> usize {
|
||||||
self.buf.initialized()
|
self.buf.initialized()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<R: Seek> BufReader<R> {
|
impl<R: ?Sized + Seek> BufReader<R> {
|
||||||
/// Seeks relative to the current position. If the new position lies within the buffer,
|
/// Seeks relative to the current position. If the new position lies within the buffer,
|
||||||
/// the buffer will not be flushed, allowing for more efficient seeks.
|
/// the buffer will not be flushed, allowing for more efficient seeks.
|
||||||
/// This method does not return the location of the underlying reader, so the caller
|
/// This method does not return the location of the underlying reader, so the caller
|
||||||
@ -257,7 +260,7 @@ pub fn seek_relative(&mut self, offset: i64) -> io::Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
impl<R: Read> Read for BufReader<R> {
|
impl<R: ?Sized + Read> Read for BufReader<R> {
|
||||||
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
|
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
|
||||||
// If we don't have any buffered data and we're doing a massive read
|
// If we don't have any buffered data and we're doing a massive read
|
||||||
// (larger than our internal buffer), bypass our internal buffer
|
// (larger than our internal buffer), bypass our internal buffer
|
||||||
@ -371,7 +374,7 @@ fn read_to_string(&mut self, buf: &mut String) -> io::Result<usize> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
impl<R: Read> BufRead for BufReader<R> {
|
impl<R: ?Sized + Read> BufRead for BufReader<R> {
|
||||||
fn fill_buf(&mut self) -> io::Result<&[u8]> {
|
fn fill_buf(&mut self) -> io::Result<&[u8]> {
|
||||||
self.buf.fill_buf(&mut self.inner)
|
self.buf.fill_buf(&mut self.inner)
|
||||||
}
|
}
|
||||||
@ -384,11 +387,11 @@ fn consume(&mut self, amt: usize) {
|
|||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
impl<R> fmt::Debug for BufReader<R>
|
impl<R> fmt::Debug for BufReader<R>
|
||||||
where
|
where
|
||||||
R: fmt::Debug,
|
R: ?Sized + fmt::Debug,
|
||||||
{
|
{
|
||||||
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
fmt.debug_struct("BufReader")
|
fmt.debug_struct("BufReader")
|
||||||
.field("reader", &self.inner)
|
.field("reader", &&self.inner)
|
||||||
.field(
|
.field(
|
||||||
"buffer",
|
"buffer",
|
||||||
&format_args!("{}/{}", self.buf.filled() - self.buf.pos(), self.capacity()),
|
&format_args!("{}/{}", self.buf.filled() - self.buf.pos(), self.capacity()),
|
||||||
@ -398,7 +401,7 @@ fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
impl<R: Seek> Seek for BufReader<R> {
|
impl<R: ?Sized + Seek> Seek for BufReader<R> {
|
||||||
/// Seek to an offset, in bytes, in the underlying reader.
|
/// Seek to an offset, in bytes, in the underlying reader.
|
||||||
///
|
///
|
||||||
/// The position used for seeking with <code>[SeekFrom::Current]\(_)</code> is the
|
/// The position used for seeking with <code>[SeekFrom::Current]\(_)</code> is the
|
||||||
@ -491,7 +494,7 @@ fn stream_position(&mut self) -> io::Result<u64> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T> SizeHint for BufReader<T> {
|
impl<T: ?Sized> SizeHint for BufReader<T> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn lower_bound(&self) -> usize {
|
fn lower_bound(&self) -> usize {
|
||||||
SizeHint::lower_bound(self.get_ref()) + self.buffer().len()
|
SizeHint::lower_bound(self.get_ref()) + self.buffer().len()
|
||||||
|
@ -2753,7 +2753,7 @@ fn size_hint(&self) -> (usize, Option<usize>) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T> SizeHint for T {
|
impl<T: ?Sized> SizeHint for T {
|
||||||
#[inline]
|
#[inline]
|
||||||
default fn lower_bound(&self) -> usize {
|
default fn lower_bound(&self) -> usize {
|
||||||
0
|
0
|
||||||
|
@ -466,7 +466,7 @@ fn properties(&self) -> CopyParams {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: CopyRead> CopyRead for BufReader<T> {
|
impl<T: ?Sized + CopyRead> CopyRead for BufReader<T> {
|
||||||
fn drain_to<W: Write>(&mut self, writer: &mut W, outer_limit: u64) -> Result<u64> {
|
fn drain_to<W: Write>(&mut self, writer: &mut W, outer_limit: u64) -> Result<u64> {
|
||||||
let buf = self.buffer();
|
let buf = self.buffer();
|
||||||
let buf = &buf[0..min(buf.len(), outer_limit.try_into().unwrap_or(usize::MAX))];
|
let buf = &buf[0..min(buf.len(), outer_limit.try_into().unwrap_or(usize::MAX))];
|
||||||
|
Loading…
Reference in New Issue
Block a user