@@ -47,9 +47,9 @@ use buffer::Buffer;
47
47
/// }
48
48
/// ```
49
49
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
50
- pub struct BufReader < R > {
51
- inner : R ,
50
+ pub struct BufReader < R : ?Sized > {
52
51
buf : Buffer ,
52
+ inner : R ,
53
53
}
54
54
55
55
impl < R : Read > BufReader < R > {
@@ -95,7 +95,7 @@ impl<R: Read> BufReader<R> {
95
95
}
96
96
}
97
97
98
- impl < R > BufReader < R > {
98
+ impl < R : ? Sized > BufReader < R > {
99
99
/// Gets a reference to the underlying reader.
100
100
///
101
101
/// It is inadvisable to directly read from the underlying reader.
@@ -213,7 +213,10 @@ impl<R> BufReader<R> {
213
213
/// }
214
214
/// ```
215
215
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
216
- pub fn into_inner ( self ) -> R {
216
+ pub fn into_inner ( self ) -> R
217
+ where
218
+ R : Sized ,
219
+ {
217
220
self . inner
218
221
}
219
222
@@ -226,13 +229,13 @@ impl<R> BufReader<R> {
226
229
227
230
// This is only used by a test which asserts that the initialization-tracking is correct.
228
231
#[ cfg( test) ]
229
- impl < R > BufReader < R > {
232
+ impl < R : ? Sized > BufReader < R > {
230
233
pub fn initialized ( & self ) -> usize {
231
234
self . buf . initialized ( )
232
235
}
233
236
}
234
237
235
- impl < R : Seek > BufReader < R > {
238
+ impl < R : ? Sized + Seek > BufReader < R > {
236
239
/// Seeks relative to the current position. If the new position lies within the buffer,
237
240
/// the buffer will not be flushed, allowing for more efficient seeks.
238
241
/// This method does not return the location of the underlying reader, so the caller
@@ -257,7 +260,7 @@ impl<R: Seek> BufReader<R> {
257
260
}
258
261
259
262
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
260
- impl < R : Read > Read for BufReader < R > {
263
+ impl < R : ? Sized + Read > Read for BufReader < R > {
261
264
fn read ( & mut self , buf : & mut [ u8 ] ) -> io:: Result < usize > {
262
265
// If we don't have any buffered data and we're doing a massive read
263
266
// (larger than our internal buffer), bypass our internal buffer
@@ -371,7 +374,7 @@ impl<R: Read> Read for BufReader<R> {
371
374
}
372
375
373
376
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
374
- impl < R : Read > BufRead for BufReader < R > {
377
+ impl < R : ? Sized + Read > BufRead for BufReader < R > {
375
378
fn fill_buf ( & mut self ) -> io:: Result < & [ u8 ] > {
376
379
self . buf . fill_buf ( & mut self . inner )
377
380
}
@@ -384,11 +387,11 @@ impl<R: Read> BufRead for BufReader<R> {
384
387
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
385
388
impl < R > fmt:: Debug for BufReader < R >
386
389
where
387
- R : fmt:: Debug ,
390
+ R : ? Sized + fmt:: Debug ,
388
391
{
389
392
fn fmt ( & self , fmt : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
390
393
fmt. debug_struct ( "BufReader" )
391
- . field ( "reader" , & self . inner )
394
+ . field ( "reader" , & & self . inner )
392
395
. field (
393
396
"buffer" ,
394
397
& format_args ! ( "{}/{}" , self . buf. filled( ) - self . buf. pos( ) , self . capacity( ) ) ,
@@ -398,7 +401,7 @@ where
398
401
}
399
402
400
403
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
401
- impl < R : Seek > Seek for BufReader < R > {
404
+ impl < R : ? Sized + Seek > Seek for BufReader < R > {
402
405
/// Seek to an offset, in bytes, in the underlying reader.
403
406
///
404
407
/// The position used for seeking with <code>[SeekFrom::Current]\(_)</code> is the
@@ -491,7 +494,7 @@ impl<R: Seek> Seek for BufReader<R> {
491
494
}
492
495
}
493
496
494
- impl < T > SizeHint for BufReader < T > {
497
+ impl < T : ? Sized > SizeHint for BufReader < T > {
495
498
#[ inline]
496
499
fn lower_bound ( & self ) -> usize {
497
500
SizeHint :: lower_bound ( self . get_ref ( ) ) + self . buffer ( ) . len ( )
0 commit comments