Skip to main content

wowlab_engine_domain/pool/
index.rs

1use std::hash::Hash;
2
3use wowlab_types::sim::FastMap;
4
5#[derive(Clone, Debug)]
6pub struct PoolIndex<K, M> {
7    members: FastMap<K, Vec<M>>,
8}
9
10impl<K, M> PoolIndex<K, M>
11where
12    K: Eq + Hash,
13{
14    #[must_use]
15    pub fn new() -> Self {
16        Self::default()
17    }
18
19    pub fn register(&mut self, key: K, member: M) {
20        self.members.entry(key).or_default().push(member);
21    }
22
23    pub fn members(&self, key: &K) -> &[M] {
24        self.members.get(key).map_or(&[], Vec::as_slice)
25    }
26
27    pub fn owner(&self, key: &K) -> Option<&M> {
28        self.members(key).first()
29    }
30}
31
32impl<K, M> Default for PoolIndex<K, M> {
33    fn default() -> Self {
34        Self {
35            members: FastMap::default(),
36        }
37    }
38}
39
40#[cfg(test)]
41#[path = "index/tests.rs"]
42mod tests;