starina_types/
signal.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use core::ops;

// TODO: Should we use unsigned integers instead?
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
#[repr(transparent)]
pub struct SignalBits(i32);

impl SignalBits {
    pub const fn from_raw(bits: i32) -> SignalBits {
        SignalBits(bits)
    }

    pub const fn empty() -> SignalBits {
        SignalBits::from_raw(0)
    }

    pub fn as_i32(&self) -> i32 {
        self.0
    }

    pub fn is_empty(&self) -> bool {
        self.0 == 0
    }

    pub fn clear(&mut self) -> SignalBits {
        let old = *self;
        self.0 = 0;
        old
    }
}

impl ops::BitOrAssign for SignalBits {
    fn bitor_assign(&mut self, rhs: SignalBits) {
        self.0 |= rhs.0;
    }
}