pub struct Queue<T> { /* private fields */ }Expand description
FIFO queue with a fixed capacity.
This is in a LRU package because it has a semantic behavior similar to an LRU, in the sense that when capacity is reached, the oldest element is dropped.
In practice it in just some syntaxic sugar over a VecDeque,
and data is dropped when you exceed capacity.
Examples
use squeue::Queue;
let mut queue: Queue<usize> = Queue::new(3);
assert_eq!(None, queue.push(1));
assert_eq!(None, queue.push(2));
assert_eq!(None, queue.push(3));
assert_eq!(Some(1), queue.push(4));
assert_eq!(3, queue.len());Implementations§
source§impl<T> Queue<T>
impl<T> Queue<T>
sourcepub fn new(capacity: usize) -> Self
pub fn new(capacity: usize) -> Self
Create a new queue.
Examples
use squeue::Queue;
let queue: Queue<String> = Queue::new(10);
assert_eq!(10, queue.capacity());sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Return queue length.
Examples
use squeue::Queue;
let mut queue: Queue<&str> = Queue::new(10);
assert_eq!(0, queue.len());
queue.push("x");
queue.push("y");
assert_eq!(2, queue.len());sourcepub fn capacity(&self) -> usize
pub fn capacity(&self) -> usize
Return queue capacity.
Examples
use squeue::Queue;
let mut queue: Queue<f64> = Queue::new(100);
assert_eq!(100, queue.capacity());sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true if queue is empty.
Examples
use squeue::Queue;
let mut queue: Queue<String> = Queue::new(100);
assert!(queue.is_empty());
queue.push(String::from("abc"));
assert!(!queue.is_empty());sourcepub fn is_full(&self) -> bool
pub fn is_full(&self) -> bool
Returns true if queue is full.
Examples
use squeue::Queue;
let mut queue: Queue<usize> = Queue::new(10);
assert!(!queue.is_full());
for i in 0..10 {
queue.push(i);
}
assert!(queue.is_full());sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Clear all data.
Examples
use squeue::Queue;
let mut queue: Queue<String> = Queue::new(100);
queue.push(String::from("abc"));
queue.clear();
assert!(queue.is_empty());sourcepub fn resize(&mut self, capacity: usize) -> usize
pub fn resize(&mut self, capacity: usize) -> usize
Resize queue.
Returns the number of dropped items, if any.
Examples
use squeue::Queue;
let mut queue: Queue<usize> = Queue::new(10);
assert_eq!(10, queue.capacity());
assert_eq!(0, queue.resize(100));
assert_eq!(100, queue.capacity());
for i in 0..1000 {
queue.push(i);
}
assert_eq!(100, queue.len());
assert_eq!(90, queue.resize(10));
assert_eq!(10, queue.capacity());
assert_eq!(10, queue.len());
assert_eq!(Some(990), queue.pop());sourcepub fn push(&mut self, item: T) -> Option<T>
pub fn push(&mut self, item: T) -> Option<T>
Push data into the queue.
If the queue is full and data needs to be dropped, that data is returned.
Examples
use squeue::Queue;
let mut queue: Queue<usize> = Queue::new(2);
assert_eq!(None, queue.push(1));
assert_eq!(None, queue.push(10));
assert_eq!(Some(1), queue.push(100));
assert_eq!(Some(10), queue.push(1000));
assert_eq!(2, queue.len());sourcepub fn pop(&mut self) -> Option<T>
pub fn pop(&mut self) -> Option<T>
Pop data from the queue.
The oldest item is returned, this works in FIFO mode.
Examples
use squeue::Queue;
let mut queue: Queue<usize> = Queue::new(5);
assert_eq!(None, queue.pop());
assert_eq!(None, queue.push(1));
assert_eq!(Some(1), queue.pop());
assert_eq!(None, queue.push(2));
assert_eq!(None, queue.push(3));
assert_eq!(Some(2), queue.pop());
assert_eq!(1, queue.len());sourcepub fn peek(&self) -> Option<&T>
pub fn peek(&self) -> Option<&T>
Peek data, get it without removing it.
This gives an insight on what pop() would return.
Examples
use squeue::Queue;
let mut queue: Queue<usize> = Queue::new(5);
assert_eq!(None, queue.peek());
assert_eq!(None, queue.push(1));
assert_eq!(None, queue.push(2));
assert_eq!(Some(&1), queue.peek());sourcepub fn drain(&mut self) -> Drain<T> ⓘ
pub fn drain(&mut self) -> Drain<T> ⓘ
Creates an iterator which drains the queue.
Use this when you want to get all the items, at a given point, and free space in the queue.
use squeue::Queue;
let mut queue = Queue::new(10);
queue.push(1);
queue.push(10);
let drain = queue.drain();
assert_eq!(0, queue.len());
assert_eq!(2, drain.count());Trait Implementations§
source§impl<'de, T> Deserialize<'de> for Queue<T>where
T: Deserialize<'de>,
impl<'de, T> Deserialize<'de> for Queue<T>where
T: Deserialize<'de>,
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
source§impl<T> Display for Queue<T>where
T: Display,
impl<T> Display for Queue<T>where
T: Display,
Pretty-print queue content.
Prints the next element to be popped, and the len/capacity.
Examples
use squeue::Queue;
let mut queue = Queue::new(100);
queue.push(123);
queue.push(4);
queue.push(5);
assert_eq!("{ next: 123, len: 3, capacity: 100 }", format!("{}", queue));
queue.clear();
assert_eq!("{ len: 0, capacity: 100 }", format!("{}", queue));source§impl<T> From<Queue<T>> for SyncQueue<T>
impl<T> From<Queue<T>> for SyncQueue<T>
Create a thread-safe queue from an ordinary queue.
Examples
use squeue::{Queue, SyncQueue};
let a: Queue<String> = Queue::new(100);
let b = SyncQueue::from(a);
assert_eq!(100, b.capacity());source§impl<T> From<SyncQueue<T>> for Queue<T>where
T: Clone,
impl<T> From<SyncQueue<T>> for Queue<T>where
T: Clone,
Create an ordinary queue from a thread-safe queue.
This is possibly slow as it is O(n) since it clones the queue.
Examples
use squeue::{Queue, SyncQueue};
let a: SyncQueue<String> = SyncQueue::new(100);
let b = Queue::from(a);
assert_eq!(100, b.capacity());source§impl<T> FromIterator<T> for Queue<T>
impl<T> FromIterator<T> for Queue<T>
source§fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self
fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self
Creates a new queue from an iterator.
With this, you can use collect() to build a queue.
Examples
use squeue::Queue;
let src: Vec<usize> = vec![4, 5, 6];
let mut queue = src.into_iter().collect::<Queue<usize>>();
assert_eq!(Some(4), queue.pop());
assert_eq!(Some(5), queue.pop());
assert_eq!(Some(6), queue.pop());
assert_eq!(None, queue.pop());
assert_eq!(3, queue.capacity());source§impl<T> IntoIterator for Queue<T>
impl<T> IntoIterator for Queue<T>
source§impl<T> PartialEq<Queue<T>> for Queue<T>where
T: PartialEq,
impl<T> PartialEq<Queue<T>> for Queue<T>where
T: PartialEq,
source§fn eq(&self, other: &Self) -> bool
fn eq(&self, other: &Self) -> bool
Compares two queues. Capacity, content and order must match.
Examples
use squeue::Queue;
let mut queue1 = Queue::new(10);
queue1.push("Alice");
queue1.push("Bob");
let mut queue2 = Queue::new(10);
queue2.push("Oscar");
queue2.push("Alice");
queue2.push("Bob");
assert_ne!(&queue1, &queue2);
queue2.pop();
assert_eq!(&queue1, &queue2);