nitric_lock/
group.rs

1use crate::mutex::new_mutex;
2use crate::Mutex;
3
4#[derive(Default)]
5pub struct LockGroup {
6    counter: usize,
7    unique_id: Box<u8>,
8}
9
10impl LockGroup {
11    pub fn new() -> Self {
12        Default::default()
13    }
14
15    pub fn id(&self) -> usize {
16        self.unique_id.as_ref() as *const _ as usize
17    }
18
19    pub fn mutex<T>(&mut self, value: T) -> Mutex<T> {
20        let r = new_mutex(value, self.counter);
21
22        self.counter = self
23            .counter
24            .checked_add(1)
25            .expect("Allocated more than `usize::MAX` locks");
26
27        r
28    }
29
30    pub fn token(&mut self) -> LockToken {
31        LockToken { _opaque: () }
32    }
33}
34
35pub struct LockToken {
36    _opaque: (),
37}