comet/
task_scheduler.rs

1use parking_lot::Mutex;
2
3use crate::visitor::Visitor;
4
5pub trait MarkingTask {
6    fn execute(&mut self, visitor: &mut Visitor);
7}
8
9pub struct TaskScheduler(pub(crate) Mutex<Vec<Box<dyn MarkingTask>>>);
10impl TaskScheduler {
11    pub fn new() -> Self {
12        Self(Mutex::new(vec![]))
13    }
14    pub fn add(&self, task: impl MarkingTask + 'static) {
15        self.0.lock().push(Box::new(task));
16    }
17}