use std::fmt;
use super::queue_kinds::{generic::AbstractStepsQueue, q_bfs::BfsStepsQueue, q_dfs::DfsStepsQueue, q_hcs::HcsStepsQueue};
pub enum QueueSearchStrategy {
BFS, DFS, HCS }
impl fmt::Display for QueueSearchStrategy {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
QueueSearchStrategy::BFS => {
write!(f,"BreadthFirstSearch")
},
QueueSearchStrategy::DFS => {
write!(f,"DepthFirstSearch")
},
QueueSearchStrategy::HCS => {
write!(f,"HighCoverageSearch")
}
}
}
}
impl QueueSearchStrategy {
pub(in crate::queue) fn create_process_queue<DomainSpecificStep : 'static>(&self) -> Box< dyn AbstractStepsQueue<DomainSpecificStep> > {
match self {
QueueSearchStrategy::BFS => {
Box::new(BfsStepsQueue::<DomainSpecificStep>::new() )
},
QueueSearchStrategy::DFS => {
Box::new(DfsStepsQueue::<DomainSpecificStep>::new() )
},
QueueSearchStrategy::HCS => {
Box::new(HcsStepsQueue::<DomainSpecificStep>::new() )
}
}
}
}