pub struct ClosurePhaseFactory<S, F>{ /* private fields */ }Expand description
A phase factory using a closure.
This factory uses a closure to create phase instances. This is useful when the phase creation requires complex logic or external dependencies that cannot be easily cloned.
§Example
use solverforge_solver::manager::{ClosurePhaseFactory, SolverPhaseFactory};
use solverforge_solver::phase::Phase;
use solverforge_solver::scope::SolverScope;
use solverforge_core::domain::PlanningSolution;
use solverforge_core::score::SimpleScore;
#[derive(Clone)]
struct MySolution { score: Option<SimpleScore> }
impl PlanningSolution for MySolution {
type Score = SimpleScore;
fn score(&self) -> Option<Self::Score> { self.score }
fn set_score(&mut self, score: Option<Self::Score>) { self.score = score; }
}
#[derive(Debug)]
struct DynamicPhase { step_count: u32 }
impl Phase<MySolution> for DynamicPhase {
fn solve(&mut self, _: &mut SolverScope<MySolution>) {}
fn phase_type_name(&self) -> &'static str { "DynamicPhase" }
}
// Factory creates fresh instances with reset state
let factory = ClosurePhaseFactory::<MySolution, _>::new(|| {
Box::new(DynamicPhase { step_count: 0 })
});
let phase = factory.create_phase();
assert_eq!(phase.phase_type_name(), "DynamicPhase");Implementations§
Source§impl<S, F> ClosurePhaseFactory<S, F>
impl<S, F> ClosurePhaseFactory<S, F>
Sourcepub fn new(factory: F) -> Self
pub fn new(factory: F) -> Self
Creates a new factory from a closure.
The closure will be called each time a new phase is needed.
§Example
use solverforge_solver::manager::ClosurePhaseFactory;
use solverforge_solver::phase::Phase;
use solverforge_solver::scope::SolverScope;
use solverforge_core::domain::PlanningSolution;
use solverforge_core::score::SimpleScore;
#[derive(Debug)]
struct P;
impl Phase<S> for P {
fn solve(&mut self, _: &mut SolverScope<S>) {}
fn phase_type_name(&self) -> &'static str { "P" }
}
let factory = ClosurePhaseFactory::<S, _>::new(|| Box::new(P));Trait Implementations§
Source§impl<S, F> SolverPhaseFactory<S> for ClosurePhaseFactory<S, F>
impl<S, F> SolverPhaseFactory<S> for ClosurePhaseFactory<S, F>
Auto Trait Implementations§
impl<S, F> Freeze for ClosurePhaseFactory<S, F>where
F: Freeze,
impl<S, F> RefUnwindSafe for ClosurePhaseFactory<S, F>where
F: RefUnwindSafe,
S: RefUnwindSafe,
impl<S, F> Send for ClosurePhaseFactory<S, F>
impl<S, F> Sync for ClosurePhaseFactory<S, F>
impl<S, F> Unpin for ClosurePhaseFactory<S, F>
impl<S, F> UnwindSafe for ClosurePhaseFactory<S, F>where
F: UnwindSafe,
S: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more