Struct SharedRingBuffer

Source
pub struct SharedRingBuffer<T: Clone> { /* private fields */ }
Expand description

A thread-safe wrapper around RingBuffer for shared access

Implementations§

Source§

impl<T: Clone> SharedRingBuffer<T>

Source

pub fn new(capacity: usize) -> Self

Creates a new shared ring buffer with the specified capacity

This is the primary interface for creating ring buffers in the HFT system. The buffer is wrapped in an Arc for efficient sharing between threads.

§Arguments
  • capacity - Buffer capacity, must be a power of 2 (2, 4, 8, 16, 32, 64, 128, …)
§Returns

A SharedRingBuffer with effective capacity of capacity - 1 items.

§Panics

Panics if capacity is not a power of 2 or is zero.

§Example
let buffer = SharedRingBuffer::new(1024);  // For high-frequency data
Source

pub fn push(&self, item: T) -> bool

Push an item into the ring buffer

§Arguments
  • item - The item to push
§Returns

true if successful, false if buffer was full

Source

pub fn pop(&self) -> Option<T>

Pop an item from the ring buffer

§Returns

Some(item) if available, None if buffer was empty

Source

pub fn drain(&self, max_items: usize) -> Vec<T>

Drain up to max_items from the ring buffer

More efficient than repeatedly calling pop() for batch operations.

§Arguments
  • max_items - Maximum number of items to drain
§Returns

Vector of drained items (may be fewer than requested)

Source

pub fn len(&self) -> usize

Returns the current number of items in the buffer

Source

pub fn is_empty(&self) -> bool

Returns true if the buffer contains no items

Source

pub fn overflow_count(&self) -> usize

Returns the number of times the ring buffer has overflowed

An overflow occurs when push() is called on a full buffer, resulting in data loss. This counter is critical for monitoring buffer saturation and capacity planning.

§Returns

The total number of overflow events since buffer creation or last reset.

§Example
let buffer = SharedRingBuffer::new(64);

// Monitor overflow rate
let initial = buffer.overflow_count();
// ... time passes ...
let overflows = buffer.overflow_count() - initial;
if overflows > 0 {
    eprintln!("Warning: {} overflows detected", overflows);
}

Trait Implementations§

Source§

impl<T: Clone> Clone for SharedRingBuffer<T>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

const fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl<T> Freeze for SharedRingBuffer<T>

§

impl<T> !RefUnwindSafe for SharedRingBuffer<T>

§

impl<T> Send for SharedRingBuffer<T>
where T: Send,

§

impl<T> Sync for SharedRingBuffer<T>
where T: Send,

§

impl<T> Unpin for SharedRingBuffer<T>

§

impl<T> !UnwindSafe for SharedRingBuffer<T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,