Crates.io | linked_list_r4l |
lib.rs | linked_list_r4l |
version | 0.2.1 |
source | src |
created_at | 2024-10-22 03:26:41.250856 |
updated_at | 2024-10-29 01:57:14.436828 |
description | Linked lists that supports arbitrary removal in constant time |
homepage | https://github.com/arceos-org/arceos |
repository | https://github.com/arceos-org/linked_list_r4l |
max_upload_size | |
id | 1418201 |
size | 39,236 |
Linked lists that supports arbitrary removal in constant time.
It is based on the linked list implementation in Rust-for-Linux.
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);