From a177d55777a13c6c76ab5e33d403d354bf855028 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Fri, 5 Jun 2015 17:37:38 +0200 Subject: [PATCH] (menu_entries_cbs_iterate.c) Remove dependency on strcmp --- menu/menu_entries_cbs_iterate.c | 53 +++++++++++++++++---------------- menu/menu_hash.h | 6 ++++ 2 files changed, 34 insertions(+), 25 deletions(-) diff --git a/menu/menu_entries_cbs_iterate.c b/menu/menu_entries_cbs_iterate.c index d7c6699d9c..f762fe057a 100644 --- a/menu/menu_entries_cbs_iterate.c +++ b/menu/menu_entries_cbs_iterate.c @@ -14,7 +14,9 @@ */ #include +#include #include + #include "menu.h" #include "menu_display.h" #include "menu_entry.h" @@ -263,7 +265,7 @@ static int action_iterate_load_open_zip(const char *label, char *s, size_t len, return 0; } -static int action_iterate_menu_viewport(char *s, size_t len, const char *label, unsigned action) +static int action_iterate_menu_viewport(char *s, size_t len, const char *label, unsigned action, uint32_t hash) { int stride_x = 1, stride_y = 1; menu_displaylist_info_t info = {0}; @@ -344,7 +346,7 @@ static int action_iterate_menu_viewport(char *s, size_t len, const char *label, case MENU_ACTION_CANCEL: menu_list_pop_stack(menu_list); - if (!strcmp(label, "custom_viewport_2")) + if (hash == MENU_LABEL_CUSTOM_VIEWPORT_2) { info.list = menu_list->menu_stack; info.type = MENU_SETTINGS_CUSTOM_VIEWPORT; @@ -424,7 +426,7 @@ static int action_iterate_menu_viewport(char *s, size_t len, const char *label, { if (type == MENU_SETTINGS_CUSTOM_VIEWPORT) base_msg = "Set Upper-Left Corner"; - else if (!strcmp(label, "custom_viewport_2")) + else if (hash == MENU_LABEL_CUSTOM_VIEWPORT_2) base_msg = "Set Bottom-Right Corner"; snprintf(s, len, "%s (%d, %d : %4ux%4u)", @@ -457,27 +459,27 @@ enum action_iterate_type ITERATE_TYPE_BIND, }; -static enum action_iterate_type action_iterate_type(const char *label) +static enum action_iterate_type action_iterate_type(uint32_t hash) { - if (!strcmp(label, "help")) - return ITERATE_TYPE_HELP; - else if (!strcmp(label, "info_screen")) - return ITERATE_TYPE_INFO; - else if (!strcmp(label, "load_open_zip")) - return ITERATE_TYPE_ZIP; - else if (!strcmp(label, "message")) - return ITERATE_TYPE_MESSAGE; - else if ( - !strcmp(label, "custom_viewport_1") || - !strcmp(label, "custom_viewport_2") - ) - return ITERATE_TYPE_VIEWPORT; - else if ( - !strcmp(label, "custom_bind") || - !strcmp(label, "custom_bind_all") || - !strcmp(label, "custom_bind_defaults") - ) - return ITERATE_TYPE_BIND; + switch (hash) + { + case MENU_LABEL_HELP: + return ITERATE_TYPE_HELP; + case MENU_LABEL_INFO_SCREEN: + return ITERATE_TYPE_INFO; + case MENU_LABEL_LOAD_OPEN_ZIP: + return ITERATE_TYPE_ZIP; + case MENU_LABEL_MESSAGE: + return ITERATE_TYPE_MESSAGE; + case MENU_LABEL_CUSTOM_VIEWPORT_1: + case MENU_LABEL_CUSTOM_VIEWPORT_2: + return ITERATE_TYPE_VIEWPORT; + case MENU_LABEL_CUSTOM_BIND: + case MENU_LABEL_CUSTOM_BIND_ALL: + case MENU_LABEL_CUSTOM_BIND_DEFAULTS: + return ITERATE_TYPE_BIND; + } + return ITERATE_TYPE_DEFAULT; } @@ -495,10 +497,11 @@ static int action_iterate_main(const char *label, unsigned action) int ret = 0; menu_handle_t *menu = menu_driver_get_ptr(); menu_list_t *menu_list = menu_list_get_ptr(); + uint32_t hash = djb2_calculate(label); if (!menu || !menu_list) return 0; - iterate_type = action_iterate_type(label); + iterate_type = action_iterate_type(hash); switch (iterate_type) { @@ -514,7 +517,7 @@ static int action_iterate_main(const char *label, unsigned action) menu_list_pop_stack(menu_list); break; case ITERATE_TYPE_VIEWPORT: - ret = action_iterate_menu_viewport(msg, sizeof(msg), label, action); + ret = action_iterate_menu_viewport(msg, sizeof(msg), label, action, hash); break; case ITERATE_TYPE_INFO: ret = action_iterate_info(msg, sizeof(msg), label); diff --git a/menu/menu_hash.h b/menu/menu_hash.h index b7b0efbdfe..d91d31efc1 100644 --- a/menu/menu_hash.h +++ b/menu/menu_hash.h @@ -248,6 +248,10 @@ extern "C" { #define MENU_LABEL_VIDEO_SHADER_PRESET 0xc5d3bae4U #define MENU_LABEL_CHEAT_FILE_LOAD 0x57336148U #define MENU_LABEL_REMAP_FILE_LOAD 0x9c2799b8U +#define MENU_LABEL_MESSAGE 0xbe463eeaU +#define MENU_LABEL_INFO_SCREEN 0xd97853d0U +#define MENU_LABEL_LOAD_OPEN_ZIP 0x8aa3c068U +#define MENU_LABEL_CUSTOM_VIEWPORT_1 0x76c3016fU #define MENU_LABEL_CUSTOM_VIEWPORT_2 0x76c30170U #define MENU_LABEL_HELP 0x7c97d2eeU #define MENU_LABEL_INPUT_OVERLAY 0x24e24796U @@ -304,7 +308,9 @@ extern "C" { #define MENU_LABEL_SAVE_NEW_CONFIG 0xcce9ab72U #define MENU_LABEL_ONSCREEN_DISPLAY_SETTINGS 0x67571029U #define MENU_LABEL_CHEAT_APPLY_CHANGES 0xde88aa27U +#define MENU_LABEL_CUSTOM_BIND 0x1e84b3fcU #define MENU_LABEL_CUSTOM_BIND_ALL 0x79ac14f4U +#define MENU_LABEL_CUSTOM_BIND_DEFAULTS 0xe88f7b13U #define MENU_LABEL_SAVESTATE 0x3a4849b5U #define MENU_LABEL_LOADSTATE 0xa39eb286U #define MENU_LABEL_RESUME_CONTENT 0xd9f088b0U