diff options
| author | Benoît du Garreau <bdgdlm@outlook.com> | 2023-04-20 16:02:35 +0200 |
|---|---|---|
| committer | Benoît du Garreau <bdgdlm@outlook.com> | 2023-04-20 16:02:35 +0200 |
| commit | a9ece1255bf25dbc95598b35d407789cf38883d0 (patch) | |
| tree | dc444a97d344da9b789f2fe5779b9fdc6d7ebf87 /library/std/src | |
| parent | 7e23d180c1db42941b3bd32542a899e9eee7cbcb (diff) | |
| download | rust-a9ece1255bf25dbc95598b35d407789cf38883d0.tar.gz rust-a9ece1255bf25dbc95598b35d407789cf38883d0.zip | |
Implement `BufRead` for `VecDeque<u8>`
Diffstat (limited to 'library/std/src')
| -rw-r--r-- | library/std/src/io/impls.rs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/library/std/src/io/impls.rs b/library/std/src/io/impls.rs index e5048dcc8ac..1e8b718ad51 100644 --- a/library/std/src/io/impls.rs +++ b/library/std/src/io/impls.rs @@ -436,6 +436,24 @@ impl<A: Allocator> Read for VecDeque<u8, A> { } } +/// BufRead is implemented for `VecDeque<u8>` by reading bytes from the front of the `VecDeque`. +#[stable(feature = "vecdeque_buf_read", since = "CURRENT_RUSTC_VERSION")] +impl<A: Allocator> BufRead for VecDeque<u8, A> { + /// Returns the contents of the "front" slice as returned by + /// [`as_slices`][`VecDeque::as_slices`]. If the contained byte slices of the `VecDeque` are + /// discontiguous, multiple calls to `fill_buf` will be needed to read the entire content. + #[inline] + fn fill_buf(&mut self) -> io::Result<&[u8]> { + let (front, _) = self.as_slices(); + Ok(front) + } + + #[inline] + fn consume(&mut self, amt: usize) { + self.drain(..amt); + } +} + /// Write is implemented for `VecDeque<u8>` by appending to the `VecDeque`, growing it as needed. #[stable(feature = "vecdeque_read_write", since = "1.63.0")] impl<A: Allocator> Write for VecDeque<u8, A> { |
