about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorblake2-ppc <blake2-ppc>2013-07-20 17:10:00 +0200
committerblake2-ppc <blake2-ppc>2013-07-30 01:48:17 +0200
commit5d4af58c1d2abc0895d170185796e837f37b16cb (patch)
treedbf402e4a4504e7a7534f9291dd1c15e8d0974e9 /src/libstd
parent4b2931c90fbe152ca1dd3111985057778dad1ba9 (diff)
downloadrust-5d4af58c1d2abc0895d170185796e837f37b16cb.tar.gz
rust-5d4af58c1d2abc0895d170185796e837f37b16cb.zip
iterator: implement size_hint() for FlatMap
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/iterator.rs10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/libstd/iterator.rs b/src/libstd/iterator.rs
index 33d863f3716..87390781802 100644
--- a/src/libstd/iterator.rs
+++ b/src/libstd/iterator.rs
@@ -1271,6 +1271,16 @@ impl<'self, A, T: Iterator<A>, B, U: Iterator<B>> Iterator<B> for
             }
         }
     }
+
+    #[inline]
+    fn size_hint(&self) -> (uint, Option<uint>) {
+        let (flo, fhi) = self.frontiter.map_default((0, Some(0)), |it| it.size_hint());
+        let (blo, bhi) = self.backiter.map_default((0, Some(0)), |it| it.size_hint());
+        match (self.iter.size_hint(), fhi, bhi) {
+            ((0, Some(0)), Some(a), Some(b)) => (flo + blo, Some(a + b)),
+            _ => (flo + blo, None)
+        }
+    }
 }
 
 impl<'self,