diff options
author | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2012-05-05 14:37:45 +0000 |
---|---|---|
committer | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2012-05-05 14:37:45 +0000 |
commit | 434b7ac1d7a09c1dcf664c2e0a8279f80e4c3738 (patch) | |
tree | ee74af8d1d0d7e6bb0b2a607334e44d492eed5b2 /navit/attr.c | |
parent | c5506324932c4aa1b3e0ec5a2c2da4a3fda0c1d2 (diff) | |
download | navit-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.c | 21 |
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; |