X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fkeycode.cpp;h=6822875b1bce0017954a77e2542b669161348953;hb=fd9f195fcc2e4e592dbad3290876486eb08318b2;hp=48d010cf4f4de98d345f8754acbb5ce0b43e13a5;hpb=c3e1ab859e310f60c0462428d3c991b5218c98d2;p=minetest.git diff --git a/src/keycode.cpp b/src/keycode.cpp index 48d010cf4..6822875b1 100644 --- a/src/keycode.cpp +++ b/src/keycode.cpp @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "debug.h" #include "util/hex.h" #include "util/string.h" +#include "util/basic_macros.h" class UnknownKeycode : public BaseException { @@ -242,13 +243,12 @@ static const struct table_key table[] = { #undef N_ -#define ARRAYSIZE(a) (sizeof(a) / sizeof((a)[0])) struct table_key lookup_keyname(const char *name) { - for (u16 i = 0; i < ARRAYSIZE(table); i++) { - if (strcmp(table[i].Name, name) == 0) - return table[i]; + for (const auto &table_key : table) { + if (strcmp(table_key.Name, name) == 0) + return table_key; } throw UnknownKeycode(name); @@ -256,9 +256,9 @@ struct table_key lookup_keyname(const char *name) struct table_key lookup_keykey(irr::EKEY_CODE key) { - for (u16 i = 0; i < ARRAYSIZE(table); i++) { - if (table[i].Key == key) - return table[i]; + for (const auto &table_key : table) { + if (table_key.Key == key) + return table_key; } std::ostringstream os; @@ -268,9 +268,9 @@ struct table_key lookup_keykey(irr::EKEY_CODE key) struct table_key lookup_keychar(wchar_t Char) { - for (u16 i = 0; i < ARRAYSIZE(table); i++) { - if (table[i].Char == Char) - return table[i]; + for (const auto &table_key : table) { + if (table_key.Char == Char) + return table_key; } std::ostringstream os; @@ -278,12 +278,6 @@ struct table_key lookup_keychar(wchar_t Char) throw UnknownKeycode(os.str().c_str()); } -KeyPress::KeyPress() : - Key(irr::KEY_KEY_CODES_COUNT), - Char(L'\0'), - m_name("") -{} - KeyPress::KeyPress(const char *name) { if (strlen(name) == 0) { @@ -291,7 +285,9 @@ KeyPress::KeyPress(const char *name) Char = L'\0'; m_name = ""; return; - } else if (strlen(name) <= 4) { + } + + if (strlen(name) <= 4) { // Lookup by resulting character int chars_read = mbtowc(&Char, name, 1); FATAL_ERROR_IF(chars_read != 1, "Unexpected multibyte character"); @@ -345,7 +341,7 @@ const char *KeyPress::sym() const const char *KeyPress::name() const { - if (m_name == "") + if (m_name.empty()) return ""; const char *ret; if (valid_kcode(Key)) @@ -357,23 +353,19 @@ const char *KeyPress::name() const const KeyPress EscapeKey("KEY_ESCAPE"); const KeyPress CancelKey("KEY_CANCEL"); -const KeyPress NumberKey[] = { - KeyPress("0"), KeyPress("1"), KeyPress("2"), KeyPress("3"), KeyPress("4"), - KeyPress("5"), KeyPress("6"), KeyPress("7"), KeyPress("8"), KeyPress("9") -}; /* Key config */ // A simple cache for quicker lookup -std::map g_key_setting_cache; +std::unordered_map g_key_setting_cache; KeyPress getKeySetting(const char *settingname) { - std::map::iterator n; + std::unordered_map::iterator n; n = g_key_setting_cache.find(settingname); - if(n != g_key_setting_cache.end()) + if (n != g_key_setting_cache.end()) return n->second; KeyPress k(g_settings->get(settingname).c_str()); @@ -385,3 +377,8 @@ void clearKeyCache() { g_key_setting_cache.clear(); } + +irr::EKEY_CODE keyname_to_keycode(const char *name) +{ + return lookup_keyname(name).Key; +}