diff --git a/src/buf/ring.rs b/src/buf/ring.rs index 926d05420e6e5649be523d2de85ac3286e7c1a7e..892b1ab08acbc0c5dca53ebe7ae4ffdae040a69f 100644 --- a/src/buf/ring.rs +++ b/src/buf/ring.rs @@ -91,6 +91,13 @@ impl RingBuf { } } + /// Resets all internal state to the initial state. + pub fn clear(&mut self) { + self.pos = 0; + self.len = 0; + self.mark = Mark::NoMark; + } + /// Returns the number of bytes remaining to read. fn read_remaining(&self) -> usize { self.len diff --git a/test/test_ring.rs b/test/test_ring.rs index 78bf4a0fe8817bc607864130e1808b4cb8f371a5..c54423c9eab85073019cd71d821d685d81ea7ef9 100644 --- a/test/test_ring.rs +++ b/test/test_ring.rs @@ -120,3 +120,19 @@ fn test_reset_full() { buf.reset(); assert_eq!(MutBuf::remaining(&buf), 0); } + + +#[test] +// Test that "RingBuf::clear" does the full reset +fn test_clear() { + use bytes::traits::{Buf, MutBuf}; + use std::io::Write; + + let mut buf = RingBuf::new(8); + buf.write(&[0; 8]).unwrap(); + assert_eq!(MutBuf::remaining(&buf), 0); + assert_eq!(Buf::remaining(&buf), 8); + buf.clear(); + assert_eq!(MutBuf::remaining(&buf), 8); + assert_eq!(Buf::remaining(&buf), 0); +}