use crate::{db::ClauseKey, structures::literal::CLiteral};
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum ErrorKind {
Analysis(AnalysisError),
Build(BuildError),
ClauseDB(ClauseDBError),
AtomDB(AtomDBError),
Parse(ParseError),
Preprocessing(PreprocessingError),
ConsequenceQueue(ConsequenceQueueError),
BCP(BCPError),
ResolutionBuffer(ResolutionBufferError),
State(StateError),
Backjump,
InvalidState,
ValuationConflict,
SpecificValuationConflict(CLiteral),
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum AnalysisError {
EmptyResolution,
NoAssertion,
FailedStoppingCriteria,
}
impl From<AnalysisError> for ErrorKind {
fn from(e: AnalysisError) -> Self {
ErrorKind::Analysis(e)
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum AtomDBError {
AtomsExhausted,
}
impl From<AtomDBError> for ErrorKind {
fn from(e: AtomDBError) -> Self {
ErrorKind::AtomDB(e)
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum BCPError {
Conflict(ClauseKey),
CorruptWatch,
}
impl From<BCPError> for ErrorKind {
fn from(e: BCPError) -> Self {
ErrorKind::BCP(e)
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum BuildError {
Unsatisfiable,
}
impl From<BuildError> for ErrorKind {
fn from(e: BuildError) -> Self {
ErrorKind::Build(e)
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum ClauseDBError {
GetOriginalUnitKey,
TransferUnit,
TransferBinary,
CorruptList,
Missing,
InvalidKeyToken,
InvalidKeyIndex,
EmptyClause,
StorageExhausted,
DecisionMade,
}
impl From<ClauseDBError> for ErrorKind {
fn from(e: ClauseDBError) -> Self {
ErrorKind::ClauseDB(e)
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum ConsequenceQueueError {
Conflict,
}
impl From<ConsequenceQueueError> for ErrorKind {
fn from(e: ConsequenceQueueError) -> Self {
ErrorKind::ConsequenceQueue(e)
}
}
pub enum FRATError {
CorruptClauseBuffer,
CorruptResolutionQ,
TransfersAreTodo,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum ParseError {
ProblemSpecification,
Line(usize),
MisplacedProblem(usize),
Negation,
NoFile,
Empty,
MissingDelimiter,
}
impl From<ParseError> for ErrorKind {
fn from(e: ParseError) -> Self {
ErrorKind::Parse(e)
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum PreprocessingError {
Unsatisfiable,
}
impl From<PreprocessingError> for ErrorKind {
fn from(e: PreprocessingError) -> Self {
ErrorKind::Preprocessing(e)
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum ResolutionBufferError {
LostClause,
Subsumption(SubsumptionError),
SatisfiedClause,
MissingClause,
Exhausted,
}
impl From<ResolutionBufferError> for ErrorKind {
fn from(e: ResolutionBufferError) -> Self {
ErrorKind::ResolutionBuffer(e)
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum StateError {
SolveInProgress,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum SubsumptionError {
ShortClause,
NoPivot,
WatchError,
ClauseDB,
}
impl From<SubsumptionError> for ResolutionBufferError {
fn from(e: SubsumptionError) -> Self {
ResolutionBufferError::Subsumption(e)
}
}