Fix 100% write not un-setting full
This commit is contained in:
parent
4578fb0045
commit
c3a7fc23ed
32
src/lib.rs
32
src/lib.rs
|
@ -31,6 +31,10 @@ impl<const N: usize> ReadWriteBuf<N> {
|
|||
self.read_cursor == self.write_cursor && !self.full
|
||||
}
|
||||
|
||||
pub fn is_full(&self) -> bool {
|
||||
self.full
|
||||
}
|
||||
|
||||
pub fn for_reading(&mut self) -> Option<&mut [u8]> {
|
||||
let (start, stop) = if self.read_cursor < self.write_cursor {
|
||||
(self.read_cursor, self.write_cursor)
|
||||
|
@ -64,7 +68,7 @@ impl<const N: usize> ReadWriteBuf<N> {
|
|||
|
||||
pub fn advance_write(&mut self, count: usize) {
|
||||
self.write_cursor = (self.write_cursor + count) % N;
|
||||
if self.write_cursor != self.read_cursor {
|
||||
if count > 0 {
|
||||
self.full = false;
|
||||
}
|
||||
}
|
||||
|
@ -74,6 +78,32 @@ impl<const N: usize> ReadWriteBuf<N> {
|
|||
mod tests {
|
||||
use super::ReadWriteBuf;
|
||||
|
||||
#[test]
|
||||
fn read_exact_length_works() {
|
||||
let mut buf = ReadWriteBuf::<10>::new();
|
||||
assert!(buf.is_empty());
|
||||
assert!(buf.for_writing().is_none());
|
||||
|
||||
let read_into = buf.for_reading().unwrap();
|
||||
assert_eq!(read_into.len(), 10);
|
||||
buf.advance_read(10);
|
||||
|
||||
assert!(buf.is_full());
|
||||
assert_eq!(buf.read_cursor, buf.write_cursor);
|
||||
|
||||
let write_from = buf.for_writing().unwrap();
|
||||
assert_eq!(write_from.len(), 10);
|
||||
buf.advance_write(10);
|
||||
|
||||
assert!(!buf.full);
|
||||
assert_eq!(buf.read_cursor, buf.write_cursor);
|
||||
|
||||
let read_from = buf.for_reading().unwrap();
|
||||
assert_eq!(read_from.len(), 10);
|
||||
|
||||
assert!(buf.for_writing().is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn from_0_0_reads_whole_len() {
|
||||
let mut buf = ReadWriteBuf::<16>::new();
|
||||
|
|
Loading…
Reference in a new issue