diff --git a/algo/CMakeLists.txt b/algo/CMakeLists.txt index 1ebaa65559c3f4dba35928d617ef6901e1e3cd8b..eabd850ac8d6239138405068a08ce7106a6a535f 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 8921b3ef7936048d695ae9e8872ff7091269eced..84ffd80482aa98e40c6b7e086a1556b829c28485 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; }