Skip to content

Commit be5d21e

Browse files
committed
Vec: add resize(&mut self, uint, T).
This is a convenience wrapper on top of `grow()` and `truncate()`. Signed-off-by: NODA, Kai <[email protected]>
1 parent 7765993 commit be5d21e

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

src/libcollections/vec.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,31 @@ impl<T: Clone> Vec<T> {
352352
}
353353
}
354354

355+
/// Resizes the `Vec` in-place so that `len()` equals to `new_len`.
356+
///
357+
/// Calls either `grow()` or `truncate()` depending on whether `new_len` is
358+
/// larger than the current value of `len()` or not.
359+
///
360+
/// # Example
361+
///
362+
/// ```
363+
/// let mut vec = vec!["hello", "world"];
364+
/// vec.resize(1, "world");
365+
/// assert_eq!(vec!["hello"], vec);
366+
/// vec.resize(3, "world");
367+
/// assert_eq!(vec!["hello", "world", "world"], vec);
368+
/// ```
369+
#[inline]
370+
#[experimental]
371+
pub fn resize(&mut self, new_len: uint, value: T) {
372+
let l = self.len();
373+
if l < new_len {
374+
self.grow(new_len - l, value)
375+
} else {
376+
self.truncate(new_len)
377+
}
378+
}
379+
355380
/// Partitions a vector based on a predicate.
356381
///
357382
/// Clones the elements of the vector, partitioning them into two `Vec`s

0 commit comments

Comments
 (0)