wowlab_engine_domain/pool/
index.rs1use 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;