diff --git a/src/libextra/deque.rs b/src/libextra/deque.rs index 3dfc90002d3..c537167946c 100644 --- a/src/libextra/deque.rs +++ b/src/libextra/deque.rs @@ -14,7 +14,8 @@ use std::uint; use std::vec; use std::iterator::FromIterator; -static INITIAL_CAPACITY: uint = 32u; // 2^5 +static INITIAL_CAPACITY: uint = 8u; // 2^3 +static MINIMUM_CAPACITY: uint = 2u; #[allow(missing_doc)] pub struct Deque { @@ -43,8 +44,13 @@ impl Mutable for Deque { impl Deque { /// Create an empty Deque pub fn new() -> Deque { + Deque::with_capacity(INITIAL_CAPACITY) + } + + /// Create an empty Deque with space for at least `n` elements. + pub fn with_capacity(n: uint) -> Deque { Deque{nelts: 0, lo: 0, - elts: vec::from_fn(INITIAL_CAPACITY, |_| None)} + elts: vec::from_fn(uint::max(MINIMUM_CAPACITY, n), |_| None)} } /// Return a reference to the first element in the deque @@ -527,6 +533,16 @@ mod tests { } + #[test] + fn test_with_capacity() { + let mut d = Deque::with_capacity(0); + d.add_back(1); + assert_eq!(d.len(), 1); + let mut d = Deque::with_capacity(50); + d.add_back(1); + assert_eq!(d.len(), 1); + } + #[test] fn test_reserve() { let mut d = Deque::new();