diff options
| author | blake2-ppc <blake2-ppc> | 2013-07-06 05:42:45 +0200 |
|---|---|---|
| committer | blake2-ppc <blake2-ppc> | 2013-07-06 07:26:05 +0200 |
| commit | 0ff5c17cbbef0aedfa2eb1142cbf7a87abfd1d05 (patch) | |
| tree | f02f83d13c4308e1f4a1f0468eb07751dfe33a4d /src/libextra | |
| parent | 8a3267672c43e7cc116e588dd21998d14fc21ba4 (diff) | |
| download | rust-0ff5c17cbbef0aedfa2eb1142cbf7a87abfd1d05.tar.gz rust-0ff5c17cbbef0aedfa2eb1142cbf7a87abfd1d05.zip | |
deque: Implement Deque::with_capacity. Lower initial capacity to 8.
We need a reasonably small initial capacity to make Deques faster for the common case.
Diffstat (limited to 'src/libextra')
| -rw-r--r-- | src/libextra/deque.rs | 20 |
1 files changed, 18 insertions, 2 deletions
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<T> { @@ -43,8 +44,13 @@ impl<T> Mutable for Deque<T> { impl<T> Deque<T> { /// Create an empty Deque pub fn new() -> Deque<T> { + Deque::with_capacity(INITIAL_CAPACITY) + } + + /// Create an empty Deque with space for at least `n` elements. + pub fn with_capacity(n: uint) -> Deque<T> { 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 @@ -528,6 +534,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(); d.add_back(0u64); |
