@@ -125,6 +125,31 @@ pub impl<T> Deque<T> {
125
125
self . hi = ( self . hi + 1 u) % self . elts . len ( ) ;
126
126
self . nelts += 1 u;
127
127
}
128
+
129
+ /// Reserve capacity for exactly `n` elements in the given deque,
130
+ /// doing nothing if `self`'s capacity is already equal to or greater
131
+ /// than the requested capacity
132
+ ///
133
+ /// # Arguments
134
+ ///
135
+ /// * n - The number of elements to reserve space for
136
+ fn reserve ( & mut self , n : uint ) {
137
+ vec:: reserve ( & mut self . elts , n) ;
138
+ }
139
+
140
+ /// Reserve capacity for at least `n` elements in the given deque,
141
+ /// over-allocating in case the caller needs to reserve additional
142
+ /// space.
143
+ ///
144
+ /// Do nothing if `self`'s capacity is already equal to or greater
145
+ /// than the requested capacity.
146
+ ///
147
+ /// # Arguments
148
+ ///
149
+ /// * n - The number of elements to reserve space for
150
+ fn reserve_at_least ( & mut self , n : uint ) {
151
+ vec:: reserve_at_least ( & mut self . elts , n) ;
152
+ }
128
153
}
129
154
130
155
/// Grow is only called on full elts, so nelts is also len(elts), unlike
@@ -149,6 +174,7 @@ mod tests {
149
174
use super :: * ;
150
175
use core:: cmp:: Eq ;
151
176
use core:: kinds:: Copy ;
177
+ use core:: vec:: capacity;
152
178
153
179
#[ test]
154
180
fn test_simple ( ) {
@@ -328,4 +354,29 @@ mod tests {
328
354
}
329
355
330
356
}
357
+
358
+ #[ test]
359
+ fn test_reserve ( ) {
360
+ let mut d = Deque :: new ( ) ;
361
+ d. add_back ( 0u64 ) ;
362
+ d. reserve ( 50 ) ;
363
+ assert_eq ! ( capacity( & mut d. elts) , 50 ) ;
364
+ let mut d = Deque :: new ( ) ;
365
+ d. add_back ( 0u32 ) ;
366
+ d. reserve ( 50 ) ;
367
+ assert_eq ! ( capacity( & mut d. elts) , 50 ) ;
368
+ }
369
+
370
+ #[ test]
371
+ fn test_reserve_at_least ( ) {
372
+ let mut d = Deque :: new ( ) ;
373
+ d. add_back ( 0u64 ) ;
374
+ d. reserve_at_least ( 50 ) ;
375
+ assert_eq ! ( capacity( & mut d. elts) , 64 ) ;
376
+ let mut d = Deque :: new ( ) ;
377
+ d. add_back ( 0u32 ) ;
378
+ d. reserve_at_least ( 50 ) ;
379
+ assert_eq ! ( capacity( & mut d. elts) , 64 ) ;
380
+ }
381
+
331
382
}
0 commit comments