From 4f6ebff439234fb4cd18a91726750f88d589a0bf 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 31200046f..fdb6bb0da 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -1362,16 +1362,18 @@ int musicdef_volume; // static 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; @@ -1433,6 +1435,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 03e1673cc..5e1ebb74f 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -168,6 +168,7 @@ boolean S_SpeedMusic(float speed); typedef struct musicdef_s { char name[7]; + UINT32 hash; char *title; char *author; char *source;