From 4d381d9a619b18f44d59fff2cb2c00807033b671 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 4 Jun 2015 22:37:00 +0200 Subject: [PATCH] (driver.c) Do away with series of strcmps --- driver.c | 110 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 58 insertions(+), 52 deletions(-) diff --git a/driver.c b/driver.c index d7b05748c8..21a34b39a2 100644 --- a/driver.c +++ b/driver.c @@ -14,6 +14,8 @@ * If not, see . */ +#include + #include "driver.h" #include "general.h" #include "retroarch.h" @@ -60,6 +62,15 @@ driver_t *driver_get_ptr(void) return g_driver; } +#define HASH_LOCATION_DRIVER 0x09189689U +#define HASH_CAMERA_DRIVER 0xf25db959U +#define HASH_MENU_DRIVER 0xd607fb05U +#define HASH_INPUT_DRIVER 0x4c087840U +#define HASH_INPUT_JOYPAD_DRIVER 0xab124146U +#define HASH_VIDEO_DRIVER 0x1805a5e7U +#define HASH_AUDIO_DRIVER 0x26594002U +#define HASH_AUDIO_RESAMPLER_DRIVER 0xedcba9ecU +#define HASH_RECORD_DRIVER 0x144cd2cfU /** * find_driver_nonempty: * @label : string of driver type to be found. @@ -77,62 +88,57 @@ static const void *find_driver_nonempty(const char *label, int i, char *s, size_t len) { const void *drv = NULL; + uint32_t hash = djb2_calculate(label); - if (!strcmp(label, "camera_driver")) + switch (hash) { - drv = camera_driver_find_handle(i); - if (drv) - strlcpy(s, camera_driver_find_ident(i), len); - } - else if (!strcmp(label, "location_driver")) - { - drv = location_driver_find_handle(i); - if (drv) - strlcpy(s, location_driver_find_ident(i), len); - } + case HASH_CAMERA_DRIVER: + drv = camera_driver_find_handle(i); + if (drv) + strlcpy(s, camera_driver_find_ident(i), len); + break; + case HASH_LOCATION_DRIVER: + drv = location_driver_find_handle(i); + if (drv) + strlcpy(s, location_driver_find_ident(i), len); + break; + case HASH_MENU_DRIVER: #ifdef HAVE_MENU - else if (!strcmp(label, "menu_driver")) - { - drv = menu_driver_find_handle(i); - if (drv) - strlcpy(s, menu_driver_find_ident(i), len); - } + drv = menu_driver_find_handle(i); + if (drv) + strlcpy(s, menu_driver_find_ident(i), len); #endif - else if (!strcmp(label, "input_driver")) - { - drv = input_driver_find_handle(i); - if (drv) - strlcpy(s, input_driver_find_ident(i), len); - } - else if (!strcmp(label, "input_joypad_driver")) - { - drv = joypad_driver_find_handle(i); - if (drv) - strlcpy(s, joypad_driver_find_ident(i), len); - } - else if (!strcmp(label, "video_driver")) - { - drv = video_driver_find_handle(i); - if (drv) - strlcpy(s, video_driver_find_ident(i), len); - } - else if (!strcmp(label, "audio_driver")) - { - drv = audio_driver_find_handle(i); - if (drv) - strlcpy(s, audio_driver_find_ident(i), len); - } - else if (!strcmp(label, "record_driver")) - { - drv = record_driver_find_handle(i); - if (drv) - strlcpy(s, record_driver_find_ident(i), len); - } - else if (!strcmp(label, "audio_resampler_driver")) - { - drv = audio_resampler_driver_find_handle(i); - if (drv) - strlcpy(s, audio_resampler_driver_find_ident(i), len); + break; + case HASH_INPUT_DRIVER: + drv = input_driver_find_handle(i); + if (drv) + strlcpy(s, input_driver_find_ident(i), len); + break; + case HASH_INPUT_JOYPAD_DRIVER: + drv = joypad_driver_find_handle(i); + if (drv) + strlcpy(s, joypad_driver_find_ident(i), len); + break; + case HASH_VIDEO_DRIVER: + drv = video_driver_find_handle(i); + if (drv) + strlcpy(s, video_driver_find_ident(i), len); + break; + case HASH_AUDIO_DRIVER: + drv = audio_driver_find_handle(i); + if (drv) + strlcpy(s, audio_driver_find_ident(i), len); + break; + case HASH_RECORD_DRIVER: + drv = record_driver_find_handle(i); + if (drv) + strlcpy(s, record_driver_find_ident(i), len); + break; + case HASH_AUDIO_RESAMPLER_DRIVER: + drv = audio_resampler_driver_find_handle(i); + if (drv) + strlcpy(s, audio_resampler_driver_find_ident(i), len); + break; } return drv;