From 16cc574feae9057f9550f7802bb768ab0db759ab Mon Sep 17 00:00:00 2001 From: Paolo Barbolini Date: Fri, 10 Jan 2025 14:40:12 +0100 Subject: [PATCH] Implement `Buf::chunks_vectored` for `VecDeque` (#708) --- src/buf/vec_deque.rs | 18 ++++++++++++++++++ tests/test_buf.rs | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/buf/vec_deque.rs b/src/buf/vec_deque.rs index 263167e83..55d5636b1 100644 --- a/src/buf/vec_deque.rs +++ b/src/buf/vec_deque.rs @@ -1,4 +1,6 @@ use alloc::collections::VecDeque; +#[cfg(feature = "std")] +use std::io; use super::Buf; @@ -16,6 +18,22 @@ impl Buf for VecDeque { } } + #[cfg(feature = "std")] + fn chunks_vectored<'a>(&'a self, dst: &mut [io::IoSlice<'a>]) -> usize { + if self.is_empty() || dst.is_empty() { + return 0; + } + + let (s1, s2) = self.as_slices(); + dst[0] = io::IoSlice::new(s1); + if s2.is_empty() || dst.len() == 1 { + return 1; + } + + dst[1] = io::IoSlice::new(s2); + 2 + } + fn advance(&mut self, cnt: usize) { self.drain(..cnt); } diff --git a/tests/test_buf.rs b/tests/test_buf.rs index 562e2821b..5a5ac7e80 100644 --- a/tests/test_buf.rs +++ b/tests/test_buf.rs @@ -353,7 +353,7 @@ mod vec_deque { deque } - buf_tests!(make_input, /* `VecDeque` does not do `chucks_vectored */ false); + buf_tests!(make_input, true); } #[cfg(feature = "std")]