diff options
author | bors-servo <release+servo@mozilla.com> | 2013-08-01 11:48:31 -0700 |
---|---|---|
committer | bors-servo <release+servo@mozilla.com> | 2013-08-01 11:48:31 -0700 |
commit | bb51a9d6fb784e71ac279e501e21064fe6bdad5b (patch) | |
tree | 08e4080bb7e717015a44c719829b4afd9379c878 | |
parent | 13afd25679a3d39692a3dc745339d978a6d133b7 (diff) | |
parent | 95f71f8fb9ae82be7232f511b46ad0c6e3450304 (diff) | |
download | servo-bb51a9d6fb784e71ac279e501e21064fe6bdad5b.tar.gz servo-bb51a9d6fb784e71ac279e501e21064fe6bdad5b.zip |
auto merge of #657 : tkuehn/servo/master, r=metajack
-rw-r--r-- | src/components/main/constellation.rs | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/src/components/main/constellation.rs b/src/components/main/constellation.rs index cb474b088d7..d1ae44f7bfe 100644 --- a/src/components/main/constellation.rs +++ b/src/components/main/constellation.rs @@ -51,14 +51,13 @@ struct FrameTree { // Need to clone the FrameTrees, but _not_ the Pipelines impl Clone for FrameTree { fn clone(&self) -> FrameTree { - let mut children = ~[]; - for self.children.iter().advance |&frame_tree| { - children.push(@mut (*frame_tree).clone()); - } + let mut children = do self.children.iter().transform |&frame_tree| { + @mut (*frame_tree).clone() + }; FrameTree { pipeline: self.pipeline, parent: self.parent.clone(), - children: children, + children: children.collect(), } } } @@ -88,11 +87,10 @@ impl FrameTree { /// Returns the frame tree whose key is id fn find_mut(@mut self, id: PipelineId) -> Option<@mut FrameTree> { if self.pipeline.id == id { return Some(self); } - for self.children.iter().advance |frame_tree| { - let found = frame_tree.find_mut(id); - if found.is_some() { return found; } - } - None + let mut finder = do self.children.iter().filter_map |frame_tree| { + frame_tree.find_mut(id) + }; + finder.next() } /// Replaces a node of the frame tree in place. Returns the node that was removed or the original node @@ -115,14 +113,10 @@ impl FrameTree { } fn to_sendable(&self) -> SendableFrameTree { - let mut sendable_frame_tree = SendableFrameTree { + let sendable_frame_tree = SendableFrameTree { pipeline: (*self.pipeline).clone(), - children: ~[], + children: self.children.iter().transform(|frame_tree| frame_tree.to_sendable()).collect(), }; - - for self.children.iter().advance |frame_tree| { - sendable_frame_tree.children.push(frame_tree.to_sendable()); - } sendable_frame_tree } @@ -141,9 +135,7 @@ impl Iterator<@mut FrameTree> for FrameTreeIterator { fn next(&mut self) -> Option<@mut FrameTree> { if !self.stack.is_empty() { let next = self.stack.pop(); - for next.children.iter().advance |&child| { - self.stack.push(child); - } + self.stack.push_all(next.children); Some(next) } else { None |