about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libcore/iter/mod.rs10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/libcore/iter/mod.rs b/src/libcore/iter/mod.rs
index 3999db0d63c..5dce60b79c9 100644
--- a/src/libcore/iter/mod.rs
+++ b/src/libcore/iter/mod.rs
@@ -1099,6 +1099,16 @@ impl<I: Iterator, P> Iterator for Filter<I, P> where P: FnMut(&I::Item) -> bool
         let (_, upper) = self.iter.size_hint();
         (0, upper) // can't know a lower bound, due to the predicate
     }
+
+    #[inline]
+    fn count(self) -> usize {
+        let (mut c, mut predicate, mut iter) = (0, self.predicate, self.iter);
+        for x in iter.by_ref() {
+            // branchless count
+            c += (&mut predicate)(&x) as usize;
+        }
+        c
+    }
 }
 
 #[stable(feature = "rust1", since = "1.0.0")]