10 releases (breaking)

0.8.1 Apr 8, 2024
0.8.0 Feb 9, 2024
0.7.1 Jan 15, 2024
0.7.0 Dec 30, 2023
0.1.0 Sep 11, 2021

#842 in Data structures

Download history 38/week @ 2024-08-03 50/week @ 2024-08-10 45/week @ 2024-08-17 77/week @ 2024-08-24 114/week @ 2024-08-31 35/week @ 2024-09-07 27/week @ 2024-09-14 100/week @ 2024-09-21 25/week @ 2024-09-28 35/week @ 2024-10-05 77/week @ 2024-10-12 89/week @ 2024-10-19 121/week @ 2024-10-26 186/week @ 2024-11-02 58/week @ 2024-11-09 38/week @ 2024-11-16

409 downloads per month
Used in 8 crates (2 directly)

MIT/Apache

120KB
3K SLoC

im-lists

Actions Status Coverage Status Crate Status Docs Status

An implementation of a persistent unrolled linked list and vlist. This linked list is implemented with a backing of either Arc or Rc, for single or multi-threaded environments. The single threaded list can be found as a List, and the thread-safe implementation can be found as a SharedList. It is generic over smart pointer - so if you would like to use this with a custom smart pointer (i.e. something like a Gc) then you can do so.

An unrolled linked list is a linked list where each node contains a vector of elements. While the algorithmic complexity is the same as a normal naive linked list, storing elements in vectors improves cache locality and also gives practical speed ups on common operations. A Vlist is like an unrolled linked list, however the vector capacity in each node grows exponentially. This also means that operations that need to iterate over nodes run in O(log(n)) time.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

See CONTRIBUTING.md.

Dependencies