Expand description
A MultiArrayList
stores a list of a struct.
Experimental: Only a small subset of a the array list API is implemented.
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)
function.
inspired by Zig’s MultiArrayList
.
§Example
#[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);
}
Structs§
- Iter
- An iterator over all elements of the
MultiArrayList
. - IterRef
- A reference to a single element of
T
. - Multi
Array List - A
MultiArrayList
stores a list of a struct. - Slice
- An iterator over all values of a specified field.
- Slice
Mut - An iterator over mutable values of a specified field.