pub struct Storage<T: Clone, U: Into<u32>> {
entities: Vec<T>,
_phantom_data: std::marker::PhantomData<U>,
}
impl<T, U> Storage<T, U>
where T: Clone, U: Into<u32>
{
pub fn new(none: T) -> Storage<T, U> {
Storage {
entities: vec![none],
_phantom_data: std::marker::PhantomData,
}
}
pub fn set(&mut self, entity: U, value: T) {
let id = entity.into() as usize + 1;
if id >= self.entities.len() {
self.entities.resize(id + 1, self.entities[0].clone() );
}
self.entities[id] = value;
}
pub fn get(&mut self, entity: U) -> T {
let id = entity.into() as usize + 1;
if let Some(rtn) = self.entities.get(id) {
rtn.clone()
} else {
self.entities[0].clone()
}
}
}