Generational arena inspired by generational-arena, slotmap, and slab.
Thunderdome should probably not (yet) be used in real projects. It is severely under-tested and contains a small amount of unsafe code.
```rust let mut arena = Arena::new();
let foo = arena.insert("Foo"); let bar = arena.insert("Bar");
asserteq!(arena[foo], "Foo"); asserteq!(arena[bar], "Bar");
arena[bar] = "Replaced"; assert_eq!(arena[bar], "Replaced");
let foovalue = arena.remove(foo); asserteq!(foo_value, Some("Foo"));
// The slot previously used by foo will be reused for baz let baz = arena.insert("Baz"); assert_eq!(arena[baz], "Baz");
// foo is no longer a valid key assert_eq!(arena.get(foo), None); ```
| Feature | Thunderdome | generational-arena | slotmap | slab |
|------------------------------|-------------|--------------------|---------|------|
| Generational Indices | Yes | Yes | Yes | No |
| size_of::<Index>()
| 16 | 16 | 8 | 8 |
| size_of::<Option<Index>>()
| 16 | 24 | 8 | 16 |
| Non-Copy
Values | Yes | Yes | Sorta¹ | Yes |
| no-std support | No | Yes | No | No |
| Serde support | No | Yes | Yes | No |
| Should be used | No | Yes | Yes | Yes |
1.44.0-x86_64-pc-windows-msvc
SlotMap
and HopSlotMap
require values to be Copy
on stable
Rust versions. slotmap's DenseSlotMap
type supports non-Copy
types on
stable, but has different performance trade-offs.Licensed under either of
at your option.
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.