@@ -525,6 +525,25 @@ impl<W: Write> BufWriter<W> {
525525 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
526526 pub fn get_mut ( & mut self ) -> & mut W { self . inner . as_mut ( ) . unwrap ( ) }
527527
528+ /// Returns a reference to the internally buffered data.
529+ ///
530+ /// # Examples
531+ ///
532+ /// ```no_run
533+ /// # #![feature(bufreader_buffer)]
534+ /// use std::io::BufWriter;
535+ /// use std::net::TcpStream;
536+ ///
537+ /// let buf_writer = BufWriter::new(TcpStream::connect("127.0.0.1:34254").unwrap());
538+ ///
539+ /// // See how many bytes are currently buffered
540+ /// let bytes_buffered = buf_writer.buffer().len();
541+ /// ```
542+ #[ unstable( feature = "bufreader_buffer" , issue = "45323" ) ]
543+ pub fn buffer ( & self ) -> & [ u8 ] {
544+ & self . buf
545+ }
546+
528547 /// Unwraps this `BufWriter`, returning the underlying writer.
529548 ///
530549 /// The buffer is written out before returning the writer.
@@ -965,31 +984,31 @@ mod tests {
965984 let mut buf = [ 0 , 0 , 0 ] ;
966985 let nread = reader. read ( & mut buf) ;
967986 assert_eq ! ( nread. unwrap( ) , 3 ) ;
968- let b : & [ _ ] = & [ 5 , 6 , 7 ] ;
969- assert_eq ! ( buf , b ) ;
987+ assert_eq ! ( buf , [ 5 , 6 , 7 ] ) ;
988+ assert_eq ! ( reader . buffer ( ) , [ ] ) ;
970989
971990 let mut buf = [ 0 , 0 ] ;
972991 let nread = reader. read ( & mut buf) ;
973992 assert_eq ! ( nread. unwrap( ) , 2 ) ;
974- let b : & [ _ ] = & [ 0 , 1 ] ;
975- assert_eq ! ( buf , b ) ;
993+ assert_eq ! ( buf , [ 0 , 1 ] ) ;
994+ assert_eq ! ( reader . buffer ( ) , [ ] ) ;
976995
977996 let mut buf = [ 0 ] ;
978997 let nread = reader. read ( & mut buf) ;
979998 assert_eq ! ( nread. unwrap( ) , 1 ) ;
980- let b : & [ _ ] = & [ 2 ] ;
981- assert_eq ! ( buf , b ) ;
999+ assert_eq ! ( buf , [ 2 ] ) ;
1000+ assert_eq ! ( reader . buffer ( ) , [ 3 ] ) ;
9821001
9831002 let mut buf = [ 0 , 0 , 0 ] ;
9841003 let nread = reader. read ( & mut buf) ;
9851004 assert_eq ! ( nread. unwrap( ) , 1 ) ;
986- let b : & [ _ ] = & [ 3 , 0 , 0 ] ;
987- assert_eq ! ( buf , b ) ;
1005+ assert_eq ! ( buf , [ 3 , 0 , 0 ] ) ;
1006+ assert_eq ! ( reader . buffer ( ) , [ ] ) ;
9881007
9891008 let nread = reader. read ( & mut buf) ;
9901009 assert_eq ! ( nread. unwrap( ) , 1 ) ;
991- let b : & [ _ ] = & [ 4 , 0 , 0 ] ;
992- assert_eq ! ( buf , b ) ;
1010+ assert_eq ! ( buf , [ 4 , 0 , 0 ] ) ;
1011+ assert_eq ! ( reader . buffer ( ) , [ ] ) ;
9931012
9941013 assert_eq ! ( reader. read( & mut buf) . unwrap( ) , 0 ) ;
9951014 }
@@ -1078,31 +1097,40 @@ mod tests {
10781097 let mut writer = BufWriter :: with_capacity ( 2 , inner) ;
10791098
10801099 writer. write ( & [ 0 , 1 ] ) . unwrap ( ) ;
1100+ assert_eq ! ( writer. buffer( ) , [ ] ) ;
10811101 assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 ] ) ;
10821102
10831103 writer. write ( & [ 2 ] ) . unwrap ( ) ;
1104+ assert_eq ! ( writer. buffer( ) , [ 2 ] ) ;
10841105 assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 ] ) ;
10851106
10861107 writer. write ( & [ 3 ] ) . unwrap ( ) ;
1108+ assert_eq ! ( writer. buffer( ) , [ 2 , 3 ] ) ;
10871109 assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 ] ) ;
10881110
10891111 writer. flush ( ) . unwrap ( ) ;
1112+ assert_eq ! ( writer. buffer( ) , [ ] ) ;
10901113 assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 , 2 , 3 ] ) ;
10911114
10921115 writer. write ( & [ 4 ] ) . unwrap ( ) ;
10931116 writer. write ( & [ 5 ] ) . unwrap ( ) ;
1117+ assert_eq ! ( writer. buffer( ) , [ 4 , 5 ] ) ;
10941118 assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 , 2 , 3 ] ) ;
10951119
10961120 writer. write ( & [ 6 ] ) . unwrap ( ) ;
1121+ assert_eq ! ( writer. buffer( ) , [ 6 ] ) ;
10971122 assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 , 2 , 3 , 4 , 5 ] ) ;
10981123
10991124 writer. write ( & [ 7 , 8 ] ) . unwrap ( ) ;
1125+ assert_eq ! ( writer. buffer( ) , [ ] ) ;
11001126 assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] ) ;
11011127
11021128 writer. write ( & [ 9 , 10 , 11 ] ) . unwrap ( ) ;
1129+ assert_eq ! ( writer. buffer( ) , [ ] ) ;
11031130 assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 ] ) ;
11041131
11051132 writer. flush ( ) . unwrap ( ) ;
1133+ assert_eq ! ( writer. buffer( ) , [ ] ) ;
11061134 assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 ] ) ;
11071135 }
11081136
0 commit comments