summaryrefslogtreecommitdiff
path: root/navit/attr.c
diff options
context:
space:
mode:
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2012-05-05 14:37:45 +0000
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2012-05-05 14:37:45 +0000
commit434b7ac1d7a09c1dcf664c2e0a8279f80e4c3738 (patch)
treeee74af8d1d0d7e6bb0b2a607334e44d492eed5b2 /navit/attr.c
parentc5506324932c4aa1b3e0ec5a2c2da4a3fda0c1d2 (diff)
downloadnavit-434b7ac1d7a09c1dcf664c2e0a8279f80e4c3738.tar.gz
Add:Core:Use hash during xml parsing to improve startup speed
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@5078 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/attr.c')
-rw-r--r--navit/attr.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/navit/attr.c b/navit/attr.c
index 0f8317ef0..db59d28a5 100644
--- a/navit/attr.c
+++ b/navit/attr.c
@@ -48,11 +48,32 @@ static struct attr_name attr_names[]={
#undef ATTR
};
+static GHashTable *attr_hash;
+
+void
+attr_create_hash(void)
+{
+ int i;
+ attr_hash=g_hash_table_new(g_str_hash, g_str_equal);
+ for (i=0 ; i < sizeof(attr_names)/sizeof(struct attr_name) ; i++) {
+ g_hash_table_insert(attr_hash, attr_names[i].name, GINT_TO_POINTER(attr_names[i].attr));
+ }
+}
+
+void
+attr_destroy_hash(void)
+{
+ g_hash_table_destroy(attr_hash);
+ attr_hash=NULL;
+}
+
enum attr_type
attr_from_name(const char *name)
{
int i;
+ if (attr_hash)
+ return GPOINTER_TO_INT(g_hash_table_lookup(attr_hash, name));
for (i=0 ; i < sizeof(attr_names)/sizeof(struct attr_name) ; i++) {
if (! strcmp(attr_names[i].name, name))
return attr_names[i].attr;