use std::ptr::NonNull;
type T = ();
pub type CloneFn = unsafe extern "C" fn(*mut T, *const T);
pub type DropFn = unsafe extern "C" fn(NonNull<T>);
#[derive(Clone, Debug)]
#[repr(C)]
pub struct VTable {
size: usize,
align: usize,
pub clone_fn: Option<CloneFn>,
pub drop_fn: Option<DropFn>,
}
impl VTable {
pub fn new(
size: usize,
align: usize,
clone_fn: Option<CloneFn>,
drop_fn: Option<DropFn>,
) -> Self {
Self {
size,
align,
clone_fn,
drop_fn,
}
}
pub fn layout(&self) -> std::alloc::Layout {
std::alloc::Layout::from_size_align(self.size, self.align).unwrap()
}
pub fn size(&self) -> usize {
self.size
}
pub fn align(&self) -> usize {
self.align
}
}