From e2354acc65a228e5d37d2734f6b1727b8cfd2c72 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Sat, 27 Sep 2014 03:17:08 -0300 Subject: [PATCH] Updated the love key to SDL keycode mapping to be a static array instead of a std::map. --- src/modules/keyboard/Keyboard.h | 2 +- src/modules/keyboard/sdl/Keyboard.cpp | 13 ++++++------- src/modules/keyboard/sdl/Keyboard.h | 9 +++------ 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/modules/keyboard/Keyboard.h b/src/modules/keyboard/Keyboard.h index 2ca366d74..98a2177b3 100644 --- a/src/modules/keyboard/Keyboard.h +++ b/src/modules/keyboard/Keyboard.h @@ -241,7 +241,7 @@ public: KEY_EJECT, KEY_SLEEP, - KEY_MAX_ENUM = 512 + KEY_MAX_ENUM }; virtual ~Keyboard() {} diff --git a/src/modules/keyboard/sdl/Keyboard.cpp b/src/modules/keyboard/sdl/Keyboard.cpp index 00b6812f7..e50d176fe 100644 --- a/src/modules/keyboard/sdl/Keyboard.cpp +++ b/src/modules/keyboard/sdl/Keyboard.cpp @@ -18,8 +18,6 @@ * 3. This notice may not be removed or altered from any source distribution. **/ -#include "common/config.h" - #include "Keyboard.h" namespace love @@ -55,8 +53,8 @@ bool Keyboard::isDown(Key *keylist) const for (Key key = *keylist; key != KEY_MAX_ENUM; key = *(++keylist)) { - auto it = keys.find(key); - if (it != keys.end() && keystate[SDL_GetScancodeFromKey(it->second)]) + SDL_Scancode scancode = SDL_GetScancodeFromKey(keymap[key]); + if (keystate[scancode]) return true; } @@ -76,9 +74,10 @@ bool Keyboard::hasTextInput() const return SDL_IsTextInputActive(); } -std::map Keyboard::createKeyMap() +const SDL_Keycode *Keyboard::createKeyMap() { - std::map k; + // Array must be static so its lifetime continues once the function returns. + static SDL_Keycode k[Keyboard::KEY_MAX_ENUM] = {SDLK_UNKNOWN}; k[Keyboard::KEY_UNKNOWN] = SDLK_UNKNOWN; @@ -287,7 +286,7 @@ std::map Keyboard::createKeyMap() return k; } -std::map Keyboard::keys = Keyboard::createKeyMap(); +const SDL_Keycode *Keyboard::keymap = Keyboard::createKeyMap(); } // sdl } // keyboard diff --git a/src/modules/keyboard/sdl/Keyboard.h b/src/modules/keyboard/sdl/Keyboard.h index 9b7a5f2c4..5f5bea05b 100644 --- a/src/modules/keyboard/sdl/Keyboard.h +++ b/src/modules/keyboard/sdl/Keyboard.h @@ -26,10 +26,7 @@ #include "common/EnumMap.h" // SDL -#include - -// STL -#include +#include namespace love { @@ -60,8 +57,8 @@ private: // The real implementation is in love::event::sdl::Event::Convert. bool key_repeat; - static std::map createKeyMap(); - static std::map keys; + static const SDL_Keycode *createKeyMap(); + static const SDL_Keycode *keymap; }; // Keyboard