|
#[unstable(feature = "slice_concat_trait", issue = "27747")] |
|
pub trait Join<Separator> { |
|
#[unstable(feature = "slice_concat_trait", issue = "27747")] |
|
/// The resulting type after concatenation |
|
type Output; |
|
|
|
/// Implementation of [`[T]::join`](../../std/primitive.slice.html#method.join) |
|
#[unstable(feature = "slice_concat_trait", issue = "27747")] |
|
fn join(slice: &Self, sep: Separator) -> Self::Output; |
|
} |
|
|
|
#[unstable(feature = "slice_concat_ext", issue = "27747")] |
|
impl<T: Clone, V: Borrow<[T]>> Concat<T> for [V] { |
|
type Output = Vec<T>; |
|
|
|
fn concat(slice: &Self) -> Vec<T> { |
|
let size = slice.iter().map(|slice| slice.borrow().len()).sum(); |
|
let mut result = Vec::with_capacity(size); |
|
for v in slice { |
|
result.extend_from_slice(v.borrow()) |
|
} |
|
result |
|
} |
|
} |
|
|
|
#[unstable(feature = "slice_concat_ext", issue = "27747")] |
|
impl<T: Clone, V: Borrow<[T]>> Join<&T> for [V] { |
|
type Output = Vec<T>; |
|
|
|
fn join(slice: &Self, sep: &T) -> Vec<T> { |
|
let mut iter = slice.iter(); |
|
let first = match iter.next() { |
|
Some(first) => first, |
|
None => return vec![], |
|
}; |
|
let size = slice.iter().map(|v| v.borrow().len()).sum::<usize>() + slice.len() - 1; |
|
let mut result = Vec::with_capacity(size); |
|
result.extend_from_slice(first.borrow()); |
|
|
|
for v in iter { |
|
result.push(sep.clone()); |
|
result.extend_from_slice(v.borrow()) |
|
} |
|
result |
|
} |
|
} |
|
|
|
#[unstable(feature = "slice_concat_ext", issue = "27747")] |
|
impl<T: Clone, V: Borrow<[T]>> Join<&[T]> for [V] { |
|
type Output = Vec<T>; |
|
|
|
fn join(slice: &Self, sep: &[T]) -> Vec<T> { |
|
let mut iter = slice.iter(); |
|
let first = match iter.next() { |
|
Some(first) => first, |
|
None => return vec![], |
|
}; |
|
let size = |
|
slice.iter().map(|v| v.borrow().len()).sum::<usize>() + sep.len() * (slice.len() - 1); |
|
let mut result = Vec::with_capacity(size); |
|
result.extend_from_slice(first.borrow()); |
|
|
|
for v in iter { |
|
result.extend_from_slice(sep); |
|
result.extend_from_slice(v.borrow()) |
|
} |
|
result |
|
} |
|
} |
Missing Implementors for
std::slice::Jointrait.Current output:

While rustdoc displays
Borrowtrait implementors.Expected:
Display Implementors for Join trait:
rust/library/alloc/src/slice.rs
Lines 635 to 703 in de32266
Meta
rustc --version --verbose: 1.47.0-nightly (9b88e0a 2020-08-15)@rustbot modify labels: T-rustdoc