[gtk+] builderparser: Save tag type instead of tag name
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] builderparser: Save tag type instead of tag name
- Date: Mon, 31 Oct 2016 18:29:28 +0000 (UTC)
commit 938598032cd210ccfd72a7ab0580d99fda5b8057
Author: Timm Bäder <mail baedert org>
Date: Sun Oct 23 17:25:58 2016 +0200
builderparser: Save tag type instead of tag name
So we can save a few string comparisons
gtk/gtkbuilderparser.c | 86 +++++++++++++++++++++++++++++------------------
gtk/gtkbuilderprivate.h | 2 +-
2 files changed, 54 insertions(+), 34 deletions(-)
---
diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c
index b4a9e9c..2f606a4 100644
--- a/gtk/gtkbuilderparser.c
+++ b/gtk/gtkbuilderparser.c
@@ -34,6 +34,17 @@
static void free_property_info (PropertyInfo *info);
static void free_object_info (ObjectInfo *info);
+enum {
+ TAG_PROPERTY,
+ TAG_MENU,
+ TAG_REQUIRES,
+ TAG_OBJECT,
+ TAG_CHILD,
+ TAG_SIGNAL,
+ TAG_INTERFACE,
+ TAG_TEMPLATE,
+};
+
static inline void
state_push (ParserData *data, gpointer info)
{
@@ -214,7 +225,7 @@ parse_requires (ParserData *data,
req_info->major = version_major;
req_info->minor = version_minor;
state_push (data, req_info);
- req_info->tag.name = element_name;
+ req_info->tag.tag_type = TAG_REQUIRES;
}
static gboolean
@@ -251,7 +262,7 @@ parse_object (GMarkupParseContext *context,
gint line;
child_info = state_peek_info (data, ChildInfo);
- if (child_info && strcmp (child_info->tag.name, "object") == 0)
+ if (child_info && child_info->tag.tag_type == TAG_OBJECT)
{
error_invalid_tag (data, element_name, NULL, error);
return;
@@ -332,7 +343,7 @@ parse_object (GMarkupParseContext *context,
}
object_info = g_slice_new0 (ObjectInfo);
- object_info->tag.name = element_name;
+ object_info->tag.tag_type = TAG_OBJECT;
object_info->type = object_type;
object_info->oclass = g_type_class_ref (object_type);
object_info->id = (internal_id) ? internal_id : g_strdup (object_id);
@@ -437,7 +448,7 @@ parse_template (GMarkupParseContext *context,
++data->cur_object_level;
object_info = g_slice_new0 (ObjectInfo);
- object_info->tag.name = element_name;
+ object_info->tag.tag_type = TAG_TEMPLATE;
object_info->type = parsed_type;
object_info->oclass = g_type_class_ref (parsed_type);
object_info->id = g_strdup (object_class);
@@ -496,8 +507,8 @@ parse_child (ParserData *data,
object_info = state_peek_info (data, ObjectInfo);
if (!object_info ||
- !(strcmp (object_info->tag.name, "object") == 0 ||
- strcmp (object_info->tag.name, "template") == 0))
+ !(object_info->tag.tag_type == TAG_OBJECT ||
+ object_info->tag.tag_type == TAG_TEMPLATE))
{
error_invalid_tag (data, element_name, NULL, error);
return;
@@ -513,7 +524,7 @@ parse_child (ParserData *data,
}
child_info = g_slice_new0 (ChildInfo);
- child_info->tag.name = element_name;
+ child_info->tag.tag_type = TAG_CHILD;
child_info->type = g_strdup (type);
child_info->internal_child = g_strdup (internal_child);
child_info->parent = (CommonInfo*)object_info;
@@ -551,8 +562,8 @@ parse_property (ParserData *data,
object_info = state_peek_info (data, ObjectInfo);
if (!object_info ||
- !(strcmp (object_info->tag.name, "object") == 0 ||
- strcmp (object_info->tag.name, "template") == 0))
+ !(object_info->tag.tag_type == TAG_OBJECT ||
+ object_info->tag.tag_type == TAG_TEMPLATE))
{
error_invalid_tag (data, element_name, NULL, error);
return;
@@ -620,7 +631,7 @@ parse_property (ParserData *data,
}
info = g_slice_new (PropertyInfo);
- info->tag.name = element_name;
+ info->tag.tag_type = TAG_PROPERTY;
info->pspec = pspec;
info->text = g_string_new ("");
info->translatable = translatable;
@@ -659,8 +670,8 @@ parse_signal (ParserData *data,
object_info = state_peek_info (data, ObjectInfo);
if (!object_info ||
- !(strcmp (object_info->tag.name, "object") == 0 ||
- strcmp (object_info->tag.name, "template") == 0))
+ !(object_info->tag.tag_type == TAG_OBJECT||
+ object_info->tag.tag_type == TAG_TEMPLATE))
{
error_invalid_tag (data, element_name, NULL, error);
return;
@@ -710,7 +721,7 @@ parse_signal (ParserData *data,
info->connect_object_name = g_strdup (object);
state_push (data, info);
- info->tag.name = element_name;
+ info->tag.tag_type = TAG_SIGNAL;
}
/* Called by GtkBuilder */
@@ -868,8 +879,8 @@ parse_custom (GMarkupParseContext *context,
if (!parent_info)
return FALSE;
- if (strcmp (parent_info->tag.name, "object") == 0 ||
- strcmp (parent_info->tag.name, "template") == 0)
+ if (parent_info->tag.tag_type == TAG_OBJECT ||
+ parent_info->tag.tag_type == TAG_TEMPLATE)
{
ObjectInfo* object_info = (ObjectInfo*)parent_info;
if (!object_info->object)
@@ -885,7 +896,7 @@ parse_custom (GMarkupParseContext *context,
object = object_info->object;
child = NULL;
}
- else if (strcmp (parent_info->tag.name, "child") == 0)
+ else if (parent_info->tag.tag_type == TAG_CHILD)
{
ChildInfo* child_info = (ChildInfo*)parent_info;
@@ -1096,8 +1107,8 @@ end_element (GMarkupParseContext *context,
g_assert (info != NULL);
/* Normal properties */
- if (strcmp (info->tag.name, "object") == 0 ||
- strcmp (info->tag.name, "template") == 0)
+ if (info->tag.tag_type == TAG_OBJECT ||
+ info->tag.tag_type == TAG_TEMPLATE)
{
ObjectInfo *object_info = (ObjectInfo*)info;
@@ -1186,21 +1197,30 @@ text (GMarkupParseContext *context,
static void
free_info (CommonInfo *info)
{
- if (strcmp (info->tag.name, "object") == 0 ||
- strcmp (info->tag.name, "template") == 0)
- free_object_info ((ObjectInfo *)info);
- else if (strcmp (info->tag.name, "child") == 0)
- free_child_info ((ChildInfo *)info);
- else if (strcmp (info->tag.name, "property") == 0)
- free_property_info ((PropertyInfo *)info);
- else if (strcmp (info->tag.name, "signal") == 0)
- _free_signal_info ((SignalInfo *)info, NULL);
- else if (strcmp (info->tag.name, "requires") == 0)
- free_requires_info ((RequiresInfo *)info, NULL);
- else if (strcmp (info->tag.name, "menu") == 0)
- free_menu_info ((MenuInfo *)info);
- else
- g_assert_not_reached ();
+ switch (info->tag.tag_type)
+ {
+ case TAG_OBJECT:
+ case TAG_TEMPLATE:
+ free_object_info ((ObjectInfo *)info);
+ break;
+ case TAG_CHILD:
+ free_child_info ((ChildInfo *)info);
+ break;
+ case TAG_PROPERTY:
+ free_property_info ((PropertyInfo *)info);
+ break;
+ case TAG_SIGNAL:
+ _free_signal_info ((SignalInfo *)info, NULL);
+ break;
+ case TAG_REQUIRES:
+ free_requires_info ((RequiresInfo *)info, NULL);
+ break;
+ case TAG_MENU:
+ free_menu_info ((MenuInfo *)info);
+ break;
+ default:
+ g_assert_not_reached ();
+ }
}
static const GMarkupParser parser = {
diff --git a/gtk/gtkbuilderprivate.h b/gtk/gtkbuilderprivate.h
index f9c343f..b95da34 100644
--- a/gtk/gtkbuilderprivate.h
+++ b/gtk/gtkbuilderprivate.h
@@ -22,7 +22,7 @@
#include "gtkbuilder.h"
typedef struct {
- const gchar *name;
+ guint tag_type;
} TagInfo;
typedef struct {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]