cultivar/executor/src/sim.rs

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 {}