refactor(router/thetastar): Factor out returning status

This commit is contained in:
Mikolaj Wielgus 2025-08-23 15:27:54 +02:00
parent fca8e44269
commit 6cb01dbb2a
1 changed files with 26 additions and 33 deletions

View File

@ -278,15 +278,13 @@ where
return Err(ThetastarError::NotFound); return Err(ThetastarError::NotFound);
}; };
let Ok(maybe_result) = if let Ok(maybe_result) =
strategy.visit_navnode(&self.graph, navnode, &self.path_tracker) strategy.visit_navnode(&self.graph, navnode, &self.path_tracker)
else { {
return Ok(ControlFlow::Continue(self.state));
};
if let Some(result) = maybe_result { if let Some(result) = maybe_result {
let path = self.path_tracker.reconstruct_path_to(navnode); let path = self.path_tracker.reconstruct_path_to(navnode);
let cost = self.scores[&navnode]; let cost = self.scores[&navnode];
return Ok(ControlFlow::Break((cost, path, result))); return Ok(ControlFlow::Break((cost, path, result)));
} }
@ -307,7 +305,7 @@ where
self.edge_ids = self.graph.edges(navnode).map(|edge| edge.id()).collect(); self.edge_ids = self.graph.edges(navnode).map(|edge| edge.id()).collect();
self.state = ThetastarState::VisitFrontierNavedge(navnode); self.state = ThetastarState::VisitFrontierNavedge(navnode);
Ok(ControlFlow::Continue(self.state)) }
} }
ThetastarState::VisitFrontierNavedge(visited_navnode) => { ThetastarState::VisitFrontierNavedge(visited_navnode) => {
if let Some(visited_navedge) = self.edge_ids.pop() { if let Some(visited_navedge) = self.edge_ids.pop() {
@ -315,10 +313,8 @@ where
visited_navnode, visited_navnode,
visited_navedge, visited_navedge,
); );
Ok(ControlFlow::Continue(self.state))
} else { } else {
self.state = ThetastarState::Scanning; self.state = ThetastarState::Scanning;
Ok(ControlFlow::Continue(self.state))
} }
} }
ThetastarState::BacktrackAndProbeOnLineOfSight(curr_navnode, visited_navedge) => { ThetastarState::BacktrackAndProbeOnLineOfSight(curr_navnode, visited_navedge) => {
@ -344,7 +340,6 @@ where
parent_navnode, parent_navnode,
visited_navedge, visited_navedge,
); );
Ok(ControlFlow::Continue(self.state))
} }
ControlFlow::Break(Some(los_cost)) => { ControlFlow::Break(Some(los_cost)) => {
let next = probed_navnode; let next = probed_navnode;
@ -377,7 +372,6 @@ where
self.push_to_frontier(next, next_score, parent_navnode, strategy); self.push_to_frontier(next, next_score, parent_navnode, strategy);
self.state = ThetastarState::Probing(curr_navnode); self.state = ThetastarState::Probing(curr_navnode);
Ok(ControlFlow::Continue(self.state))
} }
ControlFlow::Break(None) => { ControlFlow::Break(None) => {
// Come back to initial navnode if drawing failed // Come back to initial navnode if drawing failed
@ -387,19 +381,19 @@ where
initial_source_navnode, initial_source_navnode,
&self.path_tracker, &self.path_tracker,
); );
self.state = ThetastarState::ProbeOnNavedge( self.state = ThetastarState::ProbeOnNavedge(
initial_source_navnode, initial_source_navnode,
visited_navedge, visited_navedge,
); );
Ok(ControlFlow::Continue(self.state))
} }
} }
} else { } else {
// Come back from current navnode if drawing from it failed. // Come back from current navnode if drawing from it failed.
strategy.visit_navnode(&self.graph, initial_source_navnode, &self.path_tracker); strategy.visit_navnode(&self.graph, initial_source_navnode, &self.path_tracker);
self.state = self.state =
ThetastarState::ProbeOnNavedge(initial_source_navnode, visited_navedge); ThetastarState::ProbeOnNavedge(initial_source_navnode, visited_navedge);
Ok(ControlFlow::Continue(self.state))
} }
} }
ThetastarState::ProbeOnNavedge(visited_navnode, visited_navedge) => { ThetastarState::ProbeOnNavedge(visited_navnode, visited_navedge) => {
@ -434,20 +428,19 @@ where
self.push_to_frontier(next, next_score, visited_navnode, strategy); self.push_to_frontier(next, next_score, visited_navnode, strategy);
self.state = ThetastarState::Probing(visited_navnode); self.state = ThetastarState::Probing(visited_navnode);
Ok(ControlFlow::Continue(self.state))
} else { } else {
self.state = ThetastarState::VisitFrontierNavedge(visited_navnode); self.state = ThetastarState::VisitFrontierNavedge(visited_navnode);
Ok(ControlFlow::Continue(self.state))
} }
} }
ThetastarState::Probing(visited_navnode) => { ThetastarState::Probing(visited_navnode) => {
strategy.remove_probe(&self.graph); strategy.remove_probe(&self.graph);
self.state = ThetastarState::VisitFrontierNavedge(visited_navnode); self.state = ThetastarState::VisitFrontierNavedge(visited_navnode);
}
}
Ok(ControlFlow::Continue(self.state)) Ok(ControlFlow::Continue(self.state))
} }
}
}
} }
impl<G, K> EstimateProgress for ThetastarStepper<G, K> impl<G, K> EstimateProgress for ThetastarStepper<G, K>