use std::error::Error;
use std::fmt;
use std::sync::Arc;
use std::sync::atomic::AtomicBool;
pub type AbortSignal = Arc<AtomicBool>;
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub enum Problem {
ParseError,
SqrtNegative,
DivideByZero,
NotFound,
InsufficientParameters,
NotANumber,
Infinity,
BadFraction,
BadDecimal,
BadInteger,
OutOfRange,
NotAnInteger,
Exhausted,
UnknownZero,
}
#[cfg(feature = "hyperreal-backend")]
impl From<hyperreal::Problem> for Problem {
fn from(problem: hyperreal::Problem) -> Self {
match problem {
hyperreal::Problem::ParseError => Self::ParseError,
hyperreal::Problem::SqrtNegative => Self::SqrtNegative,
hyperreal::Problem::DivideByZero => Self::DivideByZero,
hyperreal::Problem::NotFound => Self::NotFound,
hyperreal::Problem::InsufficientParameters => Self::InsufficientParameters,
hyperreal::Problem::NotANumber => Self::NotANumber,
hyperreal::Problem::Infinity => Self::Infinity,
hyperreal::Problem::BadFraction => Self::BadFraction,
hyperreal::Problem::BadDecimal => Self::BadDecimal,
hyperreal::Problem::BadInteger => Self::BadInteger,
hyperreal::Problem::OutOfRange => Self::OutOfRange,
hyperreal::Problem::NotAnInteger => Self::NotAnInteger,
hyperreal::Problem::Exhausted => Self::Exhausted,
_ => Self::Exhausted,
}
}
}
impl fmt::Display for Problem {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::Debug::fmt(self, f)
}
}
impl Error for Problem {}
pub type BlasResult<T> = Result<T, Problem>;
pub type CheckedBlasResult<T> = BlasResult<T>;