Skip to content

Commit e6f9b08

Browse files
committed
Implement size_hint() on all remaining Iterators
Add size_hint() to the Iterators in libextra and the Iterator in libsyntax. Skip deque for the moment, as it's being worked on elsewhere.
1 parent 20016b9 commit e6f9b08

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

src/libextra/priority_queue.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,9 @@ pub struct PriorityQueueIterator <'self, T> {
186186
impl<'self, T> Iterator<&'self T> for PriorityQueueIterator<'self, T> {
187187
#[inline]
188188
fn next(&mut self) -> Option<(&'self T)> { self.iter.next() }
189+
190+
#[inline]
191+
fn size_hint(&self) -> (uint, Option<uint>) { self.iter.size_hint() }
189192
}
190193

191194
#[cfg(test)]

src/libextra/treemap.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,14 +196,15 @@ impl<K: TotalOrd, V> TreeMap<K, V> {
196196
/// Get a lazy iterator over the key-value pairs in the map.
197197
/// Requires that it be frozen (immutable).
198198
pub fn iter<'a>(&'a self) -> TreeMapIterator<'a, K, V> {
199-
TreeMapIterator{stack: ~[], node: &self.root}
199+
TreeMapIterator{stack: ~[], node: &self.root, remaining: self.length}
200200
}
201201
}
202202

203203
/// Lazy forward iterator over a map
204204
pub struct TreeMapIterator<'self, K, V> {
205205
priv stack: ~[&'self ~TreeNode<K, V>],
206-
priv node: &'self Option<~TreeNode<K, V>>
206+
priv node: &'self Option<~TreeNode<K, V>>,
207+
priv remaining: uint
207208
}
208209

209210
impl<'self, K, V> Iterator<(&'self K, &'self V)> for TreeMapIterator<'self, K, V> {
@@ -220,12 +221,18 @@ impl<'self, K, V> Iterator<(&'self K, &'self V)> for TreeMapIterator<'self, K, V
220221
None => {
221222
let res = self.stack.pop();
222223
self.node = &res.right;
224+
self.remaining -= 1;
223225
return Some((&res.key, &res.value));
224226
}
225227
}
226228
}
227229
None
228230
}
231+
232+
#[inline]
233+
fn size_hint(&self) -> (uint, Option<uint>) {
234+
(self.remaining, Some(self.remaining))
235+
}
229236
}
230237

231238
impl<'self, T> Iterator<&'self T> for TreeSetIterator<'self, T> {

src/libsyntax/opt_vec.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,4 +146,12 @@ impl<'self, T> Iterator<&'self T> for OptVecIterator<'self, T> {
146146
None => None
147147
}
148148
}
149+
150+
#[inline]
151+
fn size_hint(&self) -> (uint, Option<uint>) {
152+
match self.iter {
153+
Some(ref x) => x.size_hint(),
154+
None => (0, Some(0))
155+
}
156+
}
149157
}

0 commit comments

Comments
 (0)