[librsvg: 4/6] Dasharray: turn the Array variant into a boxed slice




commit 853cb499df8497aad74f0508512e744e82d1ed6a
Author: Federico Mena Quintero <federico gnome org>
Date:   Mon Mar 1 18:49:37 2021 -0600

    Dasharray: turn the Array variant into a boxed slice
    
    This removes 8 bytes from the variant; we don't need a growable Vec
    here.
    
    cargo +nightly rustc -- -Z print-type-sizes
    
    Before:
    print-type-size type: `librsvg::properties::ComputedValues`: 432 bytes, alignment: 8 bytes
    
    After:
    print-type-size type: `librsvg::properties::ComputedValues`: 424 bytes, alignment: 8 bytes

 src/dasharray.rs | 33 +++++++++++++++++++--------------
 1 file changed, 19 insertions(+), 14 deletions(-)
---
diff --git a/src/dasharray.rs b/src/dasharray.rs
index 31a35f79..ae0e9488 100644
--- a/src/dasharray.rs
+++ b/src/dasharray.rs
@@ -9,7 +9,7 @@ use crate::parsers::{optional_comma, Parse};
 #[derive(Debug, PartialEq, Clone)]
 pub enum Dasharray {
     None,
-    Array(Vec<ULength<Both>>),
+    Array(Box<[ULength<Both>]>),
 }
 
 enum_default!(Dasharray, Dasharray::None);
@@ -36,7 +36,7 @@ impl Parse for Dasharray {
             optional_comma(parser);
         }
 
-        Ok(Dasharray::Array(dasharray))
+        Ok(Dasharray::Array(dasharray.into_boxed_slice()))
     }
 }
 
@@ -44,42 +44,47 @@ impl Parse for Dasharray {
 mod tests {
     use super::*;
 
+    fn dasharray(l: &[ULength<Both>]) -> Dasharray {
+        Dasharray::Array(
+            l.iter()
+                .cloned()
+                .collect::<Vec<ULength<Both>>>()
+                .into_boxed_slice(),
+        )
+    }
+
     #[test]
     fn parses_dash_array() {
         // helper to cut down boilderplate
         let length_parse = |s| ULength::<Both>::parse_str(s).unwrap();
 
-        let expected = Dasharray::Array(vec![
+        let expected = dasharray(&[
             length_parse("1"),
             length_parse("2in"),
             length_parse("3"),
             length_parse("4%"),
         ]);
 
-        let sample_1 = Dasharray::Array(vec![length_parse("10"), length_parse("6")]);
+        let sample_1 = dasharray(&[length_parse("10"), length_parse("6")]);
 
-        let sample_2 = Dasharray::Array(vec![
-            length_parse("5"),
-            length_parse("5"),
-            length_parse("20"),
-        ]);
+        let sample_2 = dasharray(&[length_parse("5"), length_parse("5"), length_parse("20")]);
 
-        let sample_3 = Dasharray::Array(vec![
+        let sample_3 = dasharray(&[
             length_parse("10px"),
             length_parse("20px"),
             length_parse("20px"),
         ]);
 
-        let sample_4 = Dasharray::Array(vec![
+        let sample_4 = dasharray(&[
             length_parse("25"),
             length_parse("5"),
             length_parse("5"),
             length_parse("5"),
         ]);
 
-        let sample_5 = Dasharray::Array(vec![length_parse("3.1415926"), length_parse("8")]);
-        let sample_6 = Dasharray::Array(vec![length_parse("5"), length_parse("3.14")]);
-        let sample_7 = Dasharray::Array(vec![length_parse("2")]);
+        let sample_5 = dasharray(&[length_parse("3.1415926"), length_parse("8")]);
+        let sample_6 = dasharray(&[length_parse("5"), length_parse("3.14")]);
+        let sample_7 = dasharray(&[length_parse("2")]);
 
         assert_eq!(Dasharray::parse_str("none").unwrap(), Dasharray::None);
         assert_eq!(Dasharray::parse_str("1 2in,3 4%").unwrap(), expected);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]