2 releases
new 0.2.1 | Oct 29, 2024 |
---|---|
0.2.0 | Oct 22, 2024 |
0.1.0 |
|
#365 in Rust patterns
544 downloads per month
38KB
729 lines
LinkedList
Linked lists that supports arbitrary removal in constant time.
It is based on the linked list implementation in Rust-for-Linux.
Examples
use linked_list_r4l::{GetLinks, Links, List};
type InnerType = usize;
pub struct ExampleNode {
pub inner: InnerType,
links: Links<Self>,
}
impl GetLinks for ExampleNode {
type EntryType = Self;
fn get_links(t: &Self) -> &Links<Self> {
&t.links
}
}
impl ExampleNode {
fn new(inner: InnerType) -> Self {
Self {
inner,
links: Links::new()
}
}
fn inner(&self) -> &InnerType {
&self.inner
}
}
let node1 = Box::new(ExampleNode::new(0));
let node2 = Box::new(ExampleNode::new(1));
let mut list = List::<Box<ExampleNode>>::new();
list.push_back(node1);
list.push_back(node2);
// Support Iter
for (i,e) in list.iter().enumerate() {
assert!(*e.inner() == i);
}
// Pop drop
assert!(*list.pop_front().unwrap().inner() == 0);
assert!(*list.pop_front().unwrap().inner() == 1);