contained_core/tasks/
registry.rs1use super::Task;
7use crate::Shared;
8use std::collections::HashMap;
9use std::sync::{Arc, Mutex};
10
11#[derive(Clone, Debug, Default)]
12pub struct TaskRegistry {
13 tasks: Shared<HashMap<Task, usize>>,
14}
15
16impl TaskRegistry {
17 pub fn new() -> Self {
18 Self {
19 tasks: Arc::new(Mutex::new(HashMap::new())),
20 }
21 }
22 pub fn register(&mut self, task: Task) -> usize {
23 let mut tasks = self.tasks.lock().unwrap();
24 let count = if let Some(cnt) = tasks.get_mut(&task) {
25 *cnt += 1;
26 *cnt
27 } else {
28 1
29 };
30 tasks.insert(task, count);
31 count
32 }
33 pub fn running(&self) -> HashMap<Task, usize> {
34 self.tasks.lock().unwrap().clone()
35 }
36}