From caa5007a728e0df237b92d79054f2ab340c64b1d Mon Sep 17 00:00:00 2001 From: Paolo Borelli Date: Tue, 18 Dec 2018 09:24:34 +0100 Subject: [PATCH 1/2] property_bag: do not store the key string It is not used anywhere anymore, we just need the (attr, value) pair --- rsvg_internals/src/clip_path.rs | 2 +- rsvg_internals/src/create_node.rs | 2 +- rsvg_internals/src/filters/blend.rs | 2 +- rsvg_internals/src/filters/color_matrix.rs | 6 +-- .../src/filters/component_transfer.rs | 2 +- rsvg_internals/src/filters/composite.rs | 2 +- rsvg_internals/src/filters/convolve_matrix.rs | 8 +-- .../src/filters/displacement_map.rs | 2 +- rsvg_internals/src/filters/gaussian_blur.rs | 2 +- rsvg_internals/src/filters/image.rs | 2 +- .../src/filters/light/light_source.rs | 2 +- rsvg_internals/src/filters/light/lighting.rs | 6 +-- rsvg_internals/src/filters/merge.rs | 2 +- rsvg_internals/src/filters/mod.rs | 4 +- rsvg_internals/src/filters/morphology.rs | 2 +- rsvg_internals/src/filters/node.rs | 4 +- rsvg_internals/src/filters/offset.rs | 2 +- rsvg_internals/src/filters/turbulence.rs | 2 +- rsvg_internals/src/gradient.rs | 2 +- rsvg_internals/src/image.rs | 2 +- rsvg_internals/src/link.rs | 2 +- rsvg_internals/src/marker.rs | 2 +- rsvg_internals/src/mask.rs | 2 +- rsvg_internals/src/node.rs | 6 +-- rsvg_internals/src/pattern.rs | 2 +- rsvg_internals/src/property_bag.rs | 51 +++++++++---------- rsvg_internals/src/shapes.rs | 12 ++--- rsvg_internals/src/state.rs | 2 +- rsvg_internals/src/stop.rs | 2 +- rsvg_internals/src/structure.rs | 6 +-- rsvg_internals/src/style.rs | 2 +- rsvg_internals/src/text.rs | 6 +-- rsvg_internals/src/xml.rs | 2 +- 33 files changed, 76 insertions(+), 79 deletions(-) diff --git a/rsvg_internals/src/clip_path.rs b/rsvg_internals/src/clip_path.rs index d674e10f8..24d87a918 100644 --- a/rsvg_internals/src/clip_path.rs +++ b/rsvg_internals/src/clip_path.rs @@ -80,7 +80,7 @@ impl NodeClipPath { impl NodeTrait for NodeClipPath { fn set_atts(&self, _: &RsvgNode, _: *const RsvgHandle, pbag: &PropertyBag<'_>) -> NodeResult { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::ClipPathUnits => self.units.set(parse("clipPathUnits", value, ())?), diff --git a/rsvg_internals/src/create_node.rs b/rsvg_internals/src/create_node.rs index fda72e45d..086d0973a 100644 --- a/rsvg_internals/src/create_node.rs +++ b/rsvg_internals/src/create_node.rs @@ -276,7 +276,7 @@ pub fn create_node_and_register_id( let mut id = None; let mut class = None; - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::Id => id = Some(value), Attribute::Class => class = Some(value), diff --git a/rsvg_internals/src/filters/blend.rs b/rsvg_internals/src/filters/blend.rs index 27accc412..91589f3d0 100644 --- a/rsvg_internals/src/filters/blend.rs +++ b/rsvg_internals/src/filters/blend.rs @@ -53,7 +53,7 @@ impl NodeTrait for Blend { ) -> NodeResult { self.base.set_atts(node, handle, pbag)?; - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::In2 => { self.in2.replace(Some(Input::parse(attr, value)?)); diff --git a/rsvg_internals/src/filters/color_matrix.rs b/rsvg_internals/src/filters/color_matrix.rs index c0488f834..ed71c5b03 100644 --- a/rsvg_internals/src/filters/color_matrix.rs +++ b/rsvg_internals/src/filters/color_matrix.rs @@ -58,7 +58,7 @@ impl NodeTrait for ColorMatrix { // First, determine the operation type. let mut operation_type = OperationType::Matrix; - for (_, attr, value) in pbag.iter().filter(|(_, attr, _)| *attr == Attribute::Type) { + for (attr, value) in pbag.iter().filter(|(attr, _)| *attr == Attribute::Type) { operation_type = OperationType::parse(attr, value)?; } @@ -76,9 +76,9 @@ impl NodeTrait for ColorMatrix { ), ); } else { - for (_, attr, value) in pbag + for (attr, value) in pbag .iter() - .filter(|(_, attr, _)| *attr == Attribute::Values) + .filter(|(attr, _)| *attr == Attribute::Values) { let new_matrix = match operation_type { OperationType::LuminanceToAlpha => unreachable!(), diff --git a/rsvg_internals/src/filters/component_transfer.rs b/rsvg_internals/src/filters/component_transfer.rs index 0906a7ad5..f3b42f348 100644 --- a/rsvg_internals/src/filters/component_transfer.rs +++ b/rsvg_internals/src/filters/component_transfer.rs @@ -221,7 +221,7 @@ impl NodeTrait for FuncX { _handle: *const RsvgHandle, pbag: &PropertyBag<'_>, ) -> NodeResult { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::Type => self.function_type.set(FunctionType::parse(attr, value)?), Attribute::TableValues => { diff --git a/rsvg_internals/src/filters/composite.rs b/rsvg_internals/src/filters/composite.rs index b86a62aa7..509d3eb0e 100644 --- a/rsvg_internals/src/filters/composite.rs +++ b/rsvg_internals/src/filters/composite.rs @@ -69,7 +69,7 @@ impl NodeTrait for Composite { ) -> NodeResult { self.base.set_atts(node, handle, pbag)?; - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::In2 => { self.in2.replace(Some(Input::parse(Attribute::In2, value)?)); diff --git a/rsvg_internals/src/filters/convolve_matrix.rs b/rsvg_internals/src/filters/convolve_matrix.rs index 7c48337d9..cf4d39e69 100644 --- a/rsvg_internals/src/filters/convolve_matrix.rs +++ b/rsvg_internals/src/filters/convolve_matrix.rs @@ -64,7 +64,7 @@ impl NodeTrait for ConvolveMatrix { ) -> NodeResult { self.base.set_atts(node, handle, pbag)?; - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::Order => self.order.set( parsers::integer_optional_integer(value) @@ -124,7 +124,7 @@ impl NodeTrait for ConvolveMatrix { } // target_x and target_y depend on order. - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::TargetX => self.target_x.set(Some( parsers::integer(value) @@ -167,9 +167,9 @@ impl NodeTrait for ConvolveMatrix { } // Finally, parse the kernel matrix. - for (_, attr, value) in pbag + for (attr, value) in pbag .iter() - .filter(|(_, attr, _)| *attr == Attribute::KernelMatrix) + .filter(|(attr, _)| *attr == Attribute::KernelMatrix) { self.kernel_matrix.replace(Some({ let number_of_elements = self.order.get().0 as usize * self.order.get().1 as usize; diff --git a/rsvg_internals/src/filters/displacement_map.rs b/rsvg_internals/src/filters/displacement_map.rs index 006879db2..bde7bbb61 100644 --- a/rsvg_internals/src/filters/displacement_map.rs +++ b/rsvg_internals/src/filters/displacement_map.rs @@ -55,7 +55,7 @@ impl NodeTrait for DisplacementMap { ) -> NodeResult { self.base.set_atts(node, handle, pbag)?; - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::In2 => { self.in2.replace(Some(Input::parse(Attribute::In2, value)?)); diff --git a/rsvg_internals/src/filters/gaussian_blur.rs b/rsvg_internals/src/filters/gaussian_blur.rs index f508f9218..ba782d06e 100644 --- a/rsvg_internals/src/filters/gaussian_blur.rs +++ b/rsvg_internals/src/filters/gaussian_blur.rs @@ -51,7 +51,7 @@ impl NodeTrait for GaussianBlur { ) -> NodeResult { self.base.set_atts(node, handle, pbag)?; - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::StdDeviation => self.std_deviation.set( parsers::number_optional_number(value) diff --git a/rsvg_internals/src/filters/image.rs b/rsvg_internals/src/filters/image.rs index 56dad6770..4d84fbe1b 100644 --- a/rsvg_internals/src/filters/image.rs +++ b/rsvg_internals/src/filters/image.rs @@ -194,7 +194,7 @@ impl NodeTrait for Image { ) -> NodeResult { self.base.set_atts(node, handle, pbag)?; - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::PreserveAspectRatio => { self.aspect.set(parse("preserveAspectRatio", value, ())?) diff --git a/rsvg_internals/src/filters/light/light_source.rs b/rsvg_internals/src/filters/light/light_source.rs index 943d4b07b..fc028c3a0 100644 --- a/rsvg_internals/src/filters/light/light_source.rs +++ b/rsvg_internals/src/filters/light/light_source.rs @@ -207,7 +207,7 @@ impl NodeTrait for LightSource { _handle: *const RsvgHandle, pbag: &PropertyBag<'_>, ) -> NodeResult { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match self { LightSource::Distant { ref azimuth, diff --git a/rsvg_internals/src/filters/light/lighting.rs b/rsvg_internals/src/filters/light/lighting.rs index 5b3c267b3..f654c596a 100644 --- a/rsvg_internals/src/filters/light/lighting.rs +++ b/rsvg_internals/src/filters/light/lighting.rs @@ -106,7 +106,7 @@ impl NodeTrait for Lighting { ) -> NodeResult { self.base.set_atts(node, handle, pbag)?; - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::SurfaceScale => self.surface_scale.set( parsers::number(value).map_err(|err| NodeError::attribute_error(attr, err))?, @@ -133,7 +133,7 @@ impl NodeTrait for Lighting { Data::Diffuse { ref diffuse_constant, } => { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::DiffuseConstant => diffuse_constant.set( parsers::number(value) @@ -157,7 +157,7 @@ impl NodeTrait for Lighting { ref specular_constant, ref specular_exponent, } => { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::SpecularConstant => specular_constant.set( parsers::number(value) diff --git a/rsvg_internals/src/filters/merge.rs b/rsvg_internals/src/filters/merge.rs index fa5bb8c4b..d1e2e86d2 100644 --- a/rsvg_internals/src/filters/merge.rs +++ b/rsvg_internals/src/filters/merge.rs @@ -63,7 +63,7 @@ impl NodeTrait for MergeNode { _handle: *const RsvgHandle, pbag: &PropertyBag<'_>, ) -> NodeResult { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::In => { self.in_.replace(Some(Input::parse(Attribute::In, value)?)); diff --git a/rsvg_internals/src/filters/mod.rs b/rsvg_internals/src/filters/mod.rs index 769091b30..fa17c52f7 100644 --- a/rsvg_internals/src/filters/mod.rs +++ b/rsvg_internals/src/filters/mod.rs @@ -145,7 +145,7 @@ impl NodeTrait for Primitive { let check_units_and_ensure_nonnegative = |length: Length| check_units(length).and_then(Length::check_nonnegative); - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::X => self.x.set(Some(parse_and_validate( "x", @@ -210,7 +210,7 @@ impl NodeTrait for PrimitiveWithInput { ) -> NodeResult { self.base.set_atts(node, handle, pbag)?; - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::In => drop(self.in_.replace(Some(Input::parse(Attribute::In, value)?))), _ => (), diff --git a/rsvg_internals/src/filters/morphology.rs b/rsvg_internals/src/filters/morphology.rs index 3e43a614b..07cdbb644 100644 --- a/rsvg_internals/src/filters/morphology.rs +++ b/rsvg_internals/src/filters/morphology.rs @@ -56,7 +56,7 @@ impl NodeTrait for Morphology { ) -> NodeResult { self.base.set_atts(node, handle, pbag)?; - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::Operator => self.operator.set(Operator::parse(attr, value)?), Attribute::Radius => self.radius.set( diff --git a/rsvg_internals/src/filters/node.rs b/rsvg_internals/src/filters/node.rs index 1612d6811..dd4eb522c 100644 --- a/rsvg_internals/src/filters/node.rs +++ b/rsvg_internals/src/filters/node.rs @@ -43,7 +43,7 @@ impl NodeTrait for NodeFilter { pbag: &PropertyBag<'_>, ) -> NodeResult { // Parse filterUnits first as it affects x, y, width, height checks. - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::FilterUnits => self.filterunits.set(parse("filterUnits", value, ())?), _ => (), @@ -68,7 +68,7 @@ impl NodeTrait for NodeFilter { |length: Length| check_units(length).and_then(Length::check_nonnegative); // Parse the rest of the attributes. - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::X => self.x.set(parse_and_validate( "x", diff --git a/rsvg_internals/src/filters/offset.rs b/rsvg_internals/src/filters/offset.rs index 2b85c2d8f..0180004ca 100644 --- a/rsvg_internals/src/filters/offset.rs +++ b/rsvg_internals/src/filters/offset.rs @@ -43,7 +43,7 @@ impl NodeTrait for Offset { ) -> NodeResult { self.base.set_atts(node, handle, pbag)?; - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::Dx => self.dx.set( parsers::number(value).map_err(|err| NodeError::attribute_error(attr, err))?, diff --git a/rsvg_internals/src/filters/turbulence.rs b/rsvg_internals/src/filters/turbulence.rs index a5eebdf98..bc9b705fe 100644 --- a/rsvg_internals/src/filters/turbulence.rs +++ b/rsvg_internals/src/filters/turbulence.rs @@ -69,7 +69,7 @@ impl NodeTrait for Turbulence { ) -> NodeResult { self.base.set_atts(node, handle, pbag)?; - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::BaseFrequency => self.base_frequency.set( parsers::number_optional_number(value) diff --git a/rsvg_internals/src/gradient.rs b/rsvg_internals/src/gradient.rs index 2e8867b1c..73c116516 100644 --- a/rsvg_internals/src/gradient.rs +++ b/rsvg_internals/src/gradient.rs @@ -656,7 +656,7 @@ impl NodeTrait for NodeGradient { let mut fx = None; let mut fy = None; - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { // Attributes common to linear and radial gradients Attribute::GradientUnits => { diff --git a/rsvg_internals/src/image.rs b/rsvg_internals/src/image.rs index 2b3cda1c3..602e98ab6 100644 --- a/rsvg_internals/src/image.rs +++ b/rsvg_internals/src/image.rs @@ -49,7 +49,7 @@ impl NodeTrait for NodeImage { // https://www.w3.org/TR/SVG/styling.html#UAStyleSheet node.set_overflow_hidden(); - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::X => self.x.set(parse("x", value, LengthDir::Horizontal)?), Attribute::Y => self.y.set(parse("y", value, LengthDir::Vertical)?), diff --git a/rsvg_internals/src/link.rs b/rsvg_internals/src/link.rs index 32b928181..fd0ee4889 100644 --- a/rsvg_internals/src/link.rs +++ b/rsvg_internals/src/link.rs @@ -28,7 +28,7 @@ impl NodeLink { impl NodeTrait for NodeLink { fn set_atts(&self, _: &RsvgNode, _: *const RsvgHandle, pbag: &PropertyBag<'_>) -> NodeResult { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::XlinkHref => *self.link.borrow_mut() = Some(value.to_owned()), diff --git a/rsvg_internals/src/marker.rs b/rsvg_internals/src/marker.rs index 8bbb3616e..79e690d3e 100644 --- a/rsvg_internals/src/marker.rs +++ b/rsvg_internals/src/marker.rs @@ -218,7 +218,7 @@ impl NodeTrait for NodeMarker { // https://www.w3.org/TR/SVG/styling.html#UAStyleSheet node.set_overflow_hidden(); - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::MarkerUnits => self.units.set(parse("markerUnits", value, ())?), diff --git a/rsvg_internals/src/mask.rs b/rsvg_internals/src/mask.rs index 11ff7c7a2..965b0ef44 100644 --- a/rsvg_internals/src/mask.rs +++ b/rsvg_internals/src/mask.rs @@ -235,7 +235,7 @@ fn compute_luminance_to_alpha( impl NodeTrait for NodeMask { fn set_atts(&self, _: &RsvgNode, _: *const RsvgHandle, pbag: &PropertyBag<'_>) -> NodeResult { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::X => self.x.set(parse("x", value, LengthDir::Horizontal)?), Attribute::Y => self.y.set(parse("y", value, LengthDir::Vertical)?), diff --git a/rsvg_internals/src/node.rs b/rsvg_internals/src/node.rs index 4b15b2862..745adcc62 100644 --- a/rsvg_internals/src/node.rs +++ b/rsvg_internals/src/node.rs @@ -354,7 +354,7 @@ impl Node { } pub fn set_atts(&self, node: &RsvgNode, handle: *const RsvgHandle, pbag: &PropertyBag<'_>) { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::Transform => match Matrix::parse_str(value, ()) { Ok(affine) => self.data.transform.set(affine), @@ -391,7 +391,7 @@ impl Node { ) -> Result<(), NodeError> { let mut cond = self.get_cond(); - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { // FIXME: move this to "do catch" when we can bump the rustc version dependency let mut parse = || { match attr { @@ -513,7 +513,7 @@ impl Node { /// Looks for the "style" attribute in the pbag, and applies CSS styles from it fn set_style_attribute(&self, pbag: &PropertyBag<'_>) { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::Style => { let mut state = self.data.state.borrow_mut(); diff --git a/rsvg_internals/src/pattern.rs b/rsvg_internals/src/pattern.rs index df144b597..9064dd6da 100644 --- a/rsvg_internals/src/pattern.rs +++ b/rsvg_internals/src/pattern.rs @@ -187,7 +187,7 @@ impl NodeTrait for NodePattern { p.node = Some(Rc::downgrade(node)); - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::PatternUnits => p.units = Some(parse("patternUnits", value, ())?), diff --git a/rsvg_internals/src/property_bag.rs b/rsvg_internals/src/property_bag.rs index 96ac0fe66..e9f58881c 100644 --- a/rsvg_internals/src/property_bag.rs +++ b/rsvg_internals/src/property_bag.rs @@ -7,14 +7,13 @@ use std::str::{self, FromStr}; use attributes::Attribute; -// We store (key, attribute, value) -pub struct PropertyBag<'a>(Vec<(&'a CStr, Attribute, &'a CStr)>); +pub struct PropertyBag<'a>(Vec<(Attribute, &'a CStr)>); -pub struct OwnedPropertyBag(Vec<(CString, Attribute, CString)>); +pub struct OwnedPropertyBag(Vec<(Attribute, CString)>); pub struct PropertyBagIter<'a>(PropertyBagCStrIter<'a>); -pub struct PropertyBagCStrIter<'a>(slice::Iter<'a, (&'a CStr, Attribute, &'a CStr)>); +pub struct PropertyBagCStrIter<'a>(slice::Iter<'a, (Attribute, &'a CStr)>); trait Utf8CStrToStr { fn to_str_utf8(&self) -> &str; @@ -66,7 +65,7 @@ impl<'a> PropertyBag<'a> { // We silently drop unknown attributes. New attributes should be added in // build.rs. if let Ok(attr) = Attribute::from_str(key_str.to_str_utf8()) { - array.push((key_str, attr, val_str)); + array.push((attr, val_str)); } } else { break; @@ -82,18 +81,18 @@ impl<'a> PropertyBag<'a> { pub fn from_owned(owned: &OwnedPropertyBag) -> PropertyBag<'_> { let mut array = Vec::new(); - for &(ref k, a, ref v) in &owned.0 { - array.push((k.deref(), a, v.deref())); + for &(a, ref v) in &owned.0 { + array.push((a, v.deref())); } PropertyBag(array) } pub fn to_owned(&self) -> OwnedPropertyBag { - let mut array = Vec::<(CString, Attribute, CString)>::new(); + let mut array = Vec::<(Attribute, CString)>::new(); - for &(k, a, v) in &self.0 { - array.push(((*k).to_owned(), a, (*v).to_owned())); + for &(a, v) in &self.0 { + array.push((a, (*v).to_owned())); } OwnedPropertyBag(array) @@ -117,20 +116,18 @@ impl<'a> PropertyBag<'a> { } impl<'a> Iterator for PropertyBagIter<'a> { - type Item = (&'a str, Attribute, &'a str); + type Item = (Attribute, &'a str); fn next(&mut self) -> Option { - self.0 - .next() - .map(|(k, a, v)| (k.to_str_utf8(), a, v.to_str_utf8())) + self.0.next().map(|(a, v)| (a, v.to_str_utf8())) } } impl<'a> Iterator for PropertyBagCStrIter<'a> { - type Item = (&'a CStr, Attribute, &'a CStr); + type Item = (Attribute, &'a CStr); fn next(&mut self) -> Option { - self.0.next().map(|&(k, a, v)| (k, a, v)) + self.0.next().map(|&(a, v)| (a, v)) } } @@ -168,17 +165,17 @@ mod tests { let mut had_rx: bool = false; let mut had_ry: bool = false; - for (k, a, v) in pbag.iter() { - if k == "rx" { - assert!(a == Attribute::Rx); - assert!(v == "1"); - had_rx = true; - } else if k == "ry" { - assert!(a == Attribute::Ry); - assert!(v == "2"); - had_ry = true; - } else { - unreachable!(); + for (a, v) in pbag.iter() { + match a { + Attribute::Rx => { + assert!(v == "1"); + had_rx = true; + } + Attribute::Ry => { + assert!(v == "2"); + had_ry = true; + } + _ => unreachable!() } } diff --git a/rsvg_internals/src/shapes.rs b/rsvg_internals/src/shapes.rs index 1c5817213..845c1b129 100644 --- a/rsvg_internals/src/shapes.rs +++ b/rsvg_internals/src/shapes.rs @@ -129,7 +129,7 @@ impl NodeTrait for NodePath { _: *const RsvgHandle, pbag: &PropertyBag<'_>, ) -> NodeResult { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { if attr == Attribute::D { let mut builder = PathBuilder::new(); @@ -197,7 +197,7 @@ impl NodePoly { impl NodeTrait for NodePoly { fn set_atts(&self, _: &RsvgNode, _: *const RsvgHandle, pbag: &PropertyBag<'_>) -> NodeResult { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { // support for svg < 1.0 which used verts if attr == Attribute::Points || attr == Attribute::Verts { let result = parsers::list_of_points(value.trim()); @@ -269,7 +269,7 @@ impl NodeLine { impl NodeTrait for NodeLine { fn set_atts(&self, _: &RsvgNode, _: *const RsvgHandle, pbag: &PropertyBag<'_>) -> NodeResult { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::X1 => self.x1.set(parse("x1", value, LengthDir::Horizontal)?), Attribute::Y1 => self.y1.set(parse("y1", value, LengthDir::Vertical)?), @@ -335,7 +335,7 @@ impl NodeRect { impl NodeTrait for NodeRect { fn set_atts(&self, _: &RsvgNode, _: *const RsvgHandle, pbag: &PropertyBag<'_>) -> NodeResult { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::X => self.x.set(parse("x", value, LengthDir::Horizontal)?), Attribute::Y => self.y.set(parse("y", value, LengthDir::Vertical)?), @@ -539,7 +539,7 @@ impl NodeCircle { impl NodeTrait for NodeCircle { fn set_atts(&self, _: &RsvgNode, _: *const RsvgHandle, pbag: &PropertyBag<'_>) -> NodeResult { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::Cx => self.cx.set(parse("cx", value, LengthDir::Horizontal)?), Attribute::Cy => self.cy.set(parse("cy", value, LengthDir::Vertical)?), @@ -596,7 +596,7 @@ impl NodeEllipse { impl NodeTrait for NodeEllipse { fn set_atts(&self, _: &RsvgNode, _: *const RsvgHandle, pbag: &PropertyBag<'_>) -> NodeResult { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::Cx => self.cx.set(parse("cx", value, LengthDir::Horizontal)?), Attribute::Cy => self.cy.set(parse("cy", value, LengthDir::Vertical)?), diff --git a/rsvg_internals/src/state.rs b/rsvg_internals/src/state.rs index 753f21c74..a73ebd3a1 100644 --- a/rsvg_internals/src/state.rs +++ b/rsvg_internals/src/state.rs @@ -536,7 +536,7 @@ impl State { &mut self, pbag: &PropertyBag<'_>, ) -> Result<(), NodeError> { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { self.parse_attribute_pair(attr, value, false)?; } diff --git a/rsvg_internals/src/stop.rs b/rsvg_internals/src/stop.rs index 7b6d0e609..f3b070e1e 100644 --- a/rsvg_internals/src/stop.rs +++ b/rsvg_internals/src/stop.rs @@ -46,7 +46,7 @@ fn validate_offset(length: Length) -> Result { impl NodeTrait for NodeStop { fn set_atts(&self, _: &RsvgNode, _: *const RsvgHandle, pbag: &PropertyBag<'_>) -> NodeResult { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::Offset => { let length = diff --git a/rsvg_internals/src/structure.rs b/rsvg_internals/src/structure.rs index 7aaf123f2..f077555bb 100644 --- a/rsvg_internals/src/structure.rs +++ b/rsvg_internals/src/structure.rs @@ -141,7 +141,7 @@ impl NodeTrait for NodeSvg { // http://www.w3.org/TR/SVG/struct.html#SVGElement let is_inner_svg = node.get_parent().is_some(); - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::PreserveAspectRatio => { self.preserve_aspect_ratio @@ -249,7 +249,7 @@ impl NodeUse { impl NodeTrait for NodeUse { fn set_atts(&self, _: &RsvgNode, _: *const RsvgHandle, pbag: &PropertyBag<'_>) -> NodeResult { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::XlinkHref => { *self.link.borrow_mut() = @@ -419,7 +419,7 @@ impl NodeTrait for NodeSymbol { // https://www.w3.org/TR/SVG/styling.html#UAStyleSheet node.set_overflow_hidden(); - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::PreserveAspectRatio => { self.preserve_aspect_ratio diff --git a/rsvg_internals/src/style.rs b/rsvg_internals/src/style.rs index 55b93fc8a..2d9bd880e 100644 --- a/rsvg_internals/src/style.rs +++ b/rsvg_internals/src/style.rs @@ -57,7 +57,7 @@ impl NodeStyle { impl NodeTrait for NodeStyle { fn set_atts(&self, _: &RsvgNode, _: *const RsvgHandle, pbag: &PropertyBag<'_>) -> NodeResult { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { if attr == Attribute::Type { *self.type_.borrow_mut() = Some(value.to_string()); } diff --git a/rsvg_internals/src/text.rs b/rsvg_internals/src/text.rs index 5e6a4d41e..7a37c55f8 100644 --- a/rsvg_internals/src/text.rs +++ b/rsvg_internals/src/text.rs @@ -168,7 +168,7 @@ impl NodeText { impl NodeTrait for NodeText { fn set_atts(&self, _: &RsvgNode, _: *const RsvgHandle, pbag: &PropertyBag<'_>) -> NodeResult { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::X => self.x.set(parse("x", value, LengthDir::Horizontal)?), Attribute::Y => self.y.set(parse("y", value, LengthDir::Vertical)?), @@ -303,7 +303,7 @@ impl NodeTRef { impl NodeTrait for NodeTRef { fn set_atts(&self, _: &RsvgNode, _: *const RsvgHandle, pbag: &PropertyBag<'_>) -> NodeResult { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::XlinkHref => { *self.link.borrow_mut() = @@ -413,7 +413,7 @@ impl NodeTSpan { impl NodeTrait for NodeTSpan { fn set_atts(&self, _: &RsvgNode, _: *const RsvgHandle, pbag: &PropertyBag<'_>) -> NodeResult { - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::X => self .x diff --git a/rsvg_internals/src/xml.rs b/rsvg_internals/src/xml.rs index b6a41a8f4..0c35a2f6f 100644 --- a/rsvg_internals/src/xml.rs +++ b/rsvg_internals/src/xml.rs @@ -382,7 +382,7 @@ impl XmlState { let mut parse = None; let mut encoding = None; - for (_key, attr, value) in pbag.iter() { + for (attr, value) in pbag.iter() { match attr { Attribute::Href => href = Some(value), Attribute::Parse => parse = Some(value), -- GitLab From 74d5cdad95b11f83160780e7da4b6bea09adcc8c Mon Sep 17 00:00:00 2001 From: Paolo Borelli Date: Tue, 18 Dec 2018 12:09:36 +0100 Subject: [PATCH 2/2] property_bag: remove ffi leftovers --- rsvg_internals/src/property_bag.rs | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/rsvg_internals/src/property_bag.rs b/rsvg_internals/src/property_bag.rs index e9f58881c..f9646c17a 100644 --- a/rsvg_internals/src/property_bag.rs +++ b/rsvg_internals/src/property_bag.rs @@ -11,9 +11,7 @@ pub struct PropertyBag<'a>(Vec<(Attribute, &'a CStr)>); pub struct OwnedPropertyBag(Vec<(Attribute, CString)>); -pub struct PropertyBagIter<'a>(PropertyBagCStrIter<'a>); - -pub struct PropertyBagCStrIter<'a>(slice::Iter<'a, (Attribute, &'a CStr)>); +pub struct PropertyBagIter<'a>(slice::Iter<'a, (Attribute, &'a CStr)>); trait Utf8CStrToStr { fn to_str_utf8(&self) -> &str; @@ -98,20 +96,12 @@ impl<'a> PropertyBag<'a> { OwnedPropertyBag(array) } - pub fn ffi(&self) -> *const PropertyBag<'_> { - self as *const PropertyBag<'_> - } - pub fn len(&self) -> usize { self.0.len() } pub fn iter(&self) -> PropertyBagIter<'_> { - PropertyBagIter(self.cstr_iter()) - } - - pub fn cstr_iter(&self) -> PropertyBagCStrIter<'_> { - PropertyBagCStrIter(self.0.iter()) + PropertyBagIter(self.0.iter()) } } @@ -119,15 +109,7 @@ impl<'a> Iterator for PropertyBagIter<'a> { type Item = (Attribute, &'a str); fn next(&mut self) -> Option { - self.0.next().map(|(a, v)| (a, v.to_str_utf8())) - } -} - -impl<'a> Iterator for PropertyBagCStrIter<'a> { - type Item = (Attribute, &'a CStr); - - fn next(&mut self) -> Option { - self.0.next().map(|&(a, v)| (a, v)) + self.0.next().map(|&(a, v)| (a, v.to_str_utf8())) } } @@ -175,7 +157,7 @@ mod tests { assert!(v == "2"); had_ry = true; } - _ => unreachable!() + _ => unreachable!(), } } -- GitLab