type T = ();
pub type CloneFn = unsafe extern "C" fn(*mut T, *const T);
pub type DropFn = unsafe extern "C" fn(*mut T);
pub type EqFn = unsafe extern "C" fn(*const T, *const T) -> bool;
#[derive(Clone, Debug)]
#[repr(C)]
pub struct VTable {
size: usize,
align: usize,
pub clone_fn: Option<CloneFn>,
pub drop_fn: Option<DropFn>,
pub eq_fn: EqFn,
}
impl VTable {
pub fn new(
size: usize,
align: usize,
clone_fn: Option<CloneFn>,
drop_fn: Option<DropFn>,
eq_fn: EqFn,
) -> Self {
Self {
size,
align,
clone_fn,
drop_fn,
eq_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
}
}