use std::marker::PhantomData;
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)]
pub struct PhantomUnsend {
phantom: PhantomData<*const ()>,
}
impl PhantomUnsend {
pub const fn new() -> Self {
Self {
phantom: PhantomData,
}
}
}
unsafe impl Sync for PhantomUnsend {}
pub struct PtrMutSendSync<T> {
ptr: *mut T,
}
impl<T> PtrMutSendSync<T> {
pub unsafe fn new(ptr: *mut T) -> Self {
Self { ptr }
}
pub fn ptr(&self) -> *mut T {
self.ptr
}
}
unsafe impl<T: Send> Send for PtrMutSendSync<T> {}
unsafe impl<T: Sync> Sync for PtrMutSendSync<T> {}