contained_core/tasks/
registry.rs

1/*
2    Appellation: registry <tasks>
3    Contrib: FL03 <jo3mccain@icloud.com>
4    Description: ... summary ...
5*/
6use 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}