From cb4d9b527e3188b0ba1740593fb2cc8f97d876e5 Mon Sep 17 00:00:00 2001 From: toaster Date: Wed, 22 Mar 2023 23:34:01 +0000 Subject: [PATCH] musicdef_t: Add `hash` field Slight optimisation for S_FindMusicDef, but will net us some big wins with our next feature. --- src/s_sound.c | 17 ++++++++++------- src/s_sound.h | 1 + 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/s_sound.c b/src/s_sound.c index d3f9f5472..f099fee2d 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -1368,16 +1368,18 @@ struct cursongcredit cursongcredit; // Currently displayed song credit info // musicdef_t *S_FindMusicDef(const char *name) { - musicdef_t *def = musicdefstart; + UINT32 hash = quickncasehash (name, 6); + musicdef_t *def; - while (def) + for (def = musicdefstart; def; def = def->next) { - if (!stricmp(def->name, name)) - { - return def; - } + if (hash != def->hash) + continue; - def = def->next; + if (stricmp(def->name, name)) + continue; + + return def; } return NULL; @@ -1439,6 +1441,7 @@ ReadMusicDefFields STRBUFCPY(def->name, value); strlwr(def->name); + def->hash = quickncasehash (def->name, 6); def->volume = DEFAULT_MUSICDEF_VOLUME; def->next = musicdefstart; diff --git a/src/s_sound.h b/src/s_sound.h index 15c1445a3..270517ca1 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -178,6 +178,7 @@ boolean S_SpeedMusic(float speed); struct musicdef_t { char name[7]; + UINT32 hash; char *title; char *author; char *source;