leaklist
A simple, concurrent, lock-free, singly-linked list. Only supports prepending items, and will leak an allocation for each new element.
This type of list can be useful for setting up a chain of objects that only need to be initialized once and will live for the duration of the program.
Example
let list: = new;
let node1 = list.push_front;
let node2 = list.push_front;
println!;
println!;
scope;
println!;
Output may be:
node1: Node { val: 1, next: None }
node2: Node { val: 2, next: Some(Node { val: 1, next: None }) }
node3: Node { val: 3, next: Some(Node { val: 2, next: Some(Node { val: 1, next: None }) }) }
node4: Node { val: 4, next: Some(Node { val: 3, next: Some(Node { val: 2, next: Some(Node { val: 1, next: None }) }) }) }
list: [4, 3, 2, 1]
Or:
node1: Node { val: 1, next: None }
node2: Node { val: 2, next: Some(Node { val: 1, next: None }) }
node4: Node { val: 4, next: Some(Node { val: 2, next: Some(Node { val: 1, next: None }) }) }
node3: Node { val: 3, next: Some(Node { val: 4, next: Some(Node { val: 2, next: Some(Node { val: 1, next: None }) }) }) }
list: [3, 4, 2, 1]
License
This project is dual-licensed under the MIT and Apache-2.0 licenses.