Crates.io | tsil_cev |
lib.rs | tsil_cev |
version | 1.1.0 |
source | src |
created_at | 2020-12-28 21:14:30.085423 |
updated_at | 2021-02-06 17:03:47.133512 |
description | LinkedList on Vec |
homepage | https://github.com/mov-rax-rbx/TsilCev |
repository | https://github.com/mov-rax-rbx/TsilCev.git |
max_upload_size | |
id | 328438 |
size | 290,173 |
LinkedList
on Vec
. Add and remove O(1)
amortized. It has a similar interface to LinkedList
and similar to Vec
.
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]);
LinkedList
and VecDeque
(thank Criterion)VecDeque
use swap_remove_back
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)
.
serde
When this optional dependency is enabled, TsilCev
implements the
serde::Serialize
and serde::Deserialize
traits.