1 use crate::backend::c;
2 
3 bitflags::bitflags! {
4     /// `FUTEX_*` flags for use with [`futex`].
5     ///
6     /// [`futex`]: crate::thread::futex
7     #[repr(transparent)]
8     #[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
9     pub struct FutexFlags: u32 {
10         /// `FUTEX_PRIVATE_FLAG`
11         const PRIVATE = bitcast!(c::FUTEX_PRIVATE_FLAG);
12         /// `FUTEX_CLOCK_REALTIME`
13         const CLOCK_REALTIME = bitcast!(c::FUTEX_CLOCK_REALTIME);
14     }
15 }
16 
17 /// `FUTEX_*` operations for use with [`futex`].
18 ///
19 /// [`futex`]: crate::thread::futex
20 #[derive(Debug, Copy, Clone, Eq, PartialEq)]
21 #[repr(u32)]
22 pub enum FutexOperation {
23     /// `FUTEX_WAIT`
24     Wait = bitcast!(c::FUTEX_WAIT),
25     /// `FUTEX_WAKE`
26     Wake = bitcast!(c::FUTEX_WAKE),
27     /// `FUTEX_FD`
28     Fd = bitcast!(c::FUTEX_FD),
29     /// `FUTEX_REQUEUE`
30     Requeue = bitcast!(c::FUTEX_REQUEUE),
31     /// `FUTEX_CMP_REQUEUE`
32     CmpRequeue = bitcast!(c::FUTEX_CMP_REQUEUE),
33     /// `FUTEX_WAKE_OP`
34     WakeOp = bitcast!(c::FUTEX_WAKE_OP),
35     /// `FUTEX_LOCK_PI`
36     LockPi = bitcast!(c::FUTEX_LOCK_PI),
37     /// `FUTEX_UNLOCK_PI`
38     UnlockPi = bitcast!(c::FUTEX_UNLOCK_PI),
39     /// `FUTEX_TRYLOCK_PI`
40     TrylockPi = bitcast!(c::FUTEX_TRYLOCK_PI),
41     /// `FUTEX_WAIT_BITSET`
42     WaitBitset = bitcast!(c::FUTEX_WAIT_BITSET),
43 }
44