[][src]Struct tui_logger::CircularBuffer

pub struct CircularBuffer<T> { /* fields omitted */ }

CircularBuffer is used to store the last elements of an endless sequence. Oldest elements will be overwritten. The implementation focus on speed. So memory allocations are avoided.

Usage example:

 extern crate tui_logger;

 use tui_logger::CircularBuffer;

 let mut cb : CircularBuffer<u64> = CircularBuffer::new(5);
 cb.push(1);
 cb.push(2);
 cb.push(3);
 cb.push(4);
 cb.push(5);
 cb.push(6); // This will overwrite the first element

 // Total elements pushed into the buffer is 6.
 assert_eq!(6,cb.total_elements());

 // Thus the buffer has wrapped around.
 assert_eq!(true,cb.has_wrapped());

 /// Iterate through the elements:
 {
     let mut iter = cb.iter();
     assert_eq!(Some(&2), iter.next());
     assert_eq!(Some(&3), iter.next());
     assert_eq!(Some(&4), iter.next());
     assert_eq!(Some(&5), iter.next());
     assert_eq!(Some(&6), iter.next());
     assert_eq!(None, iter.next());
 }

 /// Iterate backwards through the elements:
 {
     let mut iter = cb.rev_iter();
     assert_eq!(Some(&6), iter.next());
     assert_eq!(Some(&5), iter.next());
     assert_eq!(Some(&4), iter.next());
     assert_eq!(Some(&3), iter.next());
     assert_eq!(Some(&2), iter.next());
     assert_eq!(None, iter.next());
 }

 // The elements in the buffer are now:
 assert_eq!(vec![2,3,4,5,6],cb.take());

 // After taking all elements, the buffer is empty.
 let now_empty : Vec<u64> = vec![];
 assert_eq!(now_empty,cb.take());

Methods

impl<T> CircularBuffer<T>[src]

pub fn new(max_depth: usize) -> CircularBuffer<T>[src]

Create a new CircularBuffer, which can hold max_depth elements

pub fn len(&self) -> usize[src]

Return the number of elements present in the buffer

pub fn push(&mut self, elem: T)[src]

Push a new element into the buffer. Until the capacity is reached, elements are pushed. Afterwards the oldest elements will be overwritten.

pub fn take(&mut self) -> Vec<T>[src]

Take out all elements from the buffer, leaving an empty buffer behind

pub fn total_elements(&self) -> usize[src]

Total number of elements pushed into the buffer.

pub fn has_wrapped(&self) -> bool[src]

If has_wrapped() is true, then elements have been overwritten

pub fn iter(&mut self) -> Chain<Iter<T>, Iter<T>>[src]

Return an iterator to step through all elements in the sequence, as these have been pushed (FIFO)

pub fn rev_iter(&mut self) -> Chain<Rev<Iter<T>>, Rev<Iter<T>>>[src]

Return an iterator to step through all elements in the reverse sequence, as these have been pushed (LIFO)

Auto Trait Implementations

impl<T> Send for CircularBuffer<T> where
    T: Send

impl<T> Sync for CircularBuffer<T> where
    T: Sync

Blanket Implementations

impl<T, U> Into for T where
    U: From<T>, 
[src]

impl<T> From for T[src]

impl<T, U> TryFrom for T where
    U: Into<T>, 
[src]

type Error = !

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

impl<T> Borrow for T where
    T: ?Sized
[src]

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

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

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> BorrowMut for T where
    T: ?Sized
[src]

impl<T> Erased for T