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}