use core::fmt::{Debug, Display, Formatter};
use crate::decimal::Signals;
#[derive(Copy, Clone, Hash, PartialEq, Eq)]
#[repr(transparent)]
pub struct SignalsTraps(Signals);
impl SignalsTraps {
pub const EMPTY: Self = Self(Signals::EMPTY);
pub const DEFAULT: Self = Self(Signals::DEFAULT_TRAPS);
#[inline(always)]
pub(crate) const fn new(signals: Signals) -> Self {
Self(signals)
}
#[inline(always)]
pub(crate) const fn signals(&self) -> Signals {
self.0
}
#[inline(always)]
pub const fn empty() -> Self {
Self::EMPTY
}
#[inline(always)]
pub const fn default() -> Self {
Self::DEFAULT
}
#[inline(always)]
pub const fn set(mut self, signal: Signals) -> Self {
self.0 = self.0.set(signal);
self
}
#[inline]
pub(crate) const fn trap(&self, raised: Signals) -> Signals {
self.0.intersect(raised)
}
#[inline(always)]
pub(crate) const fn merge(mut self, other: Self) -> Self {
self = self.set(other.0);
self
}
}
impl Display for SignalsTraps {
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
Display::fmt(&self.0, f)
}
}
impl Debug for SignalsTraps {
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
write!(f, "{}", self)
}
}