5 releases (2 stable)
1.1.0 | Feb 6, 2021 |
---|---|
1.0.0 | Jan 21, 2021 |
0.3.0 | Jan 17, 2021 |
0.2.0 | Jan 10, 2021 |
0.1.0 | Dec 28, 2020 |
#2182 in Data structures
93KB
1.5K
SLoC
TsilCev
LinkedList
on Vec
. Add and remove O(1)
amortized. It has a similar interface to LinkedList
and similar to Vec
.
Example
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.to_vec(), &[9]);
Comparison with LinkedList
and VecDeque
(thank Criterion)
VecDeque
use swap_remove_back
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. The time of addition and removal
is amortized to O(1)
.
Optional features
serde
When this optional dependency is enabled, TsilCev
implements the
serde::Serialize
and serde::Deserialize
traits.
Dependencies
~170KB