pub struct FrodoRing<T, const N: usize> { /* private fields */ }Expand description
Кольцевая очередь с порядком FIFO и не использующая аллокации.
У данной кольцевой очереди следующие ключевые особенности:
- два API: привычный (
get/len/iter/removeс небольшим оверхедомO(n)на возможный поиск) и местный (at/used/remove_at) - элементы могут быть изъяты из середины очереди без перемещения объектов в памяти, пока не достигнута максимальная ёмкость очереди
- смысл очереди - иметь возможность найти элемент с нужными предикатами, отсортированный в порядке очереди, в
no_std-окружении.
Implementations§
Source§impl<T, const N: usize> FrodoRing<T, N>
impl<T, const N: usize> FrodoRing<T, N>
Sourcepub fn at(&self, naive_pos: isize) -> Option<&T>
pub fn at(&self, naive_pos: isize) -> Option<&T>
Получает элемент по ячейке (наивной позиции).
Примеры:
ring.at(0)- получить первый элемент в очередиring.at(1)- получить содержимое ячейки следом за первым элементом (ячейка может быть пустой)ring.at(ring.used() - 1)- получить последний элемент в очередиring.at(-1)- также получить последний элемент в очереди
Sourcepub fn get(&self, pos: usize) -> Option<&T>
pub fn get(&self, pos: usize) -> Option<&T>
Получает элемент по очереди.
Примеры:
ring.get(0)- получить первый элемент в очередиring.get(1)- получить второй элемент в очередиring.get(ring.len() - 1)- получить последний элемент в очереди
Sourcepub fn iter(&self) -> FrodoRingIterator<'_, T, N> ⓘ
pub fn iter(&self) -> FrodoRingIterator<'_, T, N> ⓘ
Создаёт итератор по очереди.
Sourcepub fn position<F: Fn(&T) -> bool>(&self, f: F) -> Option<isize>
pub fn position<F: Fn(&T) -> bool>(&self, f: F) -> Option<isize>
Получает наивную позицию (ячейку) элемента, отвечающего условию.
Чтобы получить сам элемент, используйте ring.at(naive_pos).
Sourcepub fn push(&mut self, item: T) -> Result<(), T>
pub fn push(&mut self, item: T) -> Result<(), T>
Кладёт элемент в очередь.
В случае, если число использованных очередью ячеек равно N, но при этом хотя бы одна из них не занята,
очередь проводит операцию сжатия (O(n)) с перемещением элементов в памяти.
Trait Implementations§
Auto Trait Implementations§
impl<T, const N: usize> Freeze for FrodoRing<T, N>where
T: Freeze,
impl<T, const N: usize> RefUnwindSafe for FrodoRing<T, N>where
T: RefUnwindSafe,
impl<T, const N: usize> Send for FrodoRing<T, N>where
T: Send,
impl<T, const N: usize> Sync for FrodoRing<T, N>where
T: Sync,
impl<T, const N: usize> Unpin for FrodoRing<T, N>where
T: Unpin,
impl<T, const N: usize> UnwindSafe for FrodoRing<T, N>where
T: UnwindSafe,
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