committed by
Daniel Micay
parent
1f9c392389
commit
54e685d4fd
@@ -1159,7 +1159,7 @@ fn store_non_ref_bindings(bcx: @mut Block,
|
|||||||
add_clean_temp_mem(bcx, lldest, binding_info.ty);
|
add_clean_temp_mem(bcx, lldest, binding_info.ty);
|
||||||
temp_cleanups.push(lldest);
|
temp_cleanups.push(lldest);
|
||||||
temp_cleanups
|
temp_cleanups
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
TrByRef => {}
|
TrByRef => {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -235,19 +235,24 @@ impl<T> Option<T> {
|
|||||||
self.take().map_consume_default(def, blk)
|
self.take().map_consume_default(def, blk)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Apply a function to the contained value or do nothing
|
/// Apply a function to the contained value or do nothing.
|
||||||
pub fn mutate(&mut self, f: &fn(T) -> T) {
|
/// Returns true if the contained value was mutated.
|
||||||
|
pub fn mutate(&mut self, f: &fn(T) -> T) -> bool {
|
||||||
if self.is_some() {
|
if self.is_some() {
|
||||||
*self = Some(f(self.take_unwrap()));
|
*self = Some(f(self.take_unwrap()));
|
||||||
}
|
true
|
||||||
|
} else { false }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Apply a function to the contained value or set it to a default
|
/// Apply a function to the contained value or set it to a default.
|
||||||
pub fn mutate_default(&mut self, def: T, f: &fn(T) -> T) {
|
/// Returns true if the contained value was mutated, or false if set to the default.
|
||||||
|
pub fn mutate_default(&mut self, def: T, f: &fn(T) -> T) -> bool {
|
||||||
if self.is_some() {
|
if self.is_some() {
|
||||||
*self = Some(f(self.take_unwrap()));
|
*self = Some(f(self.take_unwrap()));
|
||||||
|
true
|
||||||
} else {
|
} else {
|
||||||
*self = Some(def);
|
*self = Some(def);
|
||||||
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -575,4 +580,18 @@ mod tests {
|
|||||||
assert_eq!(it.size_hint(), (0, Some(0)));
|
assert_eq!(it.size_hint(), (0, Some(0)));
|
||||||
assert!(it.next().is_none());
|
assert!(it.next().is_none());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_mutate() {
|
||||||
|
let mut x = Some(3i);
|
||||||
|
assert!(x.mutate(|i| i+1));
|
||||||
|
assert_eq!(x, Some(4i));
|
||||||
|
assert!(x.mutate_default(0, |i| i+1));
|
||||||
|
assert_eq!(x, Some(5i));
|
||||||
|
x = None;
|
||||||
|
assert!(!x.mutate(|i| i+1));
|
||||||
|
assert_eq!(x, None);
|
||||||
|
assert!(!x.mutate_default(0i, |i| i+1));
|
||||||
|
assert_eq!(x, Some(0i));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user