#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Default, Hash)]
pub struct BufferHandle(pub u64);
impl BufferHandle {
pub const INVALID: Self = Self(0);
#[inline]
pub const fn from_raw(raw: u64) -> Self {
Self(raw)
}
#[inline]
pub const fn is_valid(&self) -> bool {
self.0 != 0
}
#[inline]
pub const fn is_invalid(&self) -> bool {
self.0 == 0
}
#[inline]
pub const fn as_u64(&self) -> u64 {
self.0
}
#[inline]
pub const fn raw(&self) -> u64 {
self.0
}
#[inline]
pub const fn as_usize(&self) -> usize {
self.0 as usize
}
#[inline]
pub const fn id(&self) -> u32 {
self.0 as u32
}
#[inline]
pub const fn generation(&self) -> u32 {
(self.0 >> 32) as u32
}
#[inline]
pub const fn new(id: u32, generation: u32) -> Self {
Self::from_id_gen(id, generation)
}
#[inline]
pub const fn from_id_gen(id: u32, generation: u32) -> Self {
Self(((generation as u64) << 32) | (id as u64))
}
}
impl From<u64> for BufferHandle {
#[inline]
fn from(raw: u64) -> Self {
Self(raw)
}
}
impl From<BufferHandle> for u64 {
#[inline]
fn from(h: BufferHandle) -> Self {
h.0
}
}