Rollup merge of #128406 - lolbinarycat:bufreader_peek, r=Mark-Simulacrum · patricklam/verify-rust-std@1bd5338 (original) (raw)
`@@ -94,6 +94,40 @@ impl<R: Read> BufReader {
`
94
94
`pub fn with_capacity(capacity: usize, inner: R) -> BufReader {
`
95
95
`BufReader { inner, buf: Buffer::with_capacity(capacity) }
`
96
96
`}
`
``
97
+
``
98
`` +
/// Attempt to look ahead n
bytes.
``
``
99
`+
///
`
``
100
`` +
/// n
must be less than capacity
.
``
``
101
`+
///
`
``
102
`+
/// ## Examples
`
``
103
`+
///
`
``
104
/// ```rust
``
105
`+
/// #![feature(bufreader_peek)]
`
``
106
`+
/// use std::io::{Read, BufReader};
`
``
107
`+
///
`
``
108
`+
/// let mut bytes = &b"oh, hello"[..];
`
``
109
`+
/// let mut rdr = BufReader::with_capacity(6, &mut bytes);
`
``
110
`+
/// assert_eq!(rdr.peek(2).unwrap(), b"oh");
`
``
111
`+
/// let mut buf = [0; 4];
`
``
112
`+
/// rdr.read(&mut buf[..]).unwrap();
`
``
113
`+
/// assert_eq!(&buf, b"oh, ");
`
``
114
`+
/// assert_eq!(rdr.peek(2).unwrap(), b"he");
`
``
115
`+
/// let mut s = String::new();
`
``
116
`+
/// rdr.read_to_string(&mut s).unwrap();
`
``
117
`+
/// assert_eq!(&s, "hello");
`
``
118
/// ```
``
119
`+
#[unstable(feature = "bufreader_peek", issue = "128405")]
`
``
120
`+
pub fn peek(&mut self, n: usize) -> io::Result<&[u8]> {
`
``
121
`+
assert!(n <= self.capacity());
`
``
122
`+
while n > self.buf.buffer().len() {
`
``
123
`+
if self.buf.pos() > 0 {
`
``
124
`+
self.buf.backshift();
`
``
125
`+
}
`
``
126
`+
self.buf.read_more(&mut self.inner)?;
`
``
127
`+
debug_assert_eq!(self.buf.pos(), 0);
`
``
128
`+
}
`
``
129
`+
Ok(&self.buf.buffer()[..n])
`
``
130
`+
}
`
97
131
`}
`
98
132
``
99
133
`impl<R: ?Sized> BufReader {
`