#[derive(Clone)] pub struct Buffers { pub r: [f32; LEN], pub l: [f32; LEN], pub idx: usize, } // unsafe impl Sync for Buffers {} // unsafe impl Send for Buffers {} impl Buffers { pub const fn new() -> Self { Self { l: [0.; LEN], r: [0.; LEN], idx: 0, } } pub const fn from(l: [f32; LEN], r: [f32; LEN]) -> Self { Self { l, r, idx: 0 } } /// Writes to buffer, advances idx, returns true if buffer is full pub fn write_advance(&mut self, l: f32, r: f32) -> bool { self.l[self.idx] = l; self.r[self.idx] = r; self.idx += 1; if self.idx >= LEN { self.idx = 0; true } else { false } } /// Reads buffer, advances idx, returns true if buffer is full pub fn read_advance(&mut self) -> (f32, f32, bool) { (self.l[self.idx], self.r[self.idx], { self.idx += 1; if self.idx >= LEN { self.idx = 0; true } else { false } }) } pub fn reset(&mut self) { self.idx = 0; } }