lento 0.1.1

Cross platform ui framework
use std::collections::HashMap;

pub struct IdHashMap<T> {
    next_id: u32,
    hash_map: HashMap<u32, T>,
}

impl<T> IdHashMap<T> {
    pub fn new() -> Self {
        Self {
            next_id: 1,
            hash_map: HashMap::new(),
        }
    }

    pub fn insert(&mut self, value: T) -> u32 {
        let id = self.next_id;
        self.next_id += 1;
        self.hash_map.insert(id, value);
        id
    }

    pub fn get(&self, id: &u32) -> Option<&T> {
        self.hash_map.get(id)
    }

    pub fn remove(&mut self, id: u32) -> Option<T> {
        self.hash_map.remove(&id)
    }

    pub fn for_each<F: Fn(u32, &T)>(&self, mut f: F) {
        self.hash_map.iter().for_each(|(id, value)| {
            f(*id, value);
        })
    }

    pub fn for_each_mut<F: Fn(u32, &mut T)>(&mut self, mut f: F) {
        self.hash_map.iter_mut().for_each(|(id, value)| {
            f(*id, value);
        })
    }

}