Introduce into_raw_non_null on Rc and Arc
This commit is contained in:
parent
1484d0d123
commit
1e577269da
2 changed files with 42 additions and 0 deletions
|
@ -435,6 +435,27 @@ impl<T: ?Sized> Rc<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Consumes the `Rc`, returning the wrapped pointer as `NonNull<T>`.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(rc_into_raw_non_null)]
|
||||||
|
///
|
||||||
|
/// use std::rc::Rc;
|
||||||
|
///
|
||||||
|
/// let x = Rc::new(10);
|
||||||
|
/// let ptr = Rc::into_raw_non_null(x);
|
||||||
|
/// let deref = unsafe { *ptr.as_ref() };
|
||||||
|
/// assert_eq!(deref, 10);
|
||||||
|
/// ```
|
||||||
|
#[unstable(feature = "rc_into_raw_non_null", issue = "47336")]
|
||||||
|
#[inline]
|
||||||
|
pub fn into_raw_non_null(this: Self) -> NonNull<T> {
|
||||||
|
// safe because Rc guarantees its pointer is non-null
|
||||||
|
unsafe { NonNull::new_unchecked(Rc::into_raw(this) as *mut _) }
|
||||||
|
}
|
||||||
|
|
||||||
/// Creates a new [`Weak`][weak] pointer to this value.
|
/// Creates a new [`Weak`][weak] pointer to this value.
|
||||||
///
|
///
|
||||||
/// [weak]: struct.Weak.html
|
/// [weak]: struct.Weak.html
|
||||||
|
|
|
@ -413,6 +413,27 @@ impl<T: ?Sized> Arc<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Consumes the `Arc`, returning the wrapped pointer as `NonNull<T>`.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(rc_into_raw_non_null)]
|
||||||
|
///
|
||||||
|
/// use std::sync::Arc;
|
||||||
|
///
|
||||||
|
/// let x = Arc::new(10);
|
||||||
|
/// let ptr = Arc::into_raw_non_null(x);
|
||||||
|
/// let deref = unsafe { *ptr.as_ref() };
|
||||||
|
/// assert_eq!(deref, 10);
|
||||||
|
/// ```
|
||||||
|
#[unstable(feature = "rc_into_raw_non_null", issue = "47336")]
|
||||||
|
#[inline]
|
||||||
|
pub fn into_raw_non_null(this: Self) -> NonNull<T> {
|
||||||
|
// safe because Arc guarantees its pointer is non-null
|
||||||
|
unsafe { NonNull::new_unchecked(Arc::into_raw(this) as *mut _) }
|
||||||
|
}
|
||||||
|
|
||||||
/// Creates a new [`Weak`][weak] pointer to this value.
|
/// Creates a new [`Weak`][weak] pointer to this value.
|
||||||
///
|
///
|
||||||
/// [weak]: struct.Weak.html
|
/// [weak]: struct.Weak.html
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue