use core::marker::PhantomData;
use crate::offset::Offset;
use crate::ZeroCopy;
#[derive(Debug, ZeroCopy)]
#[repr(C)]
#[zero_copy(crate)]
pub struct Ref<T> {
ptr: Offset,
#[zero_copy(ignore)]
_marker: PhantomData<T>,
}
impl<T> Ref<T>
where
T: ZeroCopy,
{
pub const fn zero() -> Self {
Self::new(Offset::ZERO)
}
pub const fn new(ptr: Offset) -> Self {
Self {
ptr,
_marker: PhantomData,
}
}
#[inline]
pub(crate) fn ptr(&self) -> Offset {
self.ptr
}
}
impl<T> Clone for Ref<T> {
#[inline]
fn clone(&self) -> Self {
*self
}
}
impl<T> Copy for Ref<T> {}