assert!(xs == [1,2,0,4,3,0,0,6,5,0]);
}
+ #[test]
+ fn test_get_mut() {
+ let mut v = [0,1,2];
+ assert_eq!(v.get_mut(3), None);
+ v.get_mut(1).map(|e| *e = 7);
+ assert_eq!(v[1], 7);
+ let mut x = 2;
+ assert_eq!(v.get_mut(2), Some(&mut x));
+ }
+
#[test]
fn test_mut_chunks() {
let mut v = [0u8, 1, 2, 3, 4, 5, 6];
/// Extension methods for vectors such that their elements are
/// mutable.
pub trait MutableVector<'a, T> {
+ /// Returns a mutable reference to the element at the given index,
+ /// or `None` if the index is out of bounds
+ fn get_mut(self, index: uint) -> Option<&'a mut T>;
/// Work with `self` as a mut slice.
/// Primarily intended for getting a &mut [T] from a [T, ..N].
fn as_mut_slice(self) -> &'a mut [T];
}
impl<'a,T> MutableVector<'a, T> for &'a mut [T] {
+ #[inline]
+ fn get_mut(self, index: uint) -> Option<&'a mut T> {
+ if index < self.len() { Some(&mut self[index]) } else { None }
+ }
+
#[inline]
fn as_mut_slice(self) -> &'a mut [T] { self }