Skip to content

Latest commit

 

History

History
65 lines (42 loc) · 1.65 KB

README.md

File metadata and controls

65 lines (42 loc) · 1.65 KB

TsilCev

Rust LICENSE Crates Documentation

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.