3 unstable releases

new 0.2.1 Oct 28, 2024
0.1.1 Oct 25, 2024
0.1.0 Oct 25, 2024

#1996 in Data structures

Download history 189/week @ 2024-10-21

189 downloads per month
Used in retaker

Custom license

6KB
87 lines

VarSet

A container structure for storing Any types in a set.

The container is implemented with a HashMap<TypeId,Box<Any>>, so data in the container is not adyacent(cache misses increase) and to reach a single item there is a two pointer indirection. because of the problems mentioned before performance isn't as fast as it could be.

Goal

The goal is to create a type that can hold a compact and performant container, more specificaly, a kind of Vec<Any>.


struct T {
    number: u32,
    list: Vec<u8>,
}

let mut set = VarSet::new();

set.insert(0u32);
set.insert(String::from("hiii"));
set.insert(T {
    number: 123,
    list: vec![1, 2, 3],
});

*set.get_mut::<u32>().unwrap() = 445;
(*set.get_mut::<String>().unwrap()).push_str(" everyone!!");
(*set.get_mut::<T>().unwrap()).list = vec![3,2,1];
(*set.get_mut::<T>().unwrap()).number = 4325;


No runtime deps