mirror of https://codeberg.org/topola/topola.git
refactor(router/thetastar): Factor out returning status
This commit is contained in:
parent
fca8e44269
commit
6cb01dbb2a
|
|
@ -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>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue