X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Finput%2Fkeys.cpp;h=d5687ae2c9e1142a92bc8b6d8b4844a2c0b3a1d6;hb=11ab96ba152e389814543a6398e2cd6f17a31092;hp=6be00ba591cbb0618733e0ba1533f867c16fe146;hpb=75286abb276e0f7e7a1fb8f5a7a7c1c33ca5bcda;p=libs%2Fgui.git diff --git a/source/input/keys.cpp b/source/input/keys.cpp index 6be00ba..d5687ae 100644 --- a/source/input/keys.cpp +++ b/source/input/keys.cpp @@ -1,7 +1,8 @@ -#include +#include "keys.h" #include +#include +#include #include -#include "keys.h" using namespace std; @@ -12,21 +13,25 @@ extern unsigned sys_keymap[]; unsigned key_from_sys(unsigned code) { - static bool init_done = false; - static map reverse_map; + struct MappedKey + { + unsigned code; + Key key; + }; - if(!init_done) + static vector reverse_map; + + if(reverse_map.empty()) { for(unsigned i=0; i(i) }); + sort_member(reverse_map, &MappedKey::code); } - map::const_iterator i = reverse_map.find(code); - if(i!=reverse_map.end()) - return i->second; + auto i = lower_bound_member(reverse_map, code, &MappedKey::code); + if(i!=reverse_map.end() && i->code==code) + return i->key; return 0; }