[lasem] svg_document: remove the need for an element id hash table.



commit 0a0b46d3f45eba459048c68c5aa13581bbbe1cc3
Author: Emmanuel Pacaud <emmanuel gnome org>
Date:   Wed Apr 3 09:23:37 2013 +0200

    svg_document: remove the need for an element id hash table.

 src/lsmsvgdocument.c |    9 +--------
 src/lsmsvgdocument.h |    4 ++--
 src/lsmsvgelement.c  |   18 ++++++++++++------
 3 files changed, 15 insertions(+), 16 deletions(-)
---
diff --git a/src/lsmsvgdocument.c b/src/lsmsvgdocument.c
index 502e227..aa2f925 100644
--- a/src/lsmsvgdocument.c
+++ b/src/lsmsvgdocument.c
@@ -218,18 +218,14 @@ lsm_svg_document_get_element_by_id (LsmSvgDocument *self, const char *id)
 }
 
 void
-lsm_svg_document_register_element (LsmSvgDocument *self, LsmSvgElement *element, const char *id)
+lsm_svg_document_register_element (LsmSvgDocument *self, LsmSvgElement *element, const char *id, const char 
*old_id)
 {
-       char *old_id;
-
        g_return_if_fail (LSM_IS_SVG_DOCUMENT (self));
        g_return_if_fail (LSM_IS_SVG_ELEMENT (element));
 
-       old_id = g_hash_table_lookup (self->elements, element);
        if (old_id != NULL) {
                lsm_debug_dom ("[LsmSvgDocument::register_element] Unregister '%s'", old_id);
 
-               g_hash_table_remove (self->elements, element);
                g_hash_table_remove (self->ids, old_id);
        }
 
@@ -239,7 +235,6 @@ lsm_svg_document_register_element (LsmSvgDocument *self, LsmSvgElement *element,
                lsm_debug_dom ("[LsmSvgDocument::register_element] Register '%s'", id);
 
                g_hash_table_replace (self->ids, new_id, element);
-               g_hash_table_replace (self->elements, element, new_id);
        }
 }
 
@@ -253,7 +248,6 @@ static void
 lsm_svg_document_init (LsmSvgDocument *document)
 {
        document->ids = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
-       document->elements = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL);
 }
 
 static void
@@ -261,7 +255,6 @@ lsm_svg_document_finalize (GObject *object)
 {
        LsmSvgDocument *document = LSM_SVG_DOCUMENT (object);
 
-       g_hash_table_unref (document->elements);
        g_hash_table_unref (document->ids);
 
        parent_class->finalize (object);
diff --git a/src/lsmsvgdocument.h b/src/lsmsvgdocument.h
index 6e2961f..2580566 100644
--- a/src/lsmsvgdocument.h
+++ b/src/lsmsvgdocument.h
@@ -42,7 +42,6 @@ struct _LsmSvgDocument {
        LsmDomDocument  document;
 
        GHashTable *    ids;
-       GHashTable *    elements;
 };
 
 struct _LsmSvgDocumentClass {
@@ -56,7 +55,8 @@ LsmDomDocument *      lsm_svg_document_new                    (void);
 LsmSvgSvgElement *     lsm_svg_document_get_root_element       (const LsmSvgDocument *document);
 LsmSvgElement *        lsm_svg_document_get_element_by_url     (LsmSvgDocument *document, const char *url);
 LsmSvgElement *                lsm_svg_document_get_element_by_id      (LsmSvgDocument *self, const char 
*id);
-void                   lsm_svg_document_register_element       (LsmSvgDocument *self, LsmSvgElement 
*element, const char *id);
+void                   lsm_svg_document_register_element       (LsmSvgDocument *self, LsmSvgElement *element,
+                                                                const char *id, const char *old_id);
 
 G_END_DECLS
 
diff --git a/src/lsmsvgelement.c b/src/lsmsvgelement.c
index 4189e5b..e1b660c 100644
--- a/src/lsmsvgelement.c
+++ b/src/lsmsvgelement.c
@@ -70,19 +70,25 @@ lsm_svg_element_set_attribute (LsmDomElement *self, const char* name, const char
        lsm_debug_dom ("[LsmSvgElement::set_attribute] node = %s, name = %s, value = %s",
                    lsm_dom_node_get_node_name (LSM_DOM_NODE (self)), name, value);
 
-       /* TODO Avoid double hash table lookup */
-       if (!lsm_attribute_manager_set_attribute (s_element_class->attribute_manager,
-                                                 self, name, value))
-               lsm_svg_property_bag_set_property (&s_element->property_bag, name, value);
-
        if (g_strcmp0 (name, "id") == 0 ||
            g_strcmp0 (name, "xml:id") == 0) {
                LsmDomDocument *document;
 
                document = lsm_dom_node_get_owner_document (LSM_DOM_NODE (self));
                if (document != NULL)
-                       lsm_svg_document_register_element (LSM_SVG_DOCUMENT (document), LSM_SVG_ELEMENT 
(self), value);
+                       lsm_svg_document_register_element (LSM_SVG_DOCUMENT (document), LSM_SVG_ELEMENT 
(self),
+                                                          value, s_element->id.value);
+
+               lsm_attribute_manager_set_attribute (s_element_class->attribute_manager,
+                                                    self, name, value);
+
+               return;
        }
+
+       /* TODO Avoid double hash table lookup */
+       if (!lsm_attribute_manager_set_attribute (s_element_class->attribute_manager,
+                                                 self, name, value))
+               lsm_svg_property_bag_set_property (&s_element->property_bag, name, value);
 }
 
 static const char *


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