use std::sync::atomic::{AtomicUsize, Ordering};
static NEXT_BUFFER_ID: AtomicUsize = AtomicUsize::new(0);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct BufferId(usize);
impl BufferId {
#[must_use]
pub fn new() -> Self {
Self(NEXT_BUFFER_ID.fetch_add(1, Ordering::Relaxed))
}
#[must_use]
pub const fn as_usize(self) -> usize {
self.0
}
#[must_use]
pub const fn from_raw(value: usize) -> Self {
Self(value)
}
}
impl Default for BufferId {
fn default() -> Self {
Self::new()
}
}
impl std::fmt::Display for BufferId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "Buffer({})", self.0)
}
}