From 72fa1c9d36ec70f620d13c79c7e8108a076571a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Higor=20Eur=C3=ADpedes?= Date: Sun, 14 Jun 2015 09:25:00 -0300 Subject: [PATCH] (config_file.c) Speed up setting lookup with hashes --- libretro-common/file/config_file.c | 11 +++++++---- libretro-common/include/file/config_file.h | 2 ++ tools/retroarch-joyconfig-griffin.c | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/libretro-common/file/config_file.c b/libretro-common/file/config_file.c index 0e8863fec1..ca77709d77 100644 --- a/libretro-common/file/config_file.c +++ b/libretro-common/file/config_file.c @@ -32,6 +32,7 @@ #include #include #include +#include #if !defined(_WIN32) && !defined(__CELLOS_LV2__) && !defined(_XBOX) #include /* PATH_MAX */ @@ -327,6 +328,7 @@ static bool parse_line(config_file_t *conf, } key[idx] = '\0'; list->key = key; + list->key_hash = djb2_calculate(key); list->value = extract_value(line, true); if (!list->value) @@ -526,12 +528,13 @@ void config_file_free(config_file_t *conf) static const struct config_entry_list *config_get_entry_for_read(config_file_t *conf, const char *key) { - struct config_entry_list *list; + struct config_entry_list *entry; + uint32_t hash = djb2_calculate(key); - for (list = conf->entries; list; list = list->next) + for (entry = conf->entries; entry; entry = entry->next) { - if (strcmp(key, list->key) == 0) - return list; + if (hash == entry->key_hash && strcmp(key, entry->key) == 0) + return entry; } return NULL; diff --git a/libretro-common/include/file/config_file.h b/libretro-common/include/file/config_file.h index effe26159e..adaaa28cdb 100644 --- a/libretro-common/include/file/config_file.h +++ b/libretro-common/include/file/config_file.h @@ -40,6 +40,8 @@ struct config_entry_list bool readonly; char *key; char *value; + uint32_t key_hash; + struct config_entry_list *next; }; diff --git a/tools/retroarch-joyconfig-griffin.c b/tools/retroarch-joyconfig-griffin.c index 4a63722fb4..fe148f718f 100644 --- a/tools/retroarch-joyconfig-griffin.c +++ b/tools/retroarch-joyconfig-griffin.c @@ -49,6 +49,7 @@ #include "../libretro-common/queues/fifo_buffer.c" #include "../libretro-common/file/config_file.c" #include "../libretro-common/file/file_path.c" +#include "../libretro-common/hash/rhash.c" #include "../file_path_special.c" #include "../libretro-common/string/string_list.c" #include "../libretro-common/compat/compat.c"