use core::ffi::c_char;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(u8)]
pub enum UPLO {
Upper = b'U',
Lower = b'L',
}
impl UPLO {
pub fn t(self) -> Self {
match self {
UPLO::Upper => UPLO::Lower,
UPLO::Lower => UPLO::Upper,
}
}
pub fn as_ptr(&self) -> *const c_char {
self as *const UPLO as *const c_char
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(u8)]
pub enum Transpose {
No = b'N',
Transpose = b'T',
Hermite = b'C',
}
impl Transpose {
pub fn as_ptr(&self) -> *const c_char {
self as *const Transpose as *const c_char
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(u8)]
pub enum NormType {
One = b'O',
Infinity = b'I',
Frobenius = b'F',
}
impl NormType {
pub fn transpose(self) -> Self {
match self {
NormType::One => NormType::Infinity,
NormType::Infinity => NormType::One,
NormType::Frobenius => NormType::Frobenius,
}
}
pub fn as_ptr(&self) -> *const c_char {
self as *const NormType as *const c_char
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(u8)]
pub enum JobEv {
All = b'V',
None = b'N',
}
impl JobEv {
pub fn is_calc(&self) -> bool {
match self {
JobEv::All => true,
JobEv::None => false,
}
}
pub fn then<T, F: FnOnce() -> T>(&self, f: F) -> Option<T> {
if self.is_calc() {
Some(f())
} else {
None
}
}
pub fn as_ptr(&self) -> *const c_char {
self as *const JobEv as *const c_char
}
}
#[cfg_attr(doc, katexit::katexit)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(u8)]
pub enum JobSvd {
All = b'A',
Some = b'S',
None = b'N',
}
impl JobSvd {
pub fn from_bool(calc_uv: bool) -> Self {
if calc_uv {
JobSvd::All
} else {
JobSvd::None
}
}
pub fn as_ptr(&self) -> *const c_char {
self as *const JobSvd as *const c_char
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(u8)]
pub enum Diag {
Unit = b'U',
NonUnit = b'N',
}
impl Diag {
pub fn as_ptr(&self) -> *const c_char {
self as *const Diag as *const c_char
}
}