mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
Rewrite ReverseChildrenIterator to return Temporary.
This commit is contained in:
parent
1834359f16
commit
bc14c2c23b
1 changed files with 12 additions and 10 deletions
|
@ -398,7 +398,7 @@ impl<'a> Iterator<JSRef<'a, Node>> for QuerySelectorIterator<'a> {
|
||||||
pub trait NodeHelpers<'a> {
|
pub trait NodeHelpers<'a> {
|
||||||
fn ancestors(self) -> AncestorIterator<'a>;
|
fn ancestors(self) -> AncestorIterator<'a>;
|
||||||
fn children(self) -> NodeChildrenIterator<'a>;
|
fn children(self) -> NodeChildrenIterator<'a>;
|
||||||
fn rev_children(self) -> ReverseChildrenIterator<'a>;
|
fn rev_children(self) -> ReverseChildrenIterator;
|
||||||
fn child_elements(self) -> ChildElementIterator<'a>;
|
fn child_elements(self) -> ChildElementIterator<'a>;
|
||||||
fn following_siblings(self) -> NodeChildrenIterator<'a>;
|
fn following_siblings(self) -> NodeChildrenIterator<'a>;
|
||||||
fn is_in_doc(self) -> bool;
|
fn is_in_doc(self) -> bool;
|
||||||
|
@ -816,9 +816,9 @@ impl<'a> NodeHelpers<'a> for JSRef<'a, Node> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn rev_children(self) -> ReverseChildrenIterator<'a> {
|
fn rev_children(self) -> ReverseChildrenIterator {
|
||||||
ReverseChildrenIterator {
|
ReverseChildrenIterator {
|
||||||
current: self.last_child.get().map(|node| *node.root().deref()),
|
current: self.last_child.get().root(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1022,14 +1022,14 @@ impl<'a> Iterator<JSRef<'a, Node>> for NodeChildrenIterator<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct ReverseChildrenIterator<'a> {
|
pub struct ReverseChildrenIterator {
|
||||||
current: Option<JSRef<'a, Node>>,
|
current: Option<Root<Node>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Iterator<JSRef<'a, Node>> for ReverseChildrenIterator<'a> {
|
impl Iterator<Temporary<Node>> for ReverseChildrenIterator {
|
||||||
fn next(&mut self) -> Option<JSRef<'a, Node>> {
|
fn next(&mut self) -> Option<Temporary<Node>> {
|
||||||
let node = self.current;
|
let node = self.current.r().map(Temporary::from_rooted);
|
||||||
self.current = node.and_then(|node| node.prev_sibling().map(|node| *node.root().deref()));
|
self.current = self.current.take().and_then(|node| node.r().prev_sibling()).root();
|
||||||
node
|
node
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1064,7 +1064,9 @@ impl<'a> TreeIterator<'a> {
|
||||||
impl<'a> Iterator<JSRef<'a, Node>> for TreeIterator<'a> {
|
impl<'a> Iterator<JSRef<'a, Node>> for TreeIterator<'a> {
|
||||||
fn next(&mut self) -> Option<JSRef<'a, Node>> {
|
fn next(&mut self) -> Option<JSRef<'a, Node>> {
|
||||||
let ret = self.stack.pop();
|
let ret = self.stack.pop();
|
||||||
ret.map(|node| self.stack.extend(node.rev_children()));
|
ret.map(|node| {
|
||||||
|
self.stack.extend(node.rev_children().map(|c| *c.root()))
|
||||||
|
});
|
||||||
ret
|
ret
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue