fastnum/decimal/context/
signal_traps.rs1use core::fmt::{Debug, Display, Formatter};
2
3use crate::decimal::Signals;
4
5#[derive(Copy, Clone, Hash, PartialEq, Eq)]
11#[repr(transparent)]
12pub struct SignalsTraps(Signals);
13
14impl SignalsTraps {
15 const EMPTY: Self = Self(Signals::EMPTY);
16 const DEFAULT: Self = Self(Signals::DEFAULT_TRAPS);
17
18 #[inline(always)]
19 pub(crate) const fn new(signals: Signals) -> Self {
20 Self(signals)
21 }
22
23 #[inline(always)]
24 pub(crate) const fn signals(&self) -> Signals {
25 self.0
26 }
27
28 #[inline(always)]
30 pub const fn empty() -> Self {
31 Self::EMPTY
32 }
33
34 #[inline(always)]
36 pub const fn default() -> Self {
37 Self::DEFAULT
38 }
39
40 #[inline(always)]
42 pub const fn set(mut self, signal: Signals) -> Self {
43 self.0 = self.0.set(signal);
44 self
45 }
46
47 #[inline(always)]
48 pub(crate) const fn trap(&self, raised: Signals) -> Signals {
49 self.0.intersect(raised)
50 }
51
52 #[inline(always)]
53 pub(crate) const fn merge(mut self, other: Self) -> Self {
54 self = self.set(other.0);
55 self
56 }
57}
58
59impl Display for SignalsTraps {
60 fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
61 Display::fmt(&self.0, f)
62 }
63}
64
65impl Debug for SignalsTraps {
66 fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
67 write!(f, "{self}")
68 }
69}