about summary refs log tree commit diff
path: root/src/liballoc
diff options
context:
space:
mode:
authorAxary <bastian_kauschke@hotmail.de>2018-11-10 11:43:39 +0100
committerAxary <bastian_kauschke@hotmail.de>2018-11-10 11:43:39 +0100
commit852ff1fc7d74a7668441e0f354f8c477c95b676d (patch)
tree38a550dee0d7b3f27869179112be26140f0b84f2 /src/liballoc
parent06118eac4c602a22d2004c98756a95f2c5ec95d5 (diff)
downloadrust-852ff1fc7d74a7668441e0f354f8c477c95b676d.tar.gz
rust-852ff1fc7d74a7668441e0f354f8c477c95b676d.zip
add FromIterator<A> to Box<[A]>
Diffstat (limited to 'src/liballoc')
-rw-r--r--src/liballoc/boxed.rs10
-rw-r--r--src/liballoc/boxed_test.rs8
2 files changed, 17 insertions, 1 deletions
diff --git a/src/liballoc/boxed.rs b/src/liballoc/boxed.rs
index 74354f605e5..e1e9617b491 100644
--- a/src/liballoc/boxed.rs
+++ b/src/liballoc/boxed.rs
@@ -73,7 +73,7 @@ use core::convert::From;
 use core::fmt;
 use core::future::Future;
 use core::hash::{Hash, Hasher};
-use core::iter::FusedIterator;
+use core::iter::{Iterator, FromIterator, FusedIterator};
 use core::marker::{Unpin, Unsize};
 use core::mem;
 use core::pin::Pin;
@@ -81,6 +81,7 @@ use core::ops::{CoerceUnsized, DispatchFromDyn, Deref, DerefMut, Generator, Gene
 use core::ptr::{self, NonNull, Unique};
 use core::task::{LocalWaker, Poll};
 
+use vec::Vec;
 use raw_vec::RawVec;
 use str::from_boxed_utf8_unchecked;
 
@@ -699,6 +700,13 @@ impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<Box<U>> for Box<T> {}
 #[unstable(feature = "dispatch_from_dyn", issue = "0")]
 impl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<Box<U>> for Box<T> {}
 
+#[unstable(feature = "boxed_slice_from_iter", issue = "0")]
+impl<A> FromIterator<A> for Box<[A]> {
+    fn from_iter<T: IntoIterator<Item = A>>(iter: T) -> Self {
+        iter.into_iter().collect::<Vec<_>>().into_boxed_slice()
+    }
+}
+
 #[stable(feature = "box_slice_clone", since = "1.3.0")]
 impl<T: Clone> Clone for Box<[T]> {
     fn clone(&self) -> Self {
diff --git a/src/liballoc/boxed_test.rs b/src/liballoc/boxed_test.rs
index 55995742a4a..f340ea01c5f 100644
--- a/src/liballoc/boxed_test.rs
+++ b/src/liballoc/boxed_test.rs
@@ -140,3 +140,11 @@ fn str_slice() {
     let boxed: Box<str> = Box::from(s);
     assert_eq!(&*boxed, s)
 }
+
+#[test]
+fn boxed_slice_from_iter() {
+    let iter = 0..100;
+    let boxed: Box<[u32]> = iter.collect();
+    assert_eq!(boxed.len(), 100);
+    assert_eq!(boxed[7], 7);
+}