1use core::sync::atomic::{AtomicUsize, Ordering};
2
3#[derive(Eq, PartialEq, Debug, Clone, Copy, Hash, Ord, PartialOrd)]
5pub struct ProcId(usize);
6
7impl ProcId {
8 pub fn new() -> Self {
10 static PID_COUNTER: AtomicUsize = AtomicUsize::new(0);
12 let id = PID_COUNTER.fetch_add(1, Ordering::Relaxed);
13 Self(id)
14 }
15 pub fn from_usize(v: usize) -> Self {
17 Self(v)
18 }
19 pub fn get_usize(&self) -> usize {
21 self.0
22 }
23}
24
25#[derive(Eq, PartialEq, Debug, Clone, Copy, Hash, Ord, PartialOrd)]
27pub struct ThreadId(usize);
28
29impl ThreadId {
30 pub fn new() -> Self {
32 static TID_COUNTER: AtomicUsize = AtomicUsize::new(0);
34 let id = TID_COUNTER.fetch_add(1, Ordering::Relaxed);
35 Self(id)
36 }
37 pub fn from_usize(v: usize) -> Self {
39 Self(v)
40 }
41 pub fn get_usize(&self) -> usize {
43 self.0
44 }
45}
46
47#[derive(Eq, PartialEq, Debug, Clone, Copy, Hash, Ord, PartialOrd)]
49pub struct CoroId(usize);
50
51impl CoroId {
52 pub fn new() -> Self {
54 static CID_COUNTER: AtomicUsize = AtomicUsize::new(0);
56 let id = CID_COUNTER.fetch_add(1, Ordering::Relaxed);
57 Self(id)
58 }
59 pub fn from_usize(v: usize) -> Self {
61 Self(v)
62 }
63 pub fn get_usize(&self) -> usize {
65 self.0
66 }
67}