Skip to content

Commit 0e8b440

Browse files
vornercarllerche
authored andcommitted
Implementation of Buf for VecDeque (#249)
1 parent e13d2a7 commit 0e8b440

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

src/buf/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ mod into_buf;
2424
mod iter;
2525
mod reader;
2626
mod take;
27+
mod vec_deque;
2728
mod writer;
2829

2930
pub use self::buf::Buf;

src/buf/vec_deque.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
use std::collections::VecDeque;
2+
3+
use super::Buf;
4+
5+
impl Buf for VecDeque<u8> {
6+
fn remaining(&self) -> usize {
7+
self.len()
8+
}
9+
10+
fn bytes(&self) -> &[u8] {
11+
let (s1, s2) = self.as_slices();
12+
if s1.is_empty() {
13+
s2
14+
} else {
15+
s1
16+
}
17+
}
18+
19+
fn advance(&mut self, cnt: usize) {
20+
self.drain(..cnt);
21+
}
22+
}
23+
24+
#[cfg(test)]
25+
mod tests {
26+
use super::*;
27+
28+
#[test]
29+
fn hello_world() {
30+
let mut buffer: VecDeque<u8> = VecDeque::new();
31+
buffer.extend(b"hello world");
32+
assert_eq!(11, buffer.remaining());
33+
assert_eq!(b"hello world", buffer.bytes());
34+
buffer.advance(6);
35+
assert_eq!(b"world", buffer.bytes());
36+
buffer.extend(b" piece");
37+
assert_eq!(b"world piece" as &[u8], &buffer.collect::<Vec<u8>>()[..]);
38+
}
39+
}

0 commit comments

Comments
 (0)