49 lines
996 B
Rust
49 lines
996 B
Rust
use cultivar_common::prelude::*;
|
|
|
|
use dashmap::DashMap;
|
|
|
|
pub struct Sims {
|
|
pub sims: DashMap<SimId, Sim>,
|
|
pub tokens: DashMap<SimToken, SimId>,
|
|
}
|
|
|
|
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
|
pub struct SimId([u8; 16]);
|
|
|
|
impl Sims {
|
|
pub fn new() -> Self {
|
|
Self {
|
|
sims: DashMap::new(),
|
|
tokens: DashMap::new(),
|
|
}
|
|
}
|
|
|
|
pub fn new_sim(&self, sim: Sim) -> SimId {
|
|
let sim_id = SimId([0; 16]);
|
|
self.sims.insert(sim_id, sim);
|
|
sim_id
|
|
}
|
|
|
|
pub fn new_token(&self, sim_id: SimId) -> SimToken {
|
|
let sim_token = SimToken([0; 16]);
|
|
self.tokens.insert(sim_token, sim_id);
|
|
sim_token
|
|
}
|
|
|
|
pub fn get_sim_from_token<'a>(
|
|
&'a self,
|
|
sim_token: &SimToken,
|
|
) -> Option<dashmap::mapref::one::Ref<'a, SimId, Sim>> {
|
|
self.sims.get(&*self.tokens.get(sim_token)?)
|
|
}
|
|
|
|
pub fn get_sim_from_token_mut<'a>(
|
|
&'a self,
|
|
sim_token: &SimToken,
|
|
) -> Option<dashmap::mapref::one::RefMut<'a, SimId, Sim>> {
|
|
self.sims.get_mut(&*self.tokens.get(sim_token)?)
|
|
}
|
|
}
|
|
|
|
pub struct CallContext {}
|