HIDParser: Use std::array where applicable

Same thing, but strongly enforces the type of the array. This also
allows removing the <type_traits> include, since we can just query the
size of the array.
This commit is contained in:
Lioncash 2019-08-24 20:36:48 -04:00
parent b0c246abc7
commit 14369a9853
1 changed files with 266 additions and 250 deletions

View File

@ -1,8 +1,8 @@
#include "boo/inputdev/HIDParser.hpp"
#include <algorithm>
#include <array>
#include <map>
#include <type_traits>
#undef min
#undef max
@ -13,11 +13,14 @@ namespace boo {
* http://www.usb.org/developers/hidpage/HID1_11.pdf
*/
static const char* UsagePageNames[] = {"Undefined", "Generic Desktop", "Simulation", "VR", "Sport",
constexpr std::array<const char*, 14> UsagePageNames{
"Undefined", "Generic Desktop", "Simulation", "VR", "Sport",
"Game Controls", "Generic Device", "Keyboard", "LEDs", "Button",
"Ordinal", "Telephony", "Consumer", "Digitizer"};
"Ordinal", "Telephony", "Consumer", "Digitizer",
};
static const char* GenericDesktopUsages[] = {"Undefined",
constexpr std::array<const char*, 182> GenericDesktopUsages{
"Undefined",
"Pointer",
"Mouse",
"Reserved",
@ -198,9 +201,11 @@ static const char* GenericDesktopUsages[] = {"Undefined",
"System Display External",
"System Display Both",
"System Display Dual",
"System Display Toggle Int/Ext"};
"System Display Toggle Int/Ext",
};
static const char* GameUsages[] = {"Undefined",
constexpr std::array<const char*, 58> GameUsages{
"Undefined",
"3D Game Controller",
"Pinball Device",
"Gun Device",
@ -257,7 +262,8 @@ static const char* GameUsages[] = {"Undefined",
"Gun Safety",
"Gemepad Fire/Jump",
nullptr,
"Gamepad Trigger"};
"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<decltype(UsagePageNames)>::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<decltype(GenericDesktopUsages)>::value)
if (index >= GenericDesktopUsages.size()) {
return nullptr;
return GenericDesktopUsages[int(m_usage)];
}
return GenericDesktopUsages[index];
case HIDUsagePage::Game:
if (int(m_usage) >= std::extent<decltype(GameUsages)>::value)
if (index >= GameUsages.size()) {
return nullptr;
return GameUsages[int(m_usage)];
}
return GameUsages[index];
default:
return nullptr;
}