use std::sync::atomic::{AtomicUsize, Ordering}; /// The current index for the value counter. static CURRENT: AtomicUsize = AtomicUsize::new(1); /// An extremely basic way to identify a piece of data. #[derive(Debug, Copy, Clone, Ord, PartialOrd, Eq, PartialEq)] #[repr(C)] pub struct ValueIdentifier(usize); impl Default for ValueIdentifier { fn default() -> Self { Self(CURRENT.fetch_add(1, Ordering::SeqCst)) } } /// An object with a specific identifier. pub trait ValueIdentifiable { /// Get the identifier for the current object. fn value_identifier(&self) -> ValueIdentifier; }