From ad21976fbc4776fe09f98cd087fbe4cecf23cd84 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Wed, 28 Mar 2012 23:10:58 -0700 Subject: [PATCH] core: Add vec::capacity --- src/libcore/vec.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 60ed23a65824..e4626c97c3ee 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -9,6 +9,7 @@ export is_not_empty; export same_length; export reserve; export reserve_at_least; +export capacity; export len; export from_fn; export from_elem; @@ -134,6 +135,14 @@ fn reserve_at_least(&v: [const T], n: uint) { reserve(v, uint::next_power_of_two(n)); } +#[doc = " +Returns the number of elements the vector can hold without reallocating +"] +fn capacity(&&v: [const T]) -> uint unsafe { + let repr: **unsafe::vec_repr = ::unsafe::reinterpret_cast(addr_of(v)); + (**repr).alloc / sys::size_of::() +} + #[doc = "Returns the length of a vector"] #[inline(always)] pure fn len(&&v: [const T]) -> uint unsafe { @@ -1801,6 +1810,16 @@ mod tests { unshift(x, 0); assert x == [0, 1, 2, 3]; } + + #[test] + fn test_capacity() { + let mut v = [0u64]; + reserve(v, 10u); + assert capacity(v) == 10u; + let mut v = [0u32]; + reserve(v, 10u); + assert capacity(v) == 10u; + } } // Local Variables: