#![allow(non_camel_case_types)]
#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct sigset_t {
    sig: [crate::ulong; 1],
}
impl sigset_t {
    const ELEMS: usize = 1;
    const ELEM_BITS: usize = core::mem::size_of::<crate::ulong>() * 8;
    const FILLED: crate::ulong = !0;
    #[inline]
    pub const fn new_empty() -> Self {
        Self {
            sig: [0; Self::ELEMS],
        }
    }
    #[inline]
    pub const fn new_filled() -> Self {
        Self {
            sig: [Self::FILLED; Self::ELEMS],
        }
    }
    #[inline]
    pub fn sigemptyset(&mut self) {
        for elem in &mut self.sig {
            *elem = 0;
        }
    }
    #[inline]
    pub fn sigfillset(&mut self) {
        for elem in &mut self.sig {
            *elem = Self::FILLED;
        }
    }
    #[inline]
    pub fn sigaddset(&mut self, signum: crate::int) -> crate::result::Result<()> {
        let (elem, bit) = Self::sigpos(signum)?;
        self.sig[elem] |= (1 << bit) as crate::ulong;
        Ok(())
    }
    #[inline]
    pub fn sigdelset(&mut self, signum: crate::int) -> crate::result::Result<()> {
        let (elem, bit) = Self::sigpos(signum)?;
        self.sig[elem] &= !(1 << bit) as crate::ulong;
        Ok(())
    }
    #[inline]
    pub fn sigismember(&mut self, signum: crate::int) -> crate::result::Result<bool> {
        let (elem, bit) = Self::sigpos(signum)?;
        Ok((self.sig[elem] & (1 << bit)) != 0)
    }
    pub fn as_ptr(&self) -> *const Self {
        self as *const Self
    }
    pub fn as_mut_ptr(&mut self) -> *mut Self {
        self as *mut Self
    }
    fn sigpos(signum: crate::int) -> crate::result::Result<(usize, usize)> {
        let total_bit = (signum - 1) as usize;
        let elem = total_bit / Self::ELEM_BITS;
        if elem >= Self::ELEMS {
            return Err(crate::result::Error::new(22 ));
        }
        let bit = total_bit % Self::ELEM_BITS;
        Ok((elem, bit))
    }
}