use core::sync::atomic::{AtomicUsize, Ordering};
#[derive(Eq, PartialEq, Debug, Clone, Copy, Hash, Ord, PartialOrd)]
pub struct ProcId(usize);
impl ProcId {
pub fn new() -> Self {
static PID_COUNTER: AtomicUsize = AtomicUsize::new(0);
let id = PID_COUNTER.fetch_add(1, Ordering::Relaxed);
Self(id)
}
pub fn from_usize(v: usize) -> Self {
Self(v)
}
pub fn get_usize(&self) -> usize {
self.0
}
}
#[derive(Eq, PartialEq, Debug, Clone, Copy, Hash, Ord, PartialOrd)]
pub struct ThreadId(usize);
impl ThreadId {
pub fn new() -> Self {
static TID_COUNTER: AtomicUsize = AtomicUsize::new(0);
let id = TID_COUNTER.fetch_add(1, Ordering::Relaxed);
Self(id)
}
pub fn from_usize(v: usize) -> Self {
Self(v)
}
pub fn get_usize(&self) -> usize {
self.0
}
}
#[derive(Eq, PartialEq, Debug, Clone, Copy, Hash, Ord, PartialOrd)]
pub struct CoroId(usize);
impl CoroId {
pub fn new() -> Self {
static CID_COUNTER: AtomicUsize = AtomicUsize::new(0);
let id = CID_COUNTER.fetch_add(1, Ordering::Relaxed);
Self(id)
}
pub fn from_usize(v: usize) -> Self {
Self(v)
}
pub fn get_usize(&self) -> usize {
self.0
}
}