about summary refs log tree commit diff
path: root/src/libcollections
diff options
context:
space:
mode:
authorJoseph Crail <jbcrail@gmail.com>2014-11-07 12:13:45 -0500
committerJoseph Crail <jbcrail@gmail.com>2014-11-07 16:08:43 -0500
commita79d4be39cf99ed4dba1c757400a3ea708956653 (patch)
tree0add644d7f3a10b9af2da1943a79329d33f46838 /src/libcollections
parent0a3cbf8cf44e41072c11277363a5100cf3a8a161 (diff)
downloadrust-a79d4be39cf99ed4dba1c757400a3ea708956653.tar.gz
rust-a79d4be39cf99ed4dba1c757400a3ea708956653.zip
Implement len() for EnumSet.
Diffstat (limited to 'src/libcollections')
-rw-r--r--src/libcollections/enum_set.rs21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/libcollections/enum_set.rs b/src/libcollections/enum_set.rs
index 1acdaef9c91..68991628b22 100644
--- a/src/libcollections/enum_set.rs
+++ b/src/libcollections/enum_set.rs
@@ -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