From c047a4b436242b26b4894fdb3b1f14e6fd9f2974 Mon Sep 17 00:00:00 2001 From: Keegan McAllister Date: Thu, 25 Jul 2013 14:57:01 -0700 Subject: [PATCH] Replace some Option matching with higher order methods This shrinks the code and should be easier to read if we are used to the idioms. Also change one copy to clone() while we're here. --- src/components/gfx/font_context.rs | 14 ++++---------- src/components/gfx/opts.rs | 8 +++----- src/components/main/css/select_handler.rs | 15 ++++++--------- src/components/main/layout/box_builder.rs | 7 ++----- src/components/main/layout/float_context.rs | 5 +---- src/components/net/image/holder.rs | 20 ++++++-------------- src/components/script/dom/node.rs | 5 +---- src/components/util/vec.rs | 5 +---- 8 files changed, 24 insertions(+), 55 deletions(-) diff --git a/src/components/gfx/font_context.rs b/src/components/gfx/font_context.rs index 1eff76495cd..60f58d9571f 100644 --- a/src/components/gfx/font_context.rs +++ b/src/components/gfx/font_context.rs @@ -134,11 +134,8 @@ impl<'self> FontContext { let transformed_family_name = self.transform_family(family_name); debug!("(create font group) transformed family is `%s`", transformed_family_name); - let result = match self.font_list { - Some(ref fl) => { - fl.find_font_in_family(transformed_family_name, style) - }, - None => None, + let result = do self.font_list.chain_ref |fl| { + fl.find_font_in_family(transformed_family_name, style) }; let mut found = false; @@ -162,11 +159,8 @@ impl<'self> FontContext { let last_resort = FontList::get_last_resort_font_families(); for last_resort.iter().advance |family| { - let result = match self.font_list { - Some(ref fl) => { - fl.find_font_in_family(*family, style) - }, - None => None, + let result = do self.font_list.chain_ref |fl| { + fl.find_font_in_family(*family, style) }; for result.iter().advance |font_entry| { diff --git a/src/components/gfx/opts.rs b/src/components/gfx/opts.rs index 456d37869c9..e1b46027cc1 100644 --- a/src/components/gfx/opts.rs +++ b/src/components/gfx/opts.rs @@ -78,11 +78,9 @@ pub fn from_cmdline_args(args: &[~str]) -> Opts { None => 1, // FIXME: Number of cores. }; - let profiler_period: Option = - // if only flag is present, default to 5 second period - match getopts::opt_default(&opt_match, "p", "5") { - Some(period) => Some(float::from_str(period).get()), - None => None, + // if only flag is present, default to 5 second period + let profiler_period = do getopts::opt_default(&opt_match, "p", "5").map |period| { + float::from_str(*period).get() }; let exit_after_load = getopts::opt_present(&opt_match, "x"); diff --git a/src/components/main/css/select_handler.rs b/src/components/main/css/select_handler.rs index be7b21b3924..4a294aa2426 100644 --- a/src/components/main/css/select_handler.rs +++ b/src/components/main/css/select_handler.rs @@ -30,17 +30,14 @@ impl SelectHandler> for NodeSelectHandler { fn named_parent_node(&self, node: &AbstractNode, name: &str) -> Option> { - match node.parent_node() { - Some(parent) => { - do with_node_name(parent) |node_name| { - if eq_slice(name, node_name) { - Some(parent) - } else { - None - } + do node.parent_node().chain |parent| { + do with_node_name(parent) |node_name| { + if eq_slice(name, node_name) { + Some(parent) + } else { + None } } - None => None } } diff --git a/src/components/main/layout/box_builder.rs b/src/components/main/layout/box_builder.rs index 717bfd61a49..ff9457f69d4 100644 --- a/src/components/main/layout/box_builder.rs +++ b/src/components/main/layout/box_builder.rs @@ -390,11 +390,8 @@ impl LayoutTreeBuilder { } }; - let sibling_flow: Option = match sibling_generator { - None => None, - Some(gen) => Some(gen.flow) - }; - + let sibling_flow: Option = sibling_generator.map(|gen| gen.flow); + // TODO(eatkinson): use the value of the float property to // determine whether to float left or right. let is_float = if (node.is_element()) { diff --git a/src/components/main/layout/float_context.rs b/src/components/main/layout/float_context.rs index 6ccef10939e..04c7040acc0 100644 --- a/src/components/main/layout/float_context.rs +++ b/src/components/main/layout/float_context.rs @@ -291,10 +291,7 @@ impl FloatContextBase{ } } - match max_height { - None => None, - Some(h) => Some(h + self.offset.y) - } + max_height.map(|h| h + self.offset.y) } /// Given necessary info, finds the closest place a box can be positioned diff --git a/src/components/net/image/holder.rs b/src/components/net/image/holder.rs index 61173703c45..bf56b6413e3 100644 --- a/src/components/net/image/holder.rs +++ b/src/components/net/image/holder.rs @@ -57,14 +57,11 @@ impl ImageHolder { /// Query and update the current image size. pub fn get_size(&mut self) -> Option> { debug!("get_size() %?", self.url); - match self.get_image() { - Some(img) => { - let img_ref = img.get(); - self.cached_size = Size2D(img_ref.width as int, - img_ref.height as int); - Some(copy self.cached_size) - }, - None => None + do self.get_image().map |img| { + let img_ref = img.get(); + self.cached_size = Size2D(img_ref.width as int, + img_ref.height as int); + self.cached_size.clone() } } @@ -89,12 +86,7 @@ impl ImageHolder { // Clone isn't pure so we have to swap out the mutable image option let image = replace(&mut self.image, None); - - let result = match image { - Some(ref image) => Some(image.clone()), - None => None - }; - + let result = image.clone(); replace(&mut self.image, image); return result; diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs index d9ee80edaa1..8757f08d5d3 100644 --- a/src/components/script/dom/node.rs +++ b/src/components/script/dom/node.rs @@ -415,10 +415,7 @@ impl<'self, View> AbstractNode { impl Iterator> for AbstractNodeChildrenIterator { pub fn next(&mut self) -> Option> { let node = self.current_node; - self.current_node = match self.current_node { - None => None, - Some(node) => node.next_sibling(), - }; + self.current_node = self.current_node.chain(|node| node.next_sibling()); node } } diff --git a/src/components/util/vec.rs b/src/components/util/vec.rs index dab59bfa1da..fa34c52a350 100644 --- a/src/components/util/vec.rs +++ b/src/components/util/vec.rs @@ -11,10 +11,7 @@ pub trait BinarySearchMethods<'self, T: Ord + Eq> { impl<'self, T: Ord + Eq> BinarySearchMethods<'self, T> for &'self [T] { fn binary_search(&self, key: &T) -> Option<&'self T> { - match self.binary_search_index(key) { - None => None, - Some(i) => Some(&self[i]) - } + self.binary_search_index(key).map(|i| &self[*i]) } fn binary_search_index(&self, key: &T) -> Option {