1 unstable release
Uses new Rust 2024
new 0.1.0 | May 9, 2025 |
---|
#11 in #repr
19KB
383 lines
MultiArrayList
Experimental: Only a small subset of a the array list API is implemented.
A MultiArrayList
stores a list of a struct.
Instead of storing a single list of items,
MultiArrayList
stores separate lists for each field of the struct. This allows for memory savings if the struct has padding, and also improves cache usage if only some fields are needed for a computation.
The primary API for accessing fields is the [items(name)
][MultiArrayList::items()
] function.
inspired by Zig's MultiArrayList
.
Example
use multi_array_list::MultiArrayList;
use facet::Facet;
#[derive(Facet, Clone)]
struct Pizza {
radius: u32,
toppings: Vec<Topping>,
}
#[derive(Facet, Clone, Copy)]
#[repr(u8)]
enum Topping {
Tomato,
Mozzarella,
Anchovies,
}
let mut order = MultiArrayList::<Pizza>::new();
let margherita = Pizza {
radius: 12,
toppings: vec![Topping::Tomato],
};
order.push(margherita);
let napoli = Pizza {
radius: 12,
toppings: vec![Topping::Tomato, Topping::Anchovies],
};
order.push(napoli);
for topping in order.items_mut::<Vec<Topping>>("toppings") {
topping.push(Topping::Mozzarella);
}
License
MIT. See LICENSE.
Dependencies
~1.5MB
~24K SLoC