Lines Matching defs:UniqueArc
215 UniqueArc::try_pin_init(init, flags).map(|u| u.into())
223 UniqueArc::try_init(init, flags).map(|u| u.into())
312 /// Converts this [`Arc`] into a [`UniqueArc`], or destroys it if it is not unique.
320 /// use kernel::sync::{Arc, UniqueArc};
334 /// use kernel::sync::{Arc, UniqueArc};
346 pub fn into_unique_or_drop(this: Self) -> Option<Pin<UniqueArc<T>>> {
354 // no other arcs, and we can create a `UniqueArc`.
358 // INVARIANT: We own the only refcount to this arc, so we may create a `UniqueArc`. We
359 // must pin the `UniqueArc` because the values was previously in an `Arc`, and they pin
361 Some(Pin::from(UniqueArc {
478 impl<T: ?Sized> From<UniqueArc<T>> for Arc<T> {
479 fn from(item: UniqueArc<T>) -> Self {
484 impl<T: ?Sized> From<Pin<UniqueArc<T>>> for Arc<T> {
485 fn from(item: Pin<UniqueArc<T>>) -> Self {
594 /// [`UniqueArc`] reference to this value.
602 // `UniqueArc`.
643 /// use kernel::sync::{Arc, UniqueArc};
651 /// let mut x = UniqueArc::new(Example { a: 10, b: 20 }, GFP_KERNEL)?;
661 /// initialise it on allocation. We do initialise it later with a call to [`UniqueArc::write`],
666 /// use kernel::sync::{Arc, UniqueArc};
674 /// let x = UniqueArc::new_uninit(GFP_KERNEL)?;
686 /// use kernel::sync::{Arc, UniqueArc};
694 /// let mut pinned = Pin::from(UniqueArc::new(Example { a: 10, b: 20 }, GFP_KERNEL)?);
702 pub struct UniqueArc<T: ?Sized> {
706 impl<T> InPlaceInit<T> for UniqueArc<T> {
714 UniqueArc::new_uninit(flags)?.write_pin_init(init)
722 UniqueArc::new_uninit(flags)?.write_init(init)
726 impl<T> InPlaceWrite<T> for UniqueArc<MaybeUninit<T>> {
727 type Initialized = UniqueArc<T>;
748 impl<T> UniqueArc<T> {
749 /// Tries to allocate a new [`UniqueArc`] instance.
757 /// Tries to allocate a new [`UniqueArc`] instance whose contents are not initialised yet.
758 pub fn new_uninit(flags: Flags) -> Result<UniqueArc<MaybeUninit<T>>, AllocError> {
767 Ok(UniqueArc {
775 impl<T> UniqueArc<MaybeUninit<T>> {
776 /// Converts a `UniqueArc<MaybeUninit<T>>` into a `UniqueArc<T>` by writing a value into it.
777 pub fn write(mut self, value: T) -> UniqueArc<T> {
789 pub unsafe fn assume_init(self) -> UniqueArc<T> {
791 UniqueArc {
799 pub fn init_with<E>(mut self, init: impl Init<T, E>) -> core::result::Result<UniqueArc<T>, E> {
812 ) -> core::result::Result<Pin<UniqueArc<T>>, E> {
823 impl<T: ?Sized> From<UniqueArc<T>> for Pin<UniqueArc<T>> {
824 fn from(obj: UniqueArc<T>) -> Self {
825 // SAFETY: It is not possible to move/replace `T` inside a `Pin<UniqueArc<T>>` (unless `T`
826 // is `Unpin`), so it is ok to convert it to `Pin<UniqueArc<T>>`.
831 impl<T: ?Sized> Deref for UniqueArc<T> {
839 impl<T: ?Sized> DerefMut for UniqueArc<T> {
843 // it's inside a `UniqueArc`, so it is safe to get a mutable reference.
852 /// # use kernel::sync::UniqueArc;
858 /// // Owned instance using `UniqueArc`.
859 /// let arc = UniqueArc::new(1, GFP_KERNEL)?;
867 impl<T: ?Sized> Borrow<T> for UniqueArc<T> {
877 /// # use kernel::sync::UniqueArc;
883 /// // Owned instance using `UniqueArc`.
884 /// let arc = UniqueArc::new(1, GFP_KERNEL)?;
892 impl<T: ?Sized> BorrowMut<T> for UniqueArc<T> {
898 impl<T: fmt::Display + ?Sized> fmt::Display for UniqueArc<T> {
910 impl<T: fmt::Debug + ?Sized> fmt::Debug for UniqueArc<T> {