2022-06-29 13:44:15 +08:00
|
|
|
use crate::services::tasks::task::Task;
|
2022-06-29 16:55:52 +08:00
|
|
|
use crate::services::tasks::TaskId;
|
|
|
|
use std::collections::HashMap;
|
|
|
|
use std::sync::atomic::AtomicU32;
|
|
|
|
use std::sync::atomic::Ordering::SeqCst;
|
2022-06-29 13:44:15 +08:00
|
|
|
|
2022-06-30 23:00:03 +08:00
|
|
|
pub(crate) struct GridTaskStore {
|
2022-06-29 16:55:52 +08:00
|
|
|
tasks: HashMap<TaskId, Task>,
|
|
|
|
task_id_counter: AtomicU32,
|
2022-06-29 13:44:15 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
impl GridTaskStore {
|
|
|
|
pub fn new() -> Self {
|
2022-06-29 16:55:52 +08:00
|
|
|
Self {
|
|
|
|
tasks: HashMap::new(),
|
|
|
|
task_id_counter: AtomicU32::new(0),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-06-30 23:00:03 +08:00
|
|
|
pub(crate) fn insert_task(&mut self, task: Task) {
|
2022-06-29 16:55:52 +08:00
|
|
|
self.tasks.insert(task.id, task);
|
|
|
|
}
|
|
|
|
|
2022-06-30 23:00:03 +08:00
|
|
|
pub(crate) fn remove_task(&mut self, task_id: &TaskId) -> Option<Task> {
|
2022-06-29 16:55:52 +08:00
|
|
|
self.tasks.remove(task_id)
|
|
|
|
}
|
2022-06-29 20:51:53 +08:00
|
|
|
|
2022-06-30 23:00:03 +08:00
|
|
|
pub(crate) fn next_task_id(&self) -> TaskId {
|
2022-06-29 16:55:52 +08:00
|
|
|
let _ = self.task_id_counter.fetch_add(1, SeqCst);
|
|
|
|
self.task_id_counter.load(SeqCst)
|
2022-06-29 13:44:15 +08:00
|
|
|
}
|
|
|
|
}
|