From b2d8558f1fc3decac6373bbba0321b038bc7ec97 Mon Sep 17 00:00:00 2001 From: Dorian Zedler Date: Wed, 27 May 2020 12:35:01 +0200 Subject: [PATCH] changed verification method of enum conversions --- ScStwLibraries/headers/ScStw.hpp | 10 +++++++ ScStwLibraries/sources/ScStw.cpp | 45 +++++++++----------------------- 2 files changed, 22 insertions(+), 33 deletions(-) diff --git a/ScStwLibraries/headers/ScStw.hpp b/ScStwLibraries/headers/ScStw.hpp index 9306e46..0dfbaaa 100644 --- a/ScStwLibraries/headers/ScStw.hpp +++ b/ScStwLibraries/headers/ScStw.hpp @@ -3,6 +3,7 @@ #include #include +#include /*! * \mainpage ScStw Libraries documentation @@ -222,6 +223,15 @@ public: */ static int firmwareCompare(QString a, QString b); + /*! + * \brief Function to convert a value to an enum + */ + template + static Enum toEnumValue(const int &value, bool *ok) + { + QMetaEnum enumeration = QMetaEnum::fromType(); + return static_cast(enumeration.keyToValue(enumeration.valueToKey(value), ok)); + } ScStw() : QObject(nullptr) {}; private: diff --git a/ScStwLibraries/sources/ScStw.cpp b/ScStwLibraries/sources/ScStw.cpp index 2855eb7..68a97ba 100644 --- a/ScStwLibraries/sources/ScStw.cpp +++ b/ScStwLibraries/sources/ScStw.cpp @@ -27,51 +27,30 @@ QString ScStw::baseStationSettingToString(ScStw::BaseStationSetting s) { } ScStw::BaseStationSetting ScStw::baseStationSettingfromInt(int i) { - if(i < 0 || i > 4) + bool ok; + BaseStationSetting s = ScStw::toEnumValue(i, &ok); + if(!ok) return InvalidSetting; else - return BaseStationSetting(i); + return s; } ScStw::SignalKey ScStw::signalKeyFromInt(int i) { - if(i < 9000 || i > 9003) + bool ok; + ScStw::SignalKey k = ScStw::toEnumValue(i, &ok); + if(!ok) return InvalidSignal; else - return SignalKey(i); + return k; } ScStw::SocketCommand ScStw::socketCommandFromInt(int i) { - QList allCommands = { - InitializeSessionCommand, - - StartTimersCommand, - StopTimersCommand, - ResetTimersCommand, - - GetRaceStateCommand, - GetNextStartActionCommand, - GetExtensionsCommand, - GetTimersCommand, - GetNextStartActionDetailsCommand, - - WriteSettingCommand, - ReadSettingCommand, - - LoginAthleteCommand, - CreateAthleteCommand, - DeleteAthleteCommand, - GetAtheletesCommand, - GetAthleteResultsCommand, - - UpdateFirmwareCommand, - UpdateSystemTimeCommand, - PairExtensionsCommand - }; - - if(!allCommands.contains(SocketCommand(i))) + bool ok; + SocketCommand c = ScStw::toEnumValue(i, &ok); + if(!ok) return InvalidCommand; else - return SocketCommand(i); + return c; } int ScStw::firmwareCompare(QString a, QString b) {