more into_* methods

This commit is contained in:
numzero 2026-05-07 19:59:34 +03:00
parent e0cd965f33
commit f95e78f5ad

View File

@ -31,15 +31,24 @@ impl<T: ?Sized> OwnRef<'_, T> {
pub unsafe fn new_unchecked(p: NonNull<T>) -> Self { pub unsafe fn new_unchecked(p: NonNull<T>) -> Self {
Self(Some(p), PhantomData) Self(Some(p), PhantomData)
} }
pub fn into_inner(mut self) -> NonNull<T> {
self.0.take().unwrap()
}
} }
impl<'a, T: ?Sized> OwnRef<'a, T> { impl<'a, T: ?Sized> OwnRef<'a, T> {
pub unsafe fn from_manually_drop(p: &'a mut ManuallyDrop<T>) -> Self { pub unsafe fn from_manually_drop(p: &'a mut ManuallyDrop<T>) -> Self {
unsafe { Self::new_unchecked(p.deref_mut().into()) } unsafe { Self::new_unchecked(p.deref_mut().into()) }
} }
pub fn into_manually_drop(self) -> &'a mut ManuallyDrop<T> {
let p = self.into_inner().as_ptr() as *mut ManuallyDrop<T>;
unsafe { p.as_mut().unwrap() }
}
} }
impl<T: Sized> OwnRef<'_, T> { impl<T> OwnRef<'_, T> {
pub fn take(mut self) -> T { pub fn take(mut self) -> T {
let p = self.0.take().unwrap(); let p = self.0.take().unwrap();
unsafe { p.read() } unsafe { p.read() }