about summary refs log tree commit diff
path: root/src/libextra
diff options
context:
space:
mode:
authorblake2-ppc <blake2-ppc>2013-07-06 05:42:45 +0200
committerblake2-ppc <blake2-ppc>2013-07-06 07:26:05 +0200
commit0ff5c17cbbef0aedfa2eb1142cbf7a87abfd1d05 (patch)
treef02f83d13c4308e1f4a1f0468eb07751dfe33a4d /src/libextra
parent8a3267672c43e7cc116e588dd21998d14fc21ba4 (diff)
downloadrust-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.rs20
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);