pub enum VisitStatus {
Continue,
Stop,
ExitEarly,
}
pub trait Visitor<T, BV> {
fn visit(&mut self, bv: &BV, data: Option<&T>) -> VisitStatus;
}
pub trait SimultaneousVisitor<T, BV> {
fn visit(
&mut self,
left_bv: &BV,
left_data: Option<&T>,
right_bv: &BV,
right_data: Option<&T>,
) -> VisitStatus;
}
pub enum BestFirstVisitStatus<N, Res> {
Continue {
cost: N,
result: Option<Res>,
},
Stop,
ExitEarly(Option<Res>),
}
pub trait BestFirstVisitor<N, T, BV> {
type Result;
fn visit(
&mut self,
best_cost_so_far: N,
bv: &BV,
value: Option<&T>,
) -> BestFirstVisitStatus<N, Self::Result>;
}