Crate multi_array_list

Source
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.
MultiArrayList
A MultiArrayList stores a list of a struct.
Slice
An iterator over all values of a specified field.
SliceMut
An iterator over mutable values of a specified field.