Make Vec::new const

This commit is contained in:
Mark Mansi 2018-04-25 16:33:02 -05:00
parent 25749ad66d
commit 256096da9e
4 changed files with 34 additions and 4 deletions

View file

@ -68,6 +68,16 @@ impl<T, A: Alloc> RawVec<T, A> {
}
}
/// Like `empty` but parametrized over the choice of allocator for the returned `RawVec`.
pub const fn empty_in(a: A) -> Self {
// Unique::empty() doubles as "unallocated" and "zero-sized allocation"
RawVec {
ptr: Unique::empty(),
cap: 0,
a,
}
}
/// Like `with_capacity` but parameterized over the choice of
/// allocator for the returned RawVec.
#[inline]
@ -124,6 +134,12 @@ impl<T> RawVec<T, Global> {
Self::new_in(Global)
}
/// Create a `RawVec` with capcity 0 (on the system heap), regardless of `T`, without
/// allocating.
pub fn empty() -> Self {
Self::empty_in(Global)
}
/// Creates a RawVec (on the system heap) with exactly the
/// capacity and alignment requirements for a `[T; cap]`. This is
/// equivalent to calling RawVec::new when `cap` is 0 or T is

View file

@ -324,7 +324,7 @@ impl<T> Vec<T> {
#[stable(feature = "rust1", since = "1.0.0")]
pub fn new() -> Vec<T> {
Vec {
buf: RawVec::new(),
buf: RawVec::empty(),
len: 0,
}
}