Skip to content

Commit 2544286

Browse files
authored
Rollup merge of rust-lang#55211 - fintelia:bufwriter-buffer, r=shepmaster
Add BufWriter::buffer method CC rust-lang#45323
2 parents f1d6183 + 59a0309 commit 2544286

File tree

1 file changed

+38
-10
lines changed

1 file changed

+38
-10
lines changed

src/libstd/io/buffered.rs

+38-10
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)