use std::sync::atomic::{AtomicUsize, Ordering};
static CURRENT: AtomicUsize = AtomicUsize::new(0);
#[derive(Clone, Copy, Hash, PartialEq, Eq)]
pub(crate) enum TokenType {
AdhocAdaptive(usize),
AlwaysInline,
AlwaysSpawn,
}
#[derive(Clone, Copy, Hash, PartialEq, Eq)]
pub struct Token(pub(crate) TokenType);
impl Token {
pub fn new() -> Self {
Token(TokenType::AdhocAdaptive(
CURRENT.fetch_add(1, Ordering::SeqCst),
))
}
pub fn always_inline() -> Self {
Token(TokenType::AlwaysInline)
}
pub fn always_spawn() -> Self {
Token(TokenType::AlwaysSpawn)
}
}
impl Default for Token {
fn default() -> Self {
Self::new()
}
}