auto merge of #18740 : jbcrail/rust/implement-enum-set-len, r=alexcrichton

This commit adds the missing EnumSet method mentioned by @Gankro.

cc #18424
This commit is contained in:
bors 2014-11-08 16:41:39 +00:00
commit b80edf1d12
1 changed files with 20 additions and 1 deletions

View File

@ -18,7 +18,6 @@ use core::fmt;
// FIXME(conventions): implement BitXor
// FIXME(contentions): implement union family of methods? (general design may be wrong here)
// FIXME(conventions): implement len
#[deriving(Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
/// A specialized `Set` implementation to use enum types.
@ -92,6 +91,12 @@ impl<E:CLike> EnumSet<E> {
EnumSet {bits: 0}
}
/// Returns the number of elements in the given `EnumSet`.
#[unstable = "matches collection reform specification, waiting for dust to settle"]
pub fn len(&self) -> uint {
self.bits.count_ones()
}
/// Returns true if the `EnumSet` is empty.
#[unstable = "matches collection reform specification, waiting for dust to settle"]
pub fn is_empty(&self) -> bool {
@ -269,6 +274,20 @@ mod test {
assert_eq!("{A, C}", e.to_string().as_slice());
}
#[test]
fn test_len() {
let mut e = EnumSet::new();
assert_eq!(e.len(), 0);
e.insert(A);
e.insert(B);
e.insert(C);
assert_eq!(e.len(), 3);
e.remove(&A);
assert_eq!(e.len(), 2);
e.clear();
assert_eq!(e.len(), 0);
}
///////////////////////////////////////////////////////////////////////////
// intersect