1
Fork 0

Add option::get_zero

r=brson

Closes #3797
This commit is contained in:
Tim Chevalier 2013-01-03 15:36:23 -08:00
parent a933cdfbf1
commit 1f1e7e9616

View file

@ -49,6 +49,7 @@ use option;
use ptr;
use str;
use util;
use num::Zero;
/// The option type
#[deriving_eq]
@ -170,6 +171,12 @@ pub pure fn is_some<T>(opt: &Option<T>) -> bool {
!is_none(opt)
}
pub pure fn get_zero<T: Copy Zero>(opt: Option<T>) -> T {
//! Returns the contained value or zero (for this type)
match opt { Some(copy x) => x, None => Zero::zero() }
}
pub pure fn get_default<T: Copy>(opt: Option<T>, def: T) -> T {
//! Returns the contained value or a default
@ -333,6 +340,11 @@ impl<T: Copy> Option<T> {
}
}
impl<T: Copy Zero> Option<T> {
#[inline(always)]
pure fn get_zero(self) -> T { get_zero(self) }
}
#[test]
fn test_unwrap_ptr() {
let x = ~0;
@ -407,6 +419,14 @@ fn test_option_while_some() {
assert i == 11;
}
#[test]
fn test_get_zero() {
let some_stuff = Some(42);
assert some_stuff.get_zero() == 42;
let no_stuff: Option<int> = None;
assert no_stuff.get_zero() == 0;
}
// Local Variables:
// mode: rust;
// fill-column: 78;