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}