diff --git a/src/structures/ring_buffer.rs b/src/structures/ring_buffer.rs index b2ee8d0..eb1d0ff 100644 --- a/src/structures/ring_buffer.rs +++ b/src/structures/ring_buffer.rs @@ -9,106 +9,7 @@ use crate::{ SoftSerialWriter, }; -#[derive(Debug, Clone, Copy)] -pub struct RingBuffer { - buf: [u8; N], - mask: usize, - head: usize, - tail: usize, -} - -impl Default for RingBuffer { - fn default() -> Self { - Self::new() - } -} - -impl RingBuffer { - #[inline] - pub const fn new() -> Self { - if N.is_power_of_two() { - Self { - buf: [0; N], - mask: N - 1, - head: 0, - tail: 0, - } - } else { - panic!("Buffer capacity isn't power of two"); - } - } - - #[inline(always)] - pub fn get_buffer(&self) -> &[u8] { - &self.buf - } - - #[inline(always)] - pub fn is_empty(&self) -> bool { - self.head == self.tail - } - - #[inline(always)] - pub fn is_full(&self) -> bool { - (self.head + 1) & self.mask == self.tail - } - - #[inline(always)] - pub fn capacity(&self) -> usize { - N - } - - #[inline(always)] - pub fn len(&self) -> usize { - self.head.overflowing_sub(self.tail).0 & self.mask - } - - #[inline(always)] - pub fn clear(&mut self) { - self.buf = [0; N]; - self.head = 0; - self.tail = 0; - } - - #[inline(always)] - pub fn push(&mut self, value: u8) -> Option<()> { - let (head, tail) = (self.head, self.tail); - let next_head = (head + 1) & self.mask; - - if next_head == tail { - return None; - } - - self.buf[head] = value; - self.head = next_head; - - Some(()) - } - - #[inline(always)] - pub fn pop(&mut self) -> Option { - let (head, mut tail) = (self.head, self.tail); - - if head == tail { - return None; - } - - let value = self.buf[tail]; - tail = (tail + 1) & self.mask; - self.tail = tail; - - Some(value) - } -} - -impl Iterator for RingBuffer { - type Item = u8; - - fn next(&mut self) -> Option { - self.pop() - } -} - +#[cfg(feature = "ring-buffer")] impl SoftSerialWriter> for HalfDuplexSerial

where P: PinOps + StaticPinOps, @@ -124,6 +25,7 @@ where } } +#[cfg(feature = "ring-buffer")] impl SoftSerialReader> for HalfDuplexSerial

where P: PinOps + StaticPinOps, @@ -137,7 +39,7 @@ where self.sync_reciever(); if let Ok(byte) = self.read_byte() { - recieve_data.push(byte).unwrap_or(()); + recieve_data.push(byte); } } }