From 14369a98533f550b12b4dc1be331da1d0d7af7c9 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sat, 24 Aug 2019 20:36:48 -0400 Subject: [PATCH] HIDParser: Use std::array where applicable Same thing, but strongly enforces the type of the array. This also allows removing the include, since we can just query the size of the array. --- lib/inputdev/HIDParser.cpp | 516 +++++++++++++++++++------------------ 1 file changed, 266 insertions(+), 250 deletions(-) diff --git a/lib/inputdev/HIDParser.cpp b/lib/inputdev/HIDParser.cpp index 2442d34..2ec28ed 100644 --- a/lib/inputdev/HIDParser.cpp +++ b/lib/inputdev/HIDParser.cpp @@ -1,8 +1,8 @@ #include "boo/inputdev/HIDParser.hpp" #include +#include #include -#include #undef min #undef max @@ -13,251 +13,257 @@ namespace boo { * http://www.usb.org/developers/hidpage/HID1_11.pdf */ -static const char* UsagePageNames[] = {"Undefined", "Generic Desktop", "Simulation", "VR", "Sport", - "Game Controls", "Generic Device", "Keyboard", "LEDs", "Button", - "Ordinal", "Telephony", "Consumer", "Digitizer"}; +constexpr std::array UsagePageNames{ + "Undefined", "Generic Desktop", "Simulation", "VR", "Sport", + "Game Controls", "Generic Device", "Keyboard", "LEDs", "Button", + "Ordinal", "Telephony", "Consumer", "Digitizer", +}; -static const char* GenericDesktopUsages[] = {"Undefined", - "Pointer", - "Mouse", - "Reserved", - "Joystick", - "Game Pad", - "Keyboard", - "Keypad", - "Multi-axis Controller", - "Tablet PC System Controls", - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - "X", - "Y", - "Z", - "Rx", - "Ry", - "Rz", - "Slider", - "Dial", - "Wheel", - "Hat Switch", - "Counted Buffer", - "Byte Count", - "Motion Wakeup", - "Start", - "Select", - "Reserved", - "Vx", - "Vy", - "Vz", - "Vbrx", - "Vbry", - "Vbrz", - "Vno", - "Feature Notification", - "Resolution Multiplier", - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - "System Control", - "System Power Down", - "System Sleep", - "System Wake Up", - "System Context Menu", - "System Main Menu", - "System App Menu", - "System Menu Help", - "System Menu Exit", - "System Menu Select", - "System Menu Right", - "System Menu Left", - "System Menu Up", - "System Menu Down", - "System Cold Restart", - "System Warm Restart", - "D-pad Up", - "D-pad Down", - "D-pad Right", - "D-pad Left", - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - "System Dock", - "System Undock", - "System Setup", - "System Break", - "System Debugger Break", - "Application Break", - "Application Debugger Break", - "System Speaker Mute", - "System Hibernate", - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - "System Display Invert", - "System Display Internal", - "System Display External", - "System Display Both", - "System Display Dual", - "System Display Toggle Int/Ext"}; +constexpr std::array GenericDesktopUsages{ + "Undefined", + "Pointer", + "Mouse", + "Reserved", + "Joystick", + "Game Pad", + "Keyboard", + "Keypad", + "Multi-axis Controller", + "Tablet PC System Controls", + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + "X", + "Y", + "Z", + "Rx", + "Ry", + "Rz", + "Slider", + "Dial", + "Wheel", + "Hat Switch", + "Counted Buffer", + "Byte Count", + "Motion Wakeup", + "Start", + "Select", + "Reserved", + "Vx", + "Vy", + "Vz", + "Vbrx", + "Vbry", + "Vbrz", + "Vno", + "Feature Notification", + "Resolution Multiplier", + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + "System Control", + "System Power Down", + "System Sleep", + "System Wake Up", + "System Context Menu", + "System Main Menu", + "System App Menu", + "System Menu Help", + "System Menu Exit", + "System Menu Select", + "System Menu Right", + "System Menu Left", + "System Menu Up", + "System Menu Down", + "System Cold Restart", + "System Warm Restart", + "D-pad Up", + "D-pad Down", + "D-pad Right", + "D-pad Left", + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + "System Dock", + "System Undock", + "System Setup", + "System Break", + "System Debugger Break", + "Application Break", + "Application Debugger Break", + "System Speaker Mute", + "System Hibernate", + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + "System Display Invert", + "System Display Internal", + "System Display External", + "System Display Both", + "System Display Dual", + "System Display Toggle Int/Ext", +}; -static const char* GameUsages[] = {"Undefined", - "3D Game Controller", - "Pinball Device", - "Gun Device", - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - "Point of View", - "Turn Right/Left", - "Pitch Forward/Backward", - "Roll Right/Left", - "Move Right/Left", - "Move Forward/Backward", - "Move Up/Down", - "Lean Right/Left", - "Lean Forward/Backward", - "Height of POV", - "Flipper", - "Secondary Flipper", - "Bump", - "New Game", - "Shoot Ball", - "Player", - "Gun Bolt", - "Gun Clip", - "Gun Selector", - "Gun Single Shot", - "Gun Burst", - "Gun Automatic", - "Gun Safety", - "Gemepad Fire/Jump", - nullptr, - "Gamepad Trigger"}; +constexpr std::array GameUsages{ + "Undefined", + "3D Game Controller", + "Pinball Device", + "Gun Device", + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + "Point of View", + "Turn Right/Left", + "Pitch Forward/Backward", + "Roll Right/Left", + "Move Right/Left", + "Move Forward/Backward", + "Move Up/Down", + "Lean Right/Left", + "Lean Forward/Backward", + "Height of POV", + "Flipper", + "Secondary Flipper", + "Bump", + "New Game", + "Shoot Ball", + "Player", + "Gun Bolt", + "Gun Clip", + "Gun Selector", + "Gun Single Shot", + "Gun Burst", + "Gun Automatic", + "Gun Safety", + "Gemepad Fire/Jump", + nullptr, + "Gamepad Trigger", +}; enum class HIDCollectionType : uint8_t { Physical, @@ -382,21 +388,31 @@ HIDMainItem::HIDMainItem(uint32_t flags, HIDUsagePage usagePage, HIDUsage usage, , m_reportSize(reportSize) {} const char* HIDMainItem::GetUsagePageName() const { - if (int(m_usagePage) >= std::extent::value) + const auto index = size_t(m_usagePage); + + if (index >= UsagePageNames.size()) { return nullptr; - return UsagePageNames[int(m_usagePage)]; + } + + return UsagePageNames[index]; } const char* HIDMainItem::GetUsageName() const { + const auto index = size_t(m_usage); + switch (m_usagePage) { case HIDUsagePage::GenericDesktop: - if (int(m_usage) >= std::extent::value) + if (index >= GenericDesktopUsages.size()) { return nullptr; - return GenericDesktopUsages[int(m_usage)]; + } + return GenericDesktopUsages[index]; + case HIDUsagePage::Game: - if (int(m_usage) >= std::extent::value) + if (index >= GameUsages.size()) { return nullptr; - return GameUsages[int(m_usage)]; + } + return GameUsages[index]; + default: return nullptr; }