aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2017-07-17 12:00:43 +0200
committerDaniel P. Berrange <berrange@redhat.com>2017-08-02 15:32:36 +0100
commitfd4f790ecd2e13fc924846ad6d346a842324e9ff (patch)
treeab535b1c68c9893f2994ab83f78ff1a589526599
parent204930bad0adc366c0269e055559bb7882570a0e (diff)
downloadkeycodemapdb-fd4f790ecd2e13fc924846ad6d346a842324e9ff.zip
keycodemapdb-fd4f790ecd2e13fc924846ad6d346a842324e9ff.tar.gz
keycodemapdb-fd4f790ecd2e13fc924846ad6d346a842324e9ff.tar.bz2
Use STL types for C++ output
This give us much nicer lookup for string keys, boundary checks and better introspection when it comes to iteration. Signed-off-by: Pierre Ossman <ossman@cendio.se>
-rw-r--r--tests/Makefile2
-rw-r--r--tests/stdc++.cc28
-rwxr-xr-xtools/keymap-gen13
3 files changed, 16 insertions, 27 deletions
diff --git a/tests/Makefile b/tests/Makefile
index b7e2d3f..e8a1f50 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -39,7 +39,7 @@ stdc++: stdc++.cc osx2win32.hh osx2win32_name.hh \
osx2xkb.hh osx2xkb_name.hh \
html2win32.hh html2win32_name.hh \
osx.hh osx_name.hh
- $(CC) -o $@ $^
+ $(CXX) -std=c++11 -o $@ $^
osx2win32.hh: $(SOURCES)
$(GEN) --lang stdc++ code-map $(DATA) osx win32 > $@
osx2win32_name.hh: $(SOURCES)
diff --git a/tests/stdc++.cc b/tests/stdc++.cc
index 71d4bcd..5e3e8f5 100644
--- a/tests/stdc++.cc
+++ b/tests/stdc++.cc
@@ -22,42 +22,18 @@
#include "osx.hh"
#include "osx_name.hh"
-#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
-
int main(int argc, char** argv)
{
- unsigned i;
-
- assert(code_map_osx_to_win32_len == ARRAY_SIZE(code_map_osx_to_win32));
assert(code_map_osx_to_win32[0x1d] == 0x30);
- assert(name_map_osx_to_win32_len == ARRAY_SIZE(name_map_osx_to_win32));
assert(strcmp(name_map_osx_to_win32[0x1d], "VK_0") == 0);
- assert(code_map_osx_to_xkb_len == ARRAY_SIZE(code_map_osx_to_xkb));
assert(strcmp(code_map_osx_to_xkb[0x1d], "AE10") == 0);
- assert(name_map_osx_to_xkb_len == ARRAY_SIZE(name_map_osx_to_xkb));
assert(strcmp(name_map_osx_to_xkb[0x1d], "AE10") == 0);
- assert(code_map_html_to_win32_len == ARRAY_SIZE(code_map_html_to_win32));
- for (i = 0;i < code_map_html_to_win32_len;i++) {
- if (strcmp(code_map_html_to_win32[i].from, "ControlLeft") == 0) {
- assert(code_map_html_to_win32[i].to == 0x11);
- break;
- }
- }
- assert(i != code_map_html_to_win32_len);
- assert(name_map_html_to_win32_len == ARRAY_SIZE(name_map_html_to_win32));
- for (i = 0;i < name_map_html_to_win32_len;i++) {
- if (strcmp(name_map_html_to_win32[i].from, "ControlLeft") == 0) {
- assert(strcmp(name_map_html_to_win32[i].to, "VK_CONTROL") == 0);
- break;
- }
- }
- assert(i != name_map_html_to_win32_len);
+ assert(code_map_html_to_win32.at("ControlLeft") == 0x11);
+ assert(strcmp(name_map_html_to_win32.at("ControlLeft"), "VK_CONTROL") == 0);
- assert(code_table_osx_len == ARRAY_SIZE(code_table_osx));
assert(code_table_osx[0x1d] == 0x3b);
- assert(name_table_osx_len == ARRAY_SIZE(name_table_osx));
assert(strcmp(name_table_osx[0x1d], "Control") == 0);
return 0;
diff --git a/tools/keymap-gen b/tools/keymap-gen
index cb8b8fc..6536861 100755
--- a/tools/keymap-gen
+++ b/tools/keymap-gen
@@ -530,6 +530,19 @@ class CLanguageGenerator(LanguageSrcGenerator):
class CppLanguageGenerator(CLanguageGenerator):
+ def _array_start_code(self, varname, length, fromtype, totype):
+ totypename = self.inttypename if totype == int else "const " + self.strtypename
+ if fromtype == int:
+ print("#include <vector>")
+ print("const std::vector<%s> %s = {" % (totypename, varname))
+ else:
+ print("#include <map>")
+ print("#include <string>")
+ print("const std::map<const std::string, %s> %s = {" % (totypename, varname))
+
+ def _array_end(self):
+ print("};")
+
# designated initializers not available in C++
def _array_entry_code(self, index, value, comment):
if type(index) != int: