Skip to content

Commit 1318d76

Browse files
author
bors-servo
authored
Auto merge of #67 - c0gent:impl_from_array_vec, r=mbrubeck
Implement `From<Vec<_>>` and `From<[_]>`. I can't imagine this would cause any problems but someone with more experience with the library should double-check. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/rust-smallvec/67) <!-- Reviewable:end -->
2 parents c2833c5 + 3b0569a commit 1318d76

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

lib.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -828,6 +828,20 @@ impl<'a, A: Array> From<&'a [A::Item]> for SmallVec<A> where A::Item: Clone {
828828
}
829829
}
830830

831+
impl<A: Array> From<Vec<A::Item>> for SmallVec<A> {
832+
#[inline]
833+
fn from(vec: Vec<A::Item>) -> SmallVec<A> {
834+
SmallVec::from_vec(vec)
835+
}
836+
}
837+
838+
impl<A: Array> From<A> for SmallVec<A> {
839+
#[inline]
840+
fn from(array: A) -> SmallVec<A> {
841+
SmallVec::from_buf(array)
842+
}
843+
}
844+
831845
macro_rules! impl_index {
832846
($index_type: ty, $output_type: ty) => {
833847
impl<A: Array> ops::Index<$index_type> for SmallVec<A> {
@@ -1552,6 +1566,31 @@ pub mod tests {
15521566
fn test_from() {
15531567
assert_eq!(&SmallVec::<[u32; 2]>::from(&[1][..])[..], [1]);
15541568
assert_eq!(&SmallVec::<[u32; 2]>::from(&[1, 2, 3][..])[..], [1, 2, 3]);
1569+
1570+
let vec = vec![];
1571+
let small_vec: SmallVec<[u8; 3]> = SmallVec::from(vec);
1572+
assert_eq!(&*small_vec, &[]);
1573+
drop(small_vec);
1574+
1575+
let vec = vec![1, 2, 3, 4, 5];
1576+
let small_vec: SmallVec<[u8; 3]> = SmallVec::from(vec);
1577+
assert_eq!(&*small_vec, &[1, 2, 3, 4, 5]);
1578+
drop(small_vec);
1579+
1580+
let vec = vec![1, 2, 3, 4, 5];
1581+
let small_vec: SmallVec<[u8; 1]> = SmallVec::from(vec);
1582+
assert_eq!(&*small_vec, &[1, 2, 3, 4, 5]);
1583+
drop(small_vec);
1584+
1585+
let array = [1];
1586+
let small_vec: SmallVec<[u8; 1]> = SmallVec::from(array);
1587+
assert_eq!(&*small_vec, &[1]);
1588+
drop(small_vec);
1589+
1590+
let array = [99; 128];
1591+
let small_vec: SmallVec<[u8; 128]> = SmallVec::from(array);
1592+
assert_eq!(&*small_vec, vec![99u8; 128].as_slice());
1593+
drop(small_vec);
15551594
}
15561595

15571596
#[test]

0 commit comments

Comments
 (0)