Struct RingBuffer

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

A lock-free ring buffer for metric storage

This implementation uses atomic operations to avoid locks in the hot path, ensuring minimal impact on trading system performance.

Implementations§

Source§

impl<T: Clone> RingBuffer<T>

Source

pub fn new(capacity: usize) -> Self

Create a new ring buffer with the specified capacity

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

A new RingBuffer with effective capacity of capacity - 1 items.

§Panics

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

§Example
let buffer = RingBuffer::new(1024);  // Can hold 1023 items
Source

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

Push an item into the ring buffer

Returns true if the item was successfully pushed, false if the buffer was full. When full, the overflow counter is incremented and data is lost.

§Arguments
  • item - The item to push into the buffer
§Returns

true if successful, false if buffer was full (overflow)

Source

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

Pop an item from the ring buffer

§Returns

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

Source

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

Drain up to max_items from the 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 max_items)

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 total number of overflow events

Source

pub fn reset_overflow_count(&self)

Resets the overflow counter to zero

Trait Implementations§

Source§

impl<T: Clone + Send> Send for RingBuffer<T>

Source§

impl<T: Clone + Send> Sync for RingBuffer<T>

Auto Trait Implementations§

§

impl<T> !Freeze for RingBuffer<T>

§

impl<T> !RefUnwindSafe for RingBuffer<T>

§

impl<T> Unpin for RingBuffer<T>
where T: Unpin,

§

impl<T> UnwindSafe for RingBuffer<T>
where T: UnwindSafe,

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> 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, 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,