pumpkin_core/api/outputs/
mod.rs1use self::unsatisfiable::UnsatisfiableUnderAssumptions;
2use crate::Solver;
3pub use crate::basic_types::ProblemSolution;
4use crate::basic_types::Solution;
5pub use crate::basic_types::SolutionReference;
6use crate::conflict_resolving::ConflictResolver;
7pub mod solution_iterator;
8pub mod unsatisfiable;
9use crate::branching::Brancher;
10#[cfg(doc)]
11use crate::termination::TerminationCondition;
12
13#[derive(Debug)]
15pub enum SatisfactionResult<'solver, 'brancher, 'resolver, B: Brancher, R: ConflictResolver> {
16 Satisfiable(Satisfiable<'solver, 'brancher, 'resolver, B, R>),
22 Unsatisfiable(&'solver Solver, &'brancher B, &'resolver R),
24 Unknown(&'solver Solver, &'brancher B, &'resolver R),
27}
28
29#[derive(Debug)]
31pub enum SatisfactionResultUnderAssumptions<
32 'solver,
33 'brancher,
34 'resolver,
35 B: Brancher,
36 R: ConflictResolver,
37> {
38 Satisfiable(Satisfiable<'solver, 'brancher, 'resolver, B, R>),
40 UnsatisfiableUnderAssumptions(UnsatisfiableUnderAssumptions<'solver, 'brancher, B>),
44 Unsatisfiable(&'solver Solver),
46 Unknown(&'solver Solver),
49}
50
51#[derive(Debug)]
53pub enum OptimisationResult<Stop> {
54 Optimal(Solution),
57 Satisfiable(Solution),
60 Stopped(Solution, Stop),
62 Unsatisfiable,
64 Unknown,
67}
68
69#[derive(Debug)]
70pub struct Satisfiable<'solver, 'brancher, 'resolver, B: Brancher, R: ConflictResolver> {
71 solver: &'solver mut Solver,
72 brancher: &'brancher mut B,
73 resolver: &'resolver mut R,
74}
75
76impl<'solver, 'brancher, 'resolver, B: Brancher, R: ConflictResolver>
77 Satisfiable<'solver, 'brancher, 'resolver, B, R>
78{
79 pub(crate) fn new(
80 solver: &'solver mut Solver,
81 brancher: &'brancher mut B,
82 resolver: &'resolver mut R,
83 ) -> Self {
84 Satisfiable {
85 solver,
86 brancher,
87 resolver,
88 }
89 }
90
91 pub fn solution(&self) -> SolutionReference<'_> {
93 self.solver.get_solution_reference()
94 }
95
96 pub fn solver(&self) -> &Solver {
98 self.solver
99 }
100
101 pub fn brancher(&self) -> &B {
103 self.brancher
104 }
105
106 pub fn conflict_resolver(&self) -> &R {
108 self.resolver
109 }
110}
111
112impl<B: Brancher, R: ConflictResolver> Drop for Satisfiable<'_, '_, '_, B, R> {
113 fn drop(&mut self) {
114 self.solver
115 .satisfaction_solver
116 .restore_state_at_root(self.brancher);
117 }
118}