From 0e8b440650fffe49f1ecf591e531000ecd4440e6 Mon Sep 17 00:00:00 2001 From: Michal 'vorner' Vaner Date: Wed, 6 Mar 2019 20:46:42 +0100 Subject: [PATCH] Implementation of Buf for VecDeque (#249) --- src/buf/mod.rs | 1 + src/buf/vec_deque.rs | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 src/buf/vec_deque.rs diff --git a/src/buf/mod.rs b/src/buf/mod.rs index 1f74e0ab4..35b4857ec 100644 --- a/src/buf/mod.rs +++ b/src/buf/mod.rs @@ -24,6 +24,7 @@ mod into_buf; mod iter; mod reader; mod take; +mod vec_deque; mod writer; pub use self::buf::Buf; diff --git a/src/buf/vec_deque.rs b/src/buf/vec_deque.rs new file mode 100644 index 000000000..1cd650f51 --- /dev/null +++ b/src/buf/vec_deque.rs @@ -0,0 +1,39 @@ +use std::collections::VecDeque; + +use super::Buf; + +impl Buf for VecDeque { + fn remaining(&self) -> usize { + self.len() + } + + fn bytes(&self) -> &[u8] { + let (s1, s2) = self.as_slices(); + if s1.is_empty() { + s2 + } else { + s1 + } + } + + fn advance(&mut self, cnt: usize) { + self.drain(..cnt); + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn hello_world() { + let mut buffer: VecDeque = VecDeque::new(); + buffer.extend(b"hello world"); + assert_eq!(11, buffer.remaining()); + assert_eq!(b"hello world", buffer.bytes()); + buffer.advance(6); + assert_eq!(b"world", buffer.bytes()); + buffer.extend(b" piece"); + assert_eq!(b"world piece" as &[u8], &buffer.collect::>()[..]); + } +}