pub struct CloneablePhaseFactory<P> { /* private fields */ }Expand description
A simple phase factory that clones a prototype phase.
This factory stores a prototype phase and clones it for each solve.
Use this when your phase type implements Clone.
§Example
use solverforge_solver::manager::{CloneablePhaseFactory, 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; }
}
// A simple cloneable phase
#[derive(Clone, Debug)]
struct SimplePhase;
impl Phase<MySolution> for SimplePhase {
fn solve(&mut self, _scope: &mut SolverScope<MySolution>) {}
fn phase_type_name(&self) -> &'static str { "SimplePhase" }
}
// Create factory that will clone this phase for each solve
let factory = CloneablePhaseFactory::new(SimplePhase);
let phase = factory.create_phase();
assert_eq!(phase.phase_type_name(), "SimplePhase");Implementations§
Source§impl<P: Clone> CloneablePhaseFactory<P>
impl<P: Clone> CloneablePhaseFactory<P>
Sourcepub fn new(prototype: P) -> Self
pub fn new(prototype: P) -> Self
Creates a new factory from a prototype phase.
The prototype will be cloned each time SolverPhaseFactory::create_phase()
is called.
§Example
use solverforge_solver::manager::CloneablePhaseFactory;
use solverforge_solver::phase::Phase;
use solverforge_solver::scope::SolverScope;
use solverforge_core::domain::PlanningSolution;
use solverforge_core::score::SimpleScore;
#[derive(Clone, Debug)]
struct MyPhase;
impl Phase<S> for MyPhase {
fn solve(&mut self, _: &mut SolverScope<S>) {}
fn phase_type_name(&self) -> &'static str { "MyPhase" }
}
let factory = CloneablePhaseFactory::new(MyPhase);Trait Implementations§
Source§impl<S, P> SolverPhaseFactory<S> for CloneablePhaseFactory<P>
impl<S, P> SolverPhaseFactory<S> for CloneablePhaseFactory<P>
Auto Trait Implementations§
impl<P> Freeze for CloneablePhaseFactory<P>where
P: Freeze,
impl<P> RefUnwindSafe for CloneablePhaseFactory<P>where
P: RefUnwindSafe,
impl<P> Send for CloneablePhaseFactory<P>where
P: Send,
impl<P> Sync for CloneablePhaseFactory<P>where
P: Sync,
impl<P> Unpin for CloneablePhaseFactory<P>where
P: Unpin,
impl<P> UnwindSafe for CloneablePhaseFactory<P>where
P: 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