rustraight 0.5.2

A simple 2D game library for Rust, inspired by DXLib
// registry.rs — ハンドル(u32) → データ の汎用登録テーブル。
// graphics::ImageStore / text::TextState / sound::AudioState.sounds がそれぞれ
// 手書きしていた HashMap<u32,T> + next_id パターンを共通化する。

use std::collections::HashMap;

pub(crate) struct HandleStore<T> {
    items:   HashMap<u32, T>,
    next_id: u32,
}

impl<T> Default for HandleStore<T> {
    fn default() -> Self {
        Self { items: HashMap::new(), next_id: 1 }
    }
}

impl<T> HandleStore<T> {
    pub(crate) fn insert(&mut self, item: T) -> u32 {
        let id = self.next_id;
        self.items.insert(id, item);
        self.next_id += 1;
        id
    }

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

    pub(crate) fn get_mut(&mut self, id: u32) -> Option<&mut T> {
        self.items.get_mut(&id)
    }

    pub(crate) fn remove(&mut self, id: u32) {
        self.items.remove(&id);
    }

    pub(crate) fn clear(&mut self) {
        self.items.clear();
    }
}