[lasem] svg_document: remove the need for an element id hash table.
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [lasem] svg_document: remove the need for an element id hash table.
- Date: Wed, 3 Apr 2013 07:25:02 +0000 (UTC)
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]