pub struct OuroBuffer<const N: usize> { /* private fields */ }Expand description
Thread-safe circular buffer implementation
§Generic Parameters
N: Buffer capacity in bytes (must be power of two for best performance)
§Implementation Details
- Uses double-check locking pattern for optimal performance
- Atomic counters for lock-free size checks
- Zero-cost initialization through const generics
Implementations§
Source§impl<const N: usize> OuroBuffer<N>
impl<const N: usize> OuroBuffer<N>
Sourcepub const fn new() -> Self
pub const fn new() -> Self
Creates a new empty buffer with zero-initialized storage
§Examples
use ourobuf::OuroBuffer;
// Create 256-byte buffer
let buf = OuroBuffer::<256>::new();
assert!(buf.is_empty());Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns current number of bytes in buffer (lock-free)
§Performance
- Single atomic load with acquire ordering
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Checks if buffer is empty (lock-free)
Equivalent to self.len() == 0
Sourcepub fn available_space(&self) -> usize
pub fn available_space(&self) -> usize
Returns available free space in bytes (lock-free)
Calculated as capacity() - len()
Trait Implementations§
Source§impl<const N: usize> Clone for OuroBuffer<N>
impl<const N: usize> Clone for OuroBuffer<N>
Auto Trait Implementations§
impl<const N: usize> !Freeze for OuroBuffer<N>
impl<const N: usize> !RefUnwindSafe for OuroBuffer<N>
impl<const N: usize> Send for OuroBuffer<N>
impl<const N: usize> Sync for OuroBuffer<N>
impl<const N: usize> Unpin for OuroBuffer<N>
impl<const N: usize> UnwindSafe for OuroBuffer<N>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more