style: Remove a few more unuseful traversals now we can.

This commit is contained in:
Emilio Cobos Álvarez 2016-07-25 21:16:53 -07:00
parent 354dc66029
commit c3a727ebda
No known key found for this signature in database
GPG key ID: 056B727BB9C1027C
5 changed files with 64 additions and 73 deletions

View file

@ -1287,6 +1287,31 @@ impl TreeIterator {
depth: 0,
}
}
pub fn next_skipping_children(&mut self) -> Option<Root<Node>> {
let current = match self.current.take() {
None => return None,
Some(current) => current,
};
self.next_skipping_children_impl(current)
}
fn next_skipping_children_impl(&mut self, current: Root<Node>) -> Option<Root<Node>> {
for ancestor in current.inclusive_ancestors() {
if self.depth == 0 {
break;
}
if let Some(next_sibling) = ancestor.GetNextSibling() {
self.current = Some(next_sibling);
return Some(current);
}
self.depth -= 1;
}
debug_assert!(self.depth == 0);
self.current = None;
Some(current)
}
}
impl Iterator for TreeIterator {
@ -1303,19 +1328,8 @@ impl Iterator for TreeIterator {
self.depth += 1;
return Some(current);
};
for ancestor in current.inclusive_ancestors() {
if self.depth == 0 {
break;
}
if let Some(next_sibling) = ancestor.GetNextSibling() {
self.current = Some(next_sibling);
return Some(current);
}
self.depth -= 1;
}
debug_assert!(self.depth == 0);
self.current = None;
Some(current)
self.next_skipping_children_impl(current)
}
}