From a76dd8ed0e38ead52a774d98770ca0b1f918ecf8 Mon Sep 17 00:00:00 2001
From: Nandor Kracser <bonifaido@gmail.com>
Date: Fri, 4 Sep 2015 10:27:20 +0200
Subject: [PATCH] Add clear method to RingBuf

---
 src/buf/ring.rs   |  7 +++++++
 test/test_ring.rs | 16 ++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/src/buf/ring.rs b/src/buf/ring.rs
index 926d054..892b1ab 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 78bf4a0..c54423c 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);
+}
-- 
GitLab