use std::collections::HashSet;
use super::GenericContext;
use crate::{
db::{clause::db_clause::dbClause, ClauseKey},
structures::{clause::ClauseSource, literal::CLiteral},
};
pub type CallbackOnPremises = dyn FnMut(&HashSet<ClauseKey>);
pub type CallbackOnClauseSource = dyn FnMut(&dbClause, &ClauseSource);
pub type CallbackOnClause = dyn FnMut(&dbClause);
pub type CallbackOnLiteral = dyn FnMut(CLiteral);
pub type CallbackTerminate = dyn FnMut() -> bool;
impl<R: rand::Rng + std::default::Default> GenericContext<R> {}
impl<R: rand::Rng + std::default::Default> GenericContext<R> {
pub fn set_callback_original(&mut self, callback: Box<CallbackOnClauseSource>) {
self.clause_db.set_callback_original(callback);
}
pub fn set_callback_addition(&mut self, callback: Box<CallbackOnClauseSource>) {
self.clause_db.set_callback_addition(callback);
}
pub fn set_callback_fixed(&mut self, callback: Box<CallbackOnLiteral>) {
self.clause_db.set_callback_fixed(callback);
}
pub fn set_callback_delete(&mut self, callback: Box<CallbackOnClause>) {
self.clause_db.set_callback_delete(callback);
}
pub fn set_callback_unsatisfiable(&mut self, callback: Box<CallbackOnClause>) {
self.clause_db.set_callback_unsatisfiable(callback);
}
pub fn set_callback_terminate_solve(&mut self, callback: Box<CallbackTerminate>) {
self.callback_terminate = Some(callback);
}
pub fn check_callback_terminate_solve(&mut self) -> bool {
if let Some(callback) = &mut self.callback_terminate {
callback()
} else {
false
}
}
}