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