[librsvg: 6/7] node: do not store the element name as a string



commit efeaba562e6b6842d314a55d1493c82cc61f190d
Author: Paolo Borelli <pborelli gnome org>
Date:   Sun Dec 2 12:38:36 2018 +0100

    node: do not store the element name as a string
    
    Now we can get it as a static string from the type, so no need
    to pass in and store the element name as a string.

 rsvg_internals/src/create_node.rs | 20 ++++----------------
 rsvg_internals/src/node.rs        | 22 +++++-----------------
 rsvg_internals/src/xml.rs         |  1 -
 3 files changed, 9 insertions(+), 34 deletions(-)
---
diff --git a/rsvg_internals/src/create_node.rs b/rsvg_internals/src/create_node.rs
index a8129ef3..fda72e45 100644
--- a/rsvg_internals/src/create_node.rs
+++ b/rsvg_internals/src/create_node.rs
@@ -37,20 +37,8 @@ use text::{NodeTRef, NodeTSpan, NodeText};
 
 macro_rules! node_create_fn {
     ($name:ident, $node_type:ident, $new_fn:expr) => {
-        fn $name(
-            element_name: &str,
-            id: Option<&str>,
-            class: Option<&str>,
-            parent: Option<&RsvgNode>,
-        ) -> RsvgNode {
-            node_new(
-                NodeType::$node_type,
-                parent,
-                element_name,
-                id,
-                class,
-                Box::new($new_fn()),
-            )
+        fn $name(id: Option<&str>, class: Option<&str>, parent: Option<&RsvgNode>) -> RsvgNode {
+            node_new(NodeType::$node_type, parent, id, class, Box::new($new_fn()))
         }
     };
 }
@@ -184,7 +172,7 @@ node_create_fn!(create_sub_image, Group, NodeGroup::new);
 node_create_fn!(create_sub_image_ref, Image, NodeImage::new);
 
 type NodeCreateFn =
-    fn(name: &str, id: Option<&str>, class: Option<&str>, parent: Option<&RsvgNode>) -> RsvgNode;
+    fn(id: Option<&str>, class: Option<&str>, parent: Option<&RsvgNode>) -> RsvgNode;
 
 lazy_static! {
     // Lines in comments are elements that we don't support.
@@ -308,7 +296,7 @@ pub fn create_node_and_register_id(
         class = None;
     };
 
-    let node = create_fn(name, id, class, parent);
+    let node = create_fn(id, class, parent);
 
     if id.is_some() {
         defs.insert(id.unwrap(), &node);
diff --git a/rsvg_internals/src/node.rs b/rsvg_internals/src/node.rs
index 60237569..1374bd3d 100644
--- a/rsvg_internals/src/node.rs
+++ b/rsvg_internals/src/node.rs
@@ -151,7 +151,6 @@ pub type NodeResult = Result<(), NodeError>;
 pub struct Node {
     node_type: NodeType,
     parent: Option<Weak<Node>>, // optional; weak ref to parent
-    element_name: String,       // we may want to intern these someday
     id: Option<String>,         // id attribute from XML element
     class: Option<String>,      // class attribute from XML element
     first_child: RefCell<Option<Rc<Node>>>,
@@ -294,7 +293,6 @@ impl Node {
     pub fn new(
         node_type: NodeType,
         parent: Option<Weak<Node>>,
-        element_name: &str,
         id: Option<&str>,
         class: Option<&str>,
         node_impl: Box<NodeTrait>,
@@ -302,7 +300,6 @@ impl Node {
         Node {
             node_type,
             parent,
-            element_name: element_name.to_string(),
             id: id.map(str::to_string),
             class: class.map(str::to_string),
             first_child: RefCell::new(None),
@@ -512,13 +509,14 @@ impl Node {
         //
         // This is basically a semi-compliant CSS2 selection engine
 
+        let element_name = self.node_type.element_name();
         let mut state = self.state.borrow_mut();
 
         // *
         css_styles.lookup_apply("*", &mut state);
 
         // tag
-        css_styles.lookup_apply(&self.element_name, &mut state);
+        css_styles.lookup_apply(element_name, &mut state);
 
         if let Some(klazz) = self.get_class() {
             for cls in klazz.split_whitespace() {
@@ -527,7 +525,7 @@ impl Node {
                 if !cls.is_empty() {
                     // tag.class#id
                     if let Some(id) = self.get_id() {
-                        let target = format!("{}.{}#{}", self.element_name, cls, id);
+                        let target = format!("{}.{}#{}", element_name, cls, id);
                         found = found || css_styles.lookup_apply(&target, &mut state);
                     }
 
@@ -538,7 +536,7 @@ impl Node {
                     }
 
                     // tag.class
-                    let target = format!("{}.{}", self.element_name, cls);
+                    let target = format!("{}.{}", element_name, cls);
                     found = found || css_styles.lookup_apply(&target, &mut state);
 
                     if !found {
@@ -556,7 +554,7 @@ impl Node {
             css_styles.lookup_apply(&target, &mut state);
 
             // tag#id
-            let target = format!("{}#{}", self.element_name, id);
+            let target = format!("{}#{}", element_name, id);
             css_styles.lookup_apply(&target, &mut state);
         }
     }
@@ -717,7 +715,6 @@ impl Node {
 pub fn node_new(
     node_type: NodeType,
     parent: Option<&RsvgNode>,
-    element_name: &str,
     id: Option<&str>,
     class: Option<&str>,
     node_impl: Box<NodeTrait>,
@@ -729,7 +726,6 @@ pub fn node_new(
         } else {
             None
         },
-        element_name,
         id,
         class,
         node_impl,
@@ -827,7 +823,6 @@ mod tests {
         let node = Rc::new(Node::new(
             NodeType::Path,
             None,
-            "path",
             None,
             None,
             Box::new(TestNodeImpl {}),
@@ -853,7 +848,6 @@ mod tests {
         let node = Rc::new(Node::new(
             NodeType::Path,
             None,
-            "path",
             None,
             None,
             Box::new(TestNodeImpl {}),
@@ -876,7 +870,6 @@ mod tests {
         let node = Rc::new(Node::new(
             NodeType::Path,
             None,
-            "path",
             None,
             None,
             Box::new(TestNodeImpl {}),
@@ -890,7 +883,6 @@ mod tests {
         let node = Rc::new(Node::new(
             NodeType::Path,
             None,
-            "path",
             None,
             None,
             Box::new(TestNodeImpl {}),
@@ -899,7 +891,6 @@ mod tests {
         let child = Rc::new(Node::new(
             NodeType::Path,
             Some(Rc::downgrade(&node)),
-            "path",
             None,
             None,
             Box::new(TestNodeImpl {}),
@@ -916,7 +907,6 @@ mod tests {
         let node = Rc::new(Node::new(
             NodeType::Path,
             None,
-            "path",
             None,
             None,
             Box::new(TestNodeImpl {}),
@@ -925,7 +915,6 @@ mod tests {
         let child = Rc::new(Node::new(
             NodeType::Path,
             Some(Rc::downgrade(&node)),
-            "path",
             None,
             None,
             Box::new(TestNodeImpl {}),
@@ -934,7 +923,6 @@ mod tests {
         let second_child = Rc::new(Node::new(
             NodeType::Path,
             Some(Rc::downgrade(&node)),
-            "path",
             None,
             None,
             Box::new(TestNodeImpl {}),
diff --git a/rsvg_internals/src/xml.rs b/rsvg_internals/src/xml.rs
index 41fc8e01..e6eb8f99 100644
--- a/rsvg_internals/src/xml.rs
+++ b/rsvg_internals/src/xml.rs
@@ -288,7 +288,6 @@ impl XmlState {
                 let child = node_new(
                     NodeType::Chars,
                     Some(node),
-                    "rsvg-chars",
                     None,
                     None,
                     Box::new(NodeChars::new()),


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