#![allow(clippy::module_name_repetitions)]
use super::decode_error::DecodeError;
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
pub enum FpuFlagsAccess {
Cleared,
Set,
Modified,
Undefined,
}
#[doc(hidden)]
impl FpuFlagsAccess {
pub(crate) fn from_raw(value: u8) -> Result<Self, DecodeError> {
let value = u32::from(value);
match value {
ffi::ND_FPU_FLAG_SET_0 => Ok(FpuFlagsAccess::Cleared),
ffi::ND_FPU_FLAG_SET_1 => Ok(FpuFlagsAccess::Set),
ffi::ND_FPU_FLAG_MODIFIED => Ok(FpuFlagsAccess::Modified),
ffi::ND_FPU_FLAG_UNDEFINED => Ok(FpuFlagsAccess::Undefined),
_ => Err(DecodeError::InternalError(value.into())),
}
}
}
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
pub struct FpuFlags {
pub c0: FpuFlagsAccess,
pub c1: FpuFlagsAccess,
pub c2: FpuFlagsAccess,
pub c3: FpuFlagsAccess,
}
#[doc(hidden)]
impl FpuFlags {
pub(crate) fn from_raw(flags: ffi::ND_FPU_FLAGS) -> Result<Self, DecodeError> {
Ok(Self {
c0: FpuFlagsAccess::from_raw(flags.C0())?,
c1: FpuFlagsAccess::from_raw(flags.C1())?,
c2: FpuFlagsAccess::from_raw(flags.C2())?,
c3: FpuFlagsAccess::from_raw(flags.C3())?,
})
}
}