pub struct Garbage {
ptr: *const u8,
dtor: unsafe fn(*const u8),
}
impl Garbage {
pub fn new(ptr: *const u8, dtor: fn(*const u8)) -> Garbage {
Garbage {
ptr: ptr,
dtor: dtor,
}
}
pub unsafe fn new_box<T>(item: *const T) -> Garbage {
unsafe fn dtor<T>(ptr: *const u8) {
Box::from_raw(ptr as *mut u8 as *mut T);
}
Garbage {
ptr: item as *const u8,
dtor: dtor::<T>,
}
}
pub fn ptr(&self) -> *const u8 {
self.ptr
}
pub fn destroy(self) {
unsafe { (self.dtor)(self.ptr); }
}
}
unsafe impl Send for Garbage {}