Skip to content

Commit 196db96

Browse files
committed
Rollup merge of rust-lang#55843 - Axary:master, r=sfackler
add FromIterator<A> to Box<[A]>
2 parents 5b572fb + ab55d9b commit 196db96

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

src/liballoc/boxed.rs

+9-1
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,15 @@ use core::convert::From;
7373
use core::fmt;
7474
use core::future::Future;
7575
use core::hash::{Hash, Hasher};
76-
use core::iter::FusedIterator;
76+
use core::iter::{Iterator, FromIterator, FusedIterator};
7777
use core::marker::{Unpin, Unsize};
7878
use core::mem;
7979
use core::pin::Pin;
8080
use core::ops::{CoerceUnsized, DispatchFromDyn, Deref, DerefMut, Generator, GeneratorState};
8181
use core::ptr::{self, NonNull, Unique};
8282
use core::task::{LocalWaker, Poll};
8383

84+
use vec::Vec;
8485
use raw_vec::RawVec;
8586
use str::from_boxed_utf8_unchecked;
8687

@@ -699,6 +700,13 @@ impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<Box<U>> for Box<T> {}
699700
#[unstable(feature = "dispatch_from_dyn", issue = "0")]
700701
impl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<Box<U>> for Box<T> {}
701702

703+
#[stable(feature = "boxed_slice_from_iter", since = "1.32.0")]
704+
impl<A> FromIterator<A> for Box<[A]> {
705+
fn from_iter<T: IntoIterator<Item = A>>(iter: T) -> Self {
706+
iter.into_iter().collect::<Vec<_>>().into_boxed_slice()
707+
}
708+
}
709+
702710
#[stable(feature = "box_slice_clone", since = "1.3.0")]
703711
impl<T: Clone> Clone for Box<[T]> {
704712
fn clone(&self) -> Self {

src/liballoc/boxed_test.rs

+8
Original file line numberDiff line numberDiff line change
@@ -140,3 +140,11 @@ fn str_slice() {
140140
let boxed: Box<str> = Box::from(s);
141141
assert_eq!(&*boxed, s)
142142
}
143+
144+
#[test]
145+
fn boxed_slice_from_iter() {
146+
let iter = 0..100;
147+
let boxed: Box<[u32]> = iter.collect();
148+
assert_eq!(boxed.len(), 100);
149+
assert_eq!(boxed[7], 7);
150+
}

0 commit comments

Comments
 (0)