use core::marker::PhantomData;
use crate::offset::{Offset, OffsetSize};
use crate::ZeroCopy;
#[derive(Debug, ZeroCopy)]
#[repr(C)]
#[zero_copy(crate)]
pub struct Unsized<T: ?Sized> {
ptr: Offset,
size: OffsetSize,
#[zero_copy(ignore)]
_marker: PhantomData<T>,
}
impl<T: ?Sized> Unsized<T> {
pub fn new(ptr: Offset, size: usize) -> Self {
let Ok(size) = OffsetSize::try_from(size) else {
panic!(
"Unsized size {size} not in the legal range of 0-{}",
OffsetSize::MAX
);
};
Self {
ptr,
size,
_marker: PhantomData,
}
}
#[inline]
pub fn ptr(&self) -> Offset {
self.ptr
}
#[inline]
pub fn size(&self) -> usize {
self.size as usize
}
}
impl<T: ?Sized> Clone for Unsized<T> {
fn clone(&self) -> Self {
*self
}
}
impl<T: ?Sized> Copy for Unsized<T> {}