use std::ops::ControlFlow;
use derive_getters::Getters;
use crate::{
AutoplacerSchedule, autoplacer::Autoplacer, board::Board, selections::ComponentSelection,
};
#[derive(Getters)]
pub struct Jostler {
autoplacer: Autoplacer,
}
impl Jostler {
pub fn new(board: &Board, selection: ComponentSelection, schedule: AutoplacerSchedule) -> Self {
let infringees_selection = board.components_infringees(selection.clone());
Self {
autoplacer: Autoplacer::new(board, infringees_selection, schedule),
}
}
pub fn step(&mut self, board: &mut Board) -> ControlFlow<()> {
crate::profile_function!();
self.autoplacer.step(board)
}
pub fn abort(&mut self, board: &mut Board) {
crate::profile_function!();
self.autoplacer.abort(board);
}
}