2 releases
0.2.1 | Oct 29, 2024 |
---|---|
0.2.0 | Oct 22, 2024 |
0.1.0 |
|
#481 in Rust patterns
112 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);