Auto merge of #114041 - nvzqz:nvzqz/shared_from_array, r=dtolnay
Implement `From<[T; N]>` for `Rc<[T]>` and `Arc<[T]>` Given that `Box<[T]>` already has this conversion, the shared counterparts should also have it.
This commit is contained in:
commit
46da927abb
@ -2408,6 +2408,27 @@ impl<T> From<T> for Rc<T> {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(no_global_oom_handling))]
|
||||
#[stable(feature = "shared_from_array", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl<T, const N: usize> From<[T; N]> for Rc<[T]> {
|
||||
/// Converts a [`[T; N]`](prim@array) into an `Rc<[T]>`.
|
||||
///
|
||||
/// The conversion moves the array into a newly allocated `Rc`.
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// ```
|
||||
/// # use std::rc::Rc;
|
||||
/// let original: [i32; 3] = [1, 2, 3];
|
||||
/// let shared: Rc<[i32]> = Rc::from(original);
|
||||
/// assert_eq!(&[1, 2, 3], &shared[..]);
|
||||
/// ```
|
||||
#[inline]
|
||||
fn from(v: [T; N]) -> Rc<[T]> {
|
||||
Rc::<[T; N]>::from(v)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(no_global_oom_handling))]
|
||||
#[stable(feature = "shared_from_slice", since = "1.21.0")]
|
||||
impl<T: Clone> From<&[T]> for Rc<[T]> {
|
||||
|
@ -3269,6 +3269,27 @@ impl<T> From<T> for Arc<T> {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(no_global_oom_handling))]
|
||||
#[stable(feature = "shared_from_array", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl<T, const N: usize> From<[T; N]> for Arc<[T]> {
|
||||
/// Converts a [`[T; N]`](prim@array) into an `Arc<[T]>`.
|
||||
///
|
||||
/// The conversion moves the array into a newly allocated `Arc`.
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// ```
|
||||
/// # use std::sync::Arc;
|
||||
/// let original: [i32; 3] = [1, 2, 3];
|
||||
/// let shared: Arc<[i32]> = Arc::from(original);
|
||||
/// assert_eq!(&[1, 2, 3], &shared[..]);
|
||||
/// ```
|
||||
#[inline]
|
||||
fn from(v: [T; N]) -> Arc<[T]> {
|
||||
Arc::<[T; N]>::from(v)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(no_global_oom_handling))]
|
||||
#[stable(feature = "shared_from_slice", since = "1.21.0")]
|
||||
impl<T: Clone> From<&[T]> for Arc<[T]> {
|
||||
|
Loading…
x
Reference in New Issue
Block a user