Skip to content

Commit 6e54d33

Browse files
committed
Add RawRc methods for MaybeUninit<T> values
1 parent 645a169 commit 6e54d33

File tree

1 file changed

+67
-1
lines changed

1 file changed

+67
-1
lines changed

library/alloc/src/raw_rc/raw_rc.rs

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use core::clone::CloneToUninit;
55
use core::marker::PhantomData;
66
#[cfg(not(no_global_oom_handling))]
77
use core::mem;
8-
use core::mem::DropGuard;
8+
use core::mem::{DropGuard, MaybeUninit};
99
#[cfg(not(no_global_oom_handling))]
1010
use core::ops::DerefMut;
1111
#[cfg(not(no_global_oom_handling))]
@@ -479,3 +479,69 @@ impl<T, A> RawRc<T, A> {
479479
})
480480
}
481481
}
482+
483+
impl<T, A> RawRc<MaybeUninit<T>, A> {
484+
pub(crate) fn try_new_uninit() -> Result<Self, AllocError>
485+
where
486+
A: Allocator + Default,
487+
{
488+
RawWeak::try_new_uninit::<1>().map(|weak| unsafe { Self::from_weak(weak) })
489+
}
490+
491+
pub(crate) fn try_new_uninit_in(alloc: A) -> Result<Self, AllocError>
492+
where
493+
A: Allocator,
494+
{
495+
RawWeak::try_new_uninit_in::<1>(alloc).map(|weak| unsafe { Self::from_weak(weak) })
496+
}
497+
498+
pub(crate) fn try_new_zeroed() -> Result<Self, AllocError>
499+
where
500+
A: Allocator + Default,
501+
{
502+
RawWeak::try_new_zeroed::<1>().map(|weak| unsafe { Self::from_weak(weak) })
503+
}
504+
505+
pub(crate) fn try_new_zeroed_in(alloc: A) -> Result<Self, AllocError>
506+
where
507+
A: Allocator,
508+
{
509+
RawWeak::try_new_zeroed_in::<1>(alloc).map(|weak| unsafe { Self::from_weak(weak) })
510+
}
511+
512+
#[cfg(not(no_global_oom_handling))]
513+
pub(crate) fn new_uninit() -> Self
514+
where
515+
A: Allocator + Default,
516+
{
517+
unsafe { Self::from_weak(RawWeak::new_uninit::<1>()) }
518+
}
519+
520+
#[cfg(not(no_global_oom_handling))]
521+
pub(crate) fn new_uninit_in(alloc: A) -> Self
522+
where
523+
A: Allocator,
524+
{
525+
unsafe { Self::from_weak(RawWeak::new_uninit_in::<1>(alloc)) }
526+
}
527+
528+
#[cfg(not(no_global_oom_handling))]
529+
pub(crate) fn new_zeroed() -> Self
530+
where
531+
A: Allocator + Default,
532+
{
533+
unsafe { Self::from_weak(RawWeak::new_zeroed::<1>()) }
534+
}
535+
536+
#[cfg(not(no_global_oom_handling))]
537+
pub(crate) fn new_zeroed_in(alloc: A) -> Self
538+
where
539+
A: Allocator,
540+
{
541+
unsafe { Self::from_weak(RawWeak::new_zeroed_in::<1>(alloc)) }
542+
}
543+
544+
pub(crate) unsafe fn assume_init(self) -> RawRc<T, A> {
545+
unsafe { self.cast() }
546+
}
547+
}

0 commit comments

Comments
 (0)