refactor(autorouter/multilayer_reconfigurer): Process planar autoroute result in separate method

This commit is contained in:
Mikolaj Wielgus 2025-11-04 03:22:46 +01:00
parent 5d41e7d784
commit 2e507b7cab
2 changed files with 28 additions and 14 deletions

View File

@ -74,7 +74,7 @@ impl MultilayerAutorouteReconfigurator {
preconfiguration, preconfiguration,
options, options,
)?, )?,
reconfiguration_trigger: SmaRateReconfigurationTrigger::new(10, 0.5, 0.5), reconfiguration_trigger: SmaRateReconfigurationTrigger::new(4, 0.5, 0.5),
reconfigurer, reconfigurer,
options, options,
}) })
@ -90,10 +90,10 @@ impl MultilayerAutorouteReconfigurator {
self.reconfiguration_trigger = SmaRateReconfigurationTrigger::new(4, 0.5, 0.5); self.reconfiguration_trigger = SmaRateReconfigurationTrigger::new(4, 0.5, 0.5);
loop { loop {
let configuration = match self self.reconfigurer
.reconfigurer .process_planar_result(autorouter, planar_result.clone());
.next_configuration(autorouter, planar_result.clone())
{ let configuration = match self.reconfigurer.next_configuration(autorouter) {
ControlFlow::Continue(()) => { ControlFlow::Continue(()) => {
return Ok(ControlFlow::Continue(ReconfiguratorStatus::Running( return Ok(ControlFlow::Continue(ReconfiguratorStatus::Running(
ReconfiguratorStatus::Reconfigured(planar_result?), ReconfiguratorStatus::Reconfigured(planar_result?),

View File

@ -16,10 +16,15 @@ use crate::autorouter::{
#[enum_dispatch] #[enum_dispatch]
pub trait MakeNextMultilayerAutorouteConfiguration { pub trait MakeNextMultilayerAutorouteConfiguration {
fn next_configuration( fn process_planar_result(
&mut self, &mut self,
autorouter: &Autorouter<impl AccessMesadata>, autorouter: &Autorouter<impl AccessMesadata>,
planar_result: Result<PlanarAutorouteConfigurationStatus, AutorouterError>, planar_result: Result<PlanarAutorouteConfigurationStatus, AutorouterError>,
);
fn next_configuration(
&mut self,
autorouter: &Autorouter<impl AccessMesadata>,
) -> ControlFlow<Option<MultilayerAutorouteConfiguration>>; ) -> ControlFlow<Option<MultilayerAutorouteConfiguration>>;
} }
@ -53,15 +58,15 @@ impl IncrementFailedRatlineLayersMultilayerAutorouteReconfigurer {
impl MakeNextMultilayerAutorouteConfiguration impl MakeNextMultilayerAutorouteConfiguration
for IncrementFailedRatlineLayersMultilayerAutorouteReconfigurer for IncrementFailedRatlineLayersMultilayerAutorouteReconfigurer
{ {
fn next_configuration( fn process_planar_result(
&mut self, &mut self,
autorouter: &Autorouter<impl AccessMesadata>, _autorouter: &Autorouter<impl AccessMesadata>,
planar_result: Result<PlanarAutorouteConfigurationStatus, AutorouterError>, planar_result: Result<PlanarAutorouteConfigurationStatus, AutorouterError>,
) -> ControlFlow<Option<MultilayerAutorouteConfiguration>> { ) {
self.planar_autoroute_reconfiguration_count += 1; self.planar_autoroute_reconfiguration_count += 1;
let Ok(planar_status) = planar_result else { let Ok(planar_status) = planar_result else {
return ControlFlow::Break(None); return;
}; };
self.maybe_last_planar_status = Some(planar_status.clone()); self.maybe_last_planar_status = Some(planar_status.clone());
@ -73,7 +78,12 @@ impl MakeNextMultilayerAutorouteConfiguration
{ {
self.maybe_best_planar_status = Some(planar_status.clone()); self.maybe_best_planar_status = Some(planar_status.clone());
} }
}
fn next_configuration(
&mut self,
autorouter: &Autorouter<impl AccessMesadata>,
) -> ControlFlow<Option<MultilayerAutorouteConfiguration>> {
if self.planar_autoroute_reconfiguration_count < 10 { if self.planar_autoroute_reconfiguration_count < 10 {
return ControlFlow::Continue(()); return ControlFlow::Continue(());
} }
@ -82,17 +92,21 @@ impl MakeNextMultilayerAutorouteConfiguration
let mut new_anterouter_plan = self.last_configuration.plan.clone(); let mut new_anterouter_plan = self.last_configuration.plan.clone();
let Some(ref last_planar_status) = self.maybe_last_planar_status else {
return ControlFlow::Break(None);
};
if let Some(ref best_planar_status) = self.maybe_best_planar_status { if let Some(ref best_planar_status) = self.maybe_best_planar_status {
for ratline_index in for ratline_index in best_planar_status.costs.lengths.len()
best_planar_status.costs.lengths.len()..planar_status.configuration.ratlines.len() ..last_planar_status.configuration.ratlines.len()
{ {
*new_anterouter_plan *new_anterouter_plan
.layer_map .layer_map
.get_mut(&planar_status.configuration.ratlines[ratline_index]) .get_mut(&last_planar_status.configuration.ratlines[ratline_index])
.unwrap() += 1; .unwrap() += 1;
*new_anterouter_plan *new_anterouter_plan
.layer_map .layer_map
.get_mut(&planar_status.configuration.ratlines[ratline_index]) .get_mut(&last_planar_status.configuration.ratlines[ratline_index])
.unwrap() %= autorouter.board().layout().drawing().layer_count(); .unwrap() %= autorouter.board().layout().drawing().layer_count();
} }
} }