fips_md/codegen/
context.rs1use std::{collections::HashMap, sync::{self, Arc, RwLock, mpsc}};
4use anyhow::Result;
5use rand_xoshiro::Xoshiro256PlusPlus;
6
7use crate::runtime::{InteractionID, ParticleBorrowMut, ParticleID, Runtime};
8
9use super::{CallbackMessage, analysis::BarrierID, analysis::{SimulationGraph, SymbolTable}, neighbors::NeighborList, util};
10
11pub struct GlobalContext {
14 pub(crate) runtime: Runtime,
16 pub(crate) global_symbols: SymbolTable<()>,
18 pub(crate) simgraph: SimulationGraph,
20}
21
22#[derive(Clone)]
25pub(crate) struct ExecutorContext {
26 pub(crate) barriers: HashMap<BarrierID, Arc<sync::Barrier>>,
28 pub(crate) step_barrier: Arc<sync::Barrier>,
30 pub(crate) step_counter: Arc<RwLock<usize>>,
32 pub(crate) call_end_barrier: Arc<sync::Barrier>,
35 pub(crate) call_sender: mpsc::Sender<CallbackMessage>,
37 pub(crate) neighbor_lists: HashMap<InteractionID, Arc<RwLock<NeighborList>>>,
39 pub(crate) global_context: Arc<GlobalContext>
41}
42
43pub(crate) struct ThreadContext {
45 pub(crate) particle_id: ParticleID,
47 pub(crate) particle_range: util::IndexRange,
49 pub(crate) rng: Xoshiro256PlusPlus,
51 pub(crate) normal_dist: rand_distr::Normal<f64>,
53 pub(crate) executor_context: ExecutorContext,
55}
56
57impl GlobalContext {
58 pub fn borrow_particle_mut(&self, particle_name: &str) -> Result<ParticleBorrowMut> {
60 self.runtime.borrow_particle_mut(particle_name)
61 }
62}