use crate::project::requests::TaskRequests;
use crate::task::{FullTask, TaskOrderingKind};
use parking_lot::RwLock;
use petgraph::graph::DiGraph;
use std::sync::Arc;
#[derive(Debug, Clone)]
pub struct ExecutionGraph {
graph: Arc<RwLock<DiGraph<SharedAnyTask, TaskOrderingKind>>>,
requested_tasks: Arc<TaskRequests>,
}
impl ExecutionGraph {
pub fn new(
graph: DiGraph<SharedAnyTask, TaskOrderingKind>,
requested_tasks: TaskRequests,
) -> Self {
Self {
graph: Arc::new(RwLock::new(graph)),
requested_tasks: Arc::new(requested_tasks),
}
}
pub fn requested_tasks(&self) -> &Arc<TaskRequests> {
&self.requested_tasks
}
pub fn graph(&self) -> &Arc<RwLock<DiGraph<SharedAnyTask, TaskOrderingKind>>> {
&self.graph
}
}
pub type SharedAnyTask = Arc<RwLock<Box<dyn FullTask>>>;