aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/htmlcollection.rs
diff options
context:
space:
mode:
authorCorey Farwell <coreyf@rwell.org>2017-06-23 18:51:46 -0400
committerCorey Farwell <coreyf@rwell.org>2017-06-23 18:51:46 -0400
commit0cabc5c7fd1849fca9caf5668f6370e4c9e3ad4e (patch)
tree7e6c01cadb35245a2d9e3b95bb96cc7a2991464d /components/script/dom/htmlcollection.rs
parentdaed0a51839112054036f220ba1a6f03a8325b9b (diff)
downloadservo-0cabc5c7fd1849fca9caf5668f6370e4c9e3ad4e.tar.gz
servo-0cabc5c7fd1849fca9caf5668f6370e4c9e3ad4e.zip
Replace iterator struct with anonymous return iterator types.
Similar to https://github.com/servo/servo/pull/17488.
Diffstat (limited to 'components/script/dom/htmlcollection.rs')
-rw-r--r--components/script/dom/htmlcollection.rs36
1 files changed, 6 insertions, 30 deletions
diff --git a/components/script/dom/htmlcollection.rs b/components/script/dom/htmlcollection.rs
index 814ea766f53..6cc3dbb8dc6 100644
--- a/components/script/dom/htmlcollection.rs
+++ b/components/script/dom/htmlcollection.rs
@@ -224,11 +224,9 @@ impl HTMLCollection {
pub fn elements_iter_after<'a>(&'a self, after: &'a Node) -> impl Iterator<Item=Root<Element>> + 'a {
// Iterate forwards from a node.
- HTMLCollectionElementsIter {
- node_iter: after.following_nodes(&self.root),
- root: Root::from_ref(&self.root),
- filter: &self.filter,
- }
+ after.following_nodes(&self.root)
+ .filter_map(Root::downcast)
+ .filter(move |element| self.filter.filter(&element, &self.root))
}
pub fn elements_iter<'a>(&'a self) -> impl Iterator<Item=Root<Element>> + 'a {
@@ -238,11 +236,9 @@ impl HTMLCollection {
pub fn elements_iter_before<'a>(&'a self, before: &'a Node) -> impl Iterator<Item=Root<Element>> + 'a {
// Iterate backwards from a node.
- HTMLCollectionElementsIter {
- node_iter: before.preceding_nodes(&self.root),
- root: Root::from_ref(&self.root),
- filter: &self.filter,
- }
+ before.preceding_nodes(&self.root)
+ .filter_map(Root::downcast)
+ .filter(move |element| self.filter.filter(&element, &self.root))
}
pub fn root_node(&self) -> Root<Node> {
@@ -250,26 +246,6 @@ impl HTMLCollection {
}
}
-// TODO: Make this generic, and avoid code duplication
-struct HTMLCollectionElementsIter<'a, I> {
- node_iter: I,
- root: Root<Node>,
- filter: &'a Box<CollectionFilter>,
-}
-
-impl<'a, I: Iterator<Item=Root<Node>>> Iterator for HTMLCollectionElementsIter<'a, I> {
- type Item = Root<Element>;
-
- fn next(&mut self) -> Option<Self::Item> {
- let filter = &self.filter;
- let root = &self.root;
- self.node_iter.by_ref()
- .filter_map(Root::downcast)
- .filter(|element| filter.filter(&element, root))
- .next()
- }
-}
-
impl HTMLCollectionMethods for HTMLCollection {
// https://dom.spec.whatwg.org/#dom-htmlcollection-length
fn Length(&self) -> u32 {