pumpkin_core/optimisation/
solution_callback.rs

1use crate::branching::Brancher;
2use crate::results::SolutionReference;
3use crate::Solver;
4
5pub trait SolutionCallback<B: Brancher> {
6    fn on_solution_callback(&self, solver: &Solver, solution: SolutionReference, brancher: &B);
7}
8
9impl<T: Fn(&Solver, SolutionReference, &B), B: Brancher> SolutionCallback<B> for T {
10    fn on_solution_callback(&self, solver: &Solver, solution: SolutionReference, brancher: &B) {
11        (self)(solver, solution, brancher)
12    }
13}
14
15impl<T: SolutionCallback<B>, B: Brancher> SolutionCallback<B> for Option<T> {
16    fn on_solution_callback(&self, solver: &Solver, solution: SolutionReference, brancher: &B) {
17        if let Some(callback) = self {
18            callback.on_solution_callback(solver, solution, brancher)
19        }
20    }
21}