Crate tsil_cev[−][src]
Implementation of the linked list on Vec
. Has an
O(1)
amortized insertion and removal time due to
linear placement in memory. It is added in the
same way as in Vec
, but at deletion the element
moves to the end and something like pop is called.
tsil
and cev
TsilCev
has 2 types of iterators Tsil
and Cev
.
Tsil
- iterating as in LinkedList
. Cev
- iterating
as in Vec
(a bit faster because memory access is sequential).
Examples
use tsil_cev::TsilCev; let mut tc = TsilCev::from(vec![5, 6, 7, 8, 9, 10]); tc.push_front(4); let mut cursor = tc.cursor_front_mut(); assert_eq!(cursor.current(), Some(&4)); cursor.move_next(); assert_eq!(cursor.current(), Some(&5)); cursor.remove(); assert_eq!(cursor.current(), Some(&6)); cursor.remove().remove().move_next_length(2); assert_eq!(cursor.current(), Some(&10)); cursor.move_prev(); assert_eq!(cursor.current(), Some(&9)); tc.drain_filter_tsil(|x| *x % 2 == 0); assert_eq!(tc.into_vec(), &[9]);
Current Implementation
The allocator for the elements is Vec
and each
element has two indexes (next and previous element).
When delete an item, it moves to the end, and something
like pop is called.
Optional features
serde
When this optional dependency is enabled, TsilCev
implements the
serde::Serialize
and serde::Deserialize
traits.
Structs
CevIter | |
CevIterMut | |
Cursor | |
CursorMut | |
DrainFilterCev | |
DrainFilterTsil | |
TsilCev | |
TsilIntoIter | |
TsilIter | |
TsilIterMut |