Skip to content

Commit ae630ca

Browse files
committed
Specialize Vec::from_elem for other integer types
1 parent 27fcdb8 commit ae630ca

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

src/libcollections/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
#![feature(fused)]
4343
#![feature(generic_param_attrs)]
4444
#![feature(heap_api)]
45+
#![feature(i128_type)]
4546
#![feature(inclusive_range)]
4647
#![feature(lang_items)]
4748
#![feature(nonzero)]

src/libcollections/vec.rs

+32
Original file line numberDiff line numberDiff line change
@@ -1403,6 +1403,38 @@ impl SpecFromElem for u8 {
14031403
}
14041404
}
14051405

1406+
macro_rules! impl_spec_from_elem_int {
1407+
($t: ty) => {
1408+
impl SpecFromElem for $t {
1409+
#[inline]
1410+
fn from_elem(elem: $t, n: usize) -> Vec<$t> {
1411+
if elem == 0 {
1412+
return Vec {
1413+
buf: RawVec::with_capacity_zeroed(n),
1414+
len: n,
1415+
}
1416+
}
1417+
let mut v = Vec::with_capacity(n);
1418+
v.extend_with_element(n, elem);
1419+
v
1420+
}
1421+
}
1422+
}
1423+
}
1424+
1425+
impl_spec_from_elem_int!(i8);
1426+
impl_spec_from_elem_int!(i16);
1427+
impl_spec_from_elem_int!(i32);
1428+
impl_spec_from_elem_int!(i64);
1429+
impl_spec_from_elem_int!(i128);
1430+
impl_spec_from_elem_int!(isize);
1431+
1432+
impl_spec_from_elem_int!(u16);
1433+
impl_spec_from_elem_int!(u32);
1434+
impl_spec_from_elem_int!(u64);
1435+
impl_spec_from_elem_int!(u128);
1436+
impl_spec_from_elem_int!(usize);
1437+
14061438
////////////////////////////////////////////////////////////////////////////////
14071439
// Common trait implementations for Vec
14081440
////////////////////////////////////////////////////////////////////////////////

0 commit comments

Comments
 (0)