mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Remove unnecessary Box
around HTMLCollectionElementsIter::node_iter
.
This commit is contained in:
parent
25e3ae6915
commit
927d44753b
2 changed files with 26 additions and 23 deletions
|
@ -205,24 +205,24 @@ impl HTMLCollection {
|
||||||
HTMLCollection::create(window, root, box ElementChildFilter)
|
HTMLCollection::create(window, root, box ElementChildFilter)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn elements_iter_after(&self, after: &Node) -> HTMLCollectionElementsIter {
|
pub fn elements_iter_after<'a>(&'a self, after: &'a Node) -> impl Iterator<Item=Root<Element>> + 'a {
|
||||||
// Iterate forwards from a node.
|
// Iterate forwards from a node.
|
||||||
HTMLCollectionElementsIter {
|
HTMLCollectionElementsIter {
|
||||||
node_iter: box after.following_nodes(&self.root),
|
node_iter: after.following_nodes(&self.root),
|
||||||
root: Root::from_ref(&self.root),
|
root: Root::from_ref(&self.root),
|
||||||
filter: &self.filter,
|
filter: &self.filter,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn elements_iter(&self) -> HTMLCollectionElementsIter {
|
pub fn elements_iter<'a>(&'a self) -> impl Iterator<Item=Root<Element>> + 'a {
|
||||||
// Iterate forwards from the root.
|
// Iterate forwards from the root.
|
||||||
self.elements_iter_after(&*self.root)
|
self.elements_iter_after(&*self.root)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn elements_iter_before(&self, before: &Node) -> HTMLCollectionElementsIter {
|
pub fn elements_iter_before<'a>(&'a self, before: &'a Node) -> impl Iterator<Item=Root<Element>> + 'a {
|
||||||
// Iterate backwards from a node.
|
// Iterate backwards from a node.
|
||||||
HTMLCollectionElementsIter {
|
HTMLCollectionElementsIter {
|
||||||
node_iter: box before.preceding_nodes(&self.root),
|
node_iter: before.preceding_nodes(&self.root),
|
||||||
root: Root::from_ref(&self.root),
|
root: Root::from_ref(&self.root),
|
||||||
filter: &self.filter,
|
filter: &self.filter,
|
||||||
}
|
}
|
||||||
|
@ -234,13 +234,13 @@ impl HTMLCollection {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Make this generic, and avoid code duplication
|
// TODO: Make this generic, and avoid code duplication
|
||||||
pub struct HTMLCollectionElementsIter<'a> {
|
struct HTMLCollectionElementsIter<'a, I> {
|
||||||
node_iter: Box<Iterator<Item = Root<Node>>>,
|
node_iter: I,
|
||||||
root: Root<Node>,
|
root: Root<Node>,
|
||||||
filter: &'a Box<CollectionFilter>,
|
filter: &'a Box<CollectionFilter>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Iterator for HTMLCollectionElementsIter<'a> {
|
impl<'a, I: Iterator<Item=Root<Node>>> Iterator for HTMLCollectionElementsIter<'a, I> {
|
||||||
type Item = Root<Element>;
|
type Item = Root<Element>;
|
||||||
|
|
||||||
fn next(&mut self) -> Option<Self::Item> {
|
fn next(&mut self) -> Option<Self::Item> {
|
||||||
|
@ -284,13 +284,15 @@ impl HTMLCollectionMethods for HTMLCollection {
|
||||||
// Iterate forwards, starting at the cursor.
|
// Iterate forwards, starting at the cursor.
|
||||||
let offset = index - (cached_index + 1);
|
let offset = index - (cached_index + 1);
|
||||||
let node: Root<Node> = Root::upcast(element);
|
let node: Root<Node> = Root::upcast(element);
|
||||||
self.set_cached_cursor(index, self.elements_iter_after(&node).nth(offset as usize))
|
let mut iter = self.elements_iter_after(&node);
|
||||||
|
self.set_cached_cursor(index, iter.nth(offset as usize))
|
||||||
} else {
|
} else {
|
||||||
// The cursor is after the element we're looking for
|
// The cursor is after the element we're looking for
|
||||||
// Iterate backwards, starting at the cursor.
|
// Iterate backwards, starting at the cursor.
|
||||||
let offset = cached_index - (index + 1);
|
let offset = cached_index - (index + 1);
|
||||||
let node: Root<Node> = Root::upcast(element);
|
let node: Root<Node> = Root::upcast(element);
|
||||||
self.set_cached_cursor(index, self.elements_iter_before(&node).nth(offset as usize))
|
let mut iter = self.elements_iter_before(&node);
|
||||||
|
self.set_cached_cursor(index, iter.nth(offset as usize))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Cache miss
|
// Cache miss
|
||||||
|
|
|
@ -849,22 +849,23 @@ impl Node {
|
||||||
|
|
||||||
let tr = new_child();
|
let tr = new_child();
|
||||||
|
|
||||||
let after_node = if index == -1 {
|
|
||||||
None
|
|
||||||
} else {
|
|
||||||
match get_items().elements_iter()
|
|
||||||
.map(Root::upcast::<Node>)
|
|
||||||
.map(Some)
|
|
||||||
.chain(iter::once(None))
|
|
||||||
.nth(index as usize) {
|
|
||||||
None => return Err(Error::IndexSize),
|
|
||||||
Some(node) => node,
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
{
|
{
|
||||||
let tr_node = tr.upcast::<Node>();
|
let tr_node = tr.upcast::<Node>();
|
||||||
try!(self.InsertBefore(tr_node, after_node.r()));
|
if index == -1 {
|
||||||
|
try!(self.InsertBefore(tr_node, None));
|
||||||
|
} else {
|
||||||
|
let items = get_items();
|
||||||
|
let node = match items.elements_iter()
|
||||||
|
.map(Root::upcast::<Node>)
|
||||||
|
.map(Some)
|
||||||
|
.chain(iter::once(None))
|
||||||
|
.nth(index as usize) {
|
||||||
|
None => return Err(Error::IndexSize),
|
||||||
|
Some(node) => node,
|
||||||
|
};
|
||||||
|
try!(self.InsertBefore(tr_node, node.r()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(Root::upcast::<HTMLElement>(tr))
|
Ok(Root::upcast::<HTMLElement>(tr))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue