Skip to content

Commit 4f8e6a6

Browse files
committed
Common: EnumFlags allow ',' as delimiter
Signed-off-by: Felix Schlepper <felix.schlepper@cern.ch>
1 parent d467e93 commit 4f8e6a6

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

Common/Utils/include/CommonUtils/EnumFlags.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -668,15 +668,16 @@ class EnumFlags
668668
throw std::out_of_range("Values exceeds enum range.");
669669
}
670670
mBits = static_cast<U>(v);
671-
} else if (std::all_of(s.begin(), s.end(), [](unsigned char c) { return std::isalnum(c) != 0 || c == '|' || c == ' ' || c == ':'; })) {
671+
} else if (std::all_of(s.begin(), s.end(), [](unsigned char c) { return std::isalnum(c) != 0 || c == '|' || c == ' ' || c == ':' || c == ','; })) {
672672
std::string cs{s};
673673
std::transform(cs.begin(), cs.end(), cs.begin(), [](unsigned char c) { return std::tolower(c); });
674674
if (cs == H::All) {
675675
mBits = All;
676676
} else if (cs == H::None) {
677677
mBits = None;
678678
} else {
679-
for (const auto& tok : Str::tokenize(s, '|')) {
679+
char token = (s.find(',') != std::string::npos) ? ',' : '|';
680+
for (const auto& tok : Str::tokenize(s, token)) {
680681
if (auto e = H::fromString(tok)) {
681682
mBits |= to_bit(*e);
682683
} else {

Common/Utils/test/testEnumFlags.cxx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,20 @@ BOOST_AUTO_TEST_CASE(Flags_test)
141141
BOOST_TEST(flags.test(TestEnum::Bit4));
142142
}
143143

144+
{ // test with different delimiter
145+
std::string str = "Bit4,TestEnum::Bit2 , Bit1 ";
146+
flags.set(str);
147+
BOOST_TEST(flags.test(TestEnum::Bit1));
148+
BOOST_TEST(flags.test(TestEnum::Bit2));
149+
BOOST_TEST(!flags.test(TestEnum::Bit3));
150+
BOOST_TEST(flags.test(TestEnum::Bit4));
151+
}
152+
153+
{ // throw test with mixed delimiter
154+
std::string str = "Bit4|TestEnum::Bit2 , Bit1 ";
155+
BOOST_CHECK_THROW(flags.set(str), std::invalid_argument);
156+
}
157+
144158
{ // test throw
145159
std::string str = "Invalid";
146160
BOOST_CHECK_THROW(flags.set(str), std::invalid_argument);

0 commit comments

Comments
 (0)