22 lines
611 B
Rust
22 lines
611 B
Rust
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;
|
|
}
|