From f1bd05aa8fede9ea4bb456e65ccd99463d1b5ac0 Mon Sep 17 00:00:00 2001 From: Felix Weiglhofer <weiglhofer@fias.uni-frankfurt.de> Date: Mon, 5 Jun 2023 13:33:33 +0000 Subject: [PATCH] algo: Add case-senstive flag to FromString for enum conversion. --- algo/CMakeLists.txt | 2 ++ algo/base/util/SerializableEnum.h | 10 ++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/algo/CMakeLists.txt b/algo/CMakeLists.txt index 1ebaa65559..eabd850ac8 100644 --- a/algo/CMakeLists.txt +++ b/algo/CMakeLists.txt @@ -77,6 +77,7 @@ target_link_libraries(Algo fmt::fmt Boost::program_options Boost::filesystem + Boost::headers xpu external::yaml-cpp external::fles_logging @@ -88,6 +89,7 @@ xpu_attach(Algo ${DEVICE_SRCS}) install(TARGETS Algo DESTINATION lib) install(DIRECTORY base/compat TYPE INCLUDE FILES_MATCHING PATTERN "*.h") install(DIRECTORY base/config TYPE INCLUDE FILES_MATCHING PATTERN "*.h") +install(DIRECTORY base/util TYPE INCLUDE FILES_MATCHING PATTERN "*.h") install(DIRECTORY base/gpu TYPE INCLUDE FILES_MATCHING PATTERN "*.h") install(DIRECTORY data/sts TYPE INCLUDE FILES_MATCHING PATTERN "*.h") diff --git a/algo/base/util/SerializableEnum.h b/algo/base/util/SerializableEnum.h index 8921b3ef79..84ffd80482 100644 --- a/algo/base/util/SerializableEnum.h +++ b/algo/base/util/SerializableEnum.h @@ -4,6 +4,8 @@ #ifndef CBM_ALGO_BASE_UTIL_SERIALIZABLEENUM_H #define CBM_ALGO_BASE_UTIL_SERIALIZABLEENUM_H +#include <boost/algorithm/string/predicate.hpp> + #include <algorithm> #include <iostream> #include <optional> @@ -59,10 +61,14 @@ namespace cbm::algo inline const EnumDict_t<T> EnumDict; template<typename T, typename = std::enable_if_t<EnumIsSerializable<T>::value>> - std::optional<T> FromString(std::string_view str) + std::optional<T> FromString(std::string_view str, bool caseSensitive = false) { const auto& set = EnumDict<T>; - auto it = std::find_if(set.begin(), set.end(), [str](const auto& pair) { return pair.first == str; }); + auto it = std::find_if(set.begin(), set.end(), [&](const auto& pair) { + if (caseSensitive) return pair.first == str; + else + return boost::iequals(pair.first, str); + }); if (it == set.end()) return std::nullopt; return it->second; } -- GitLab