From 3dd4dbf2ce17413aacc912af04a88bca7beeb1f9 Mon Sep 17 00:00:00 2001 From: Denis Pauk Date: Sat, 14 Sep 2024 21:08:07 +0300 Subject: [PATCH] game: use binary search for message translation --- src/game/g_translate.c | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/src/game/g_translate.c b/src/game/g_translate.c index ae634401..a38e0668 100644 --- a/src/game/g_translate.c +++ b/src/game/g_translate.c @@ -193,6 +193,38 @@ LocalizationInit(void) } } +static int +LocalizationSearch(const char *name) +{ + int start, end; + + start = 0; + end = nlocalmessages - 1; + + while (start <= end) + { + int i, res; + + i = start + (end - start) / 2; + + res = Q_stricmp(localmessages[i].key, name); + if (res == 0) + { + return i; + } + else if (res < 0) + { + start = i + 1; + } + else + { + end = i - 1; + } + } + + return -1; +} + const char* LocalizationMessage(const char *message) { @@ -205,12 +237,10 @@ LocalizationMessage(const char *message) { int i; - for (i = 0; i < nlocalmessages; i++) + i = LocalizationSearch(message); + if (i >= 0) { - if (!strcmp(localmessages[i].key, message)) - { - return localmessages[i].value; - } + return localmessages[i].value; } }