# HG changeset patch # User Alain Mazy # Date 1692285908 -7200 # Node ID 123a94dd57dffeea06cbed7bd8e267fb03521fef # Parent 94a52168480bd0b8df7a6aec0bac2f78a749ffb4 Toolbox::SplitString diff -r 94a52168480b -r 123a94dd57df OrthancFramework/Sources/Toolbox.cpp --- a/OrthancFramework/Sources/Toolbox.cpp Thu Aug 17 11:25:59 2023 +0200 +++ b/OrthancFramework/Sources/Toolbox.cpp Thu Aug 17 17:25:08 2023 +0200 @@ -1035,10 +1035,10 @@ return result; } - - void Toolbox::TokenizeString(std::vector& result, + static void TokenizeStringInternal(std::vector& result, const std::string& value, - char separator) + char separator, + bool includeEmptyStrings) { size_t countSeparators = 0; @@ -1068,7 +1068,41 @@ } } - result.push_back(currentItem); + if (includeEmptyStrings || !currentItem.empty()) + { + result.push_back(currentItem); + } + } + + + void Toolbox::TokenizeString(std::vector& result, + const std::string& value, + char separator) + { + TokenizeStringInternal(result, value, separator, true); + } + + + void Toolbox::SplitString(std::set& result, + const std::string& value, + char separator) + { + result.clear(); + + std::vector temp; + TokenizeStringInternal(temp, value, separator, false); + for (size_t i = 0; i < temp.size(); ++i) + { + result.insert(temp[i]); + } + } + + + void Toolbox::SplitString(std::vector& result, + const std::string& value, + char separator) + { + TokenizeStringInternal(result, value, separator, false); } diff -r 94a52168480b -r 123a94dd57df OrthancFramework/Sources/Toolbox.h --- a/OrthancFramework/Sources/Toolbox.h Thu Aug 17 11:25:59 2023 +0200 +++ b/OrthancFramework/Sources/Toolbox.h Thu Aug 17 17:25:08 2023 +0200 @@ -183,10 +183,21 @@ static std::string WildcardToRegularExpression(const std::string& s); + // TokenizeString result might contain empty strings (not SplitString) static void TokenizeString(std::vector& result, const std::string& source, char separator); + // SplitString result won't contain empty strings (compared to TokenizeString) + static void SplitString(std::vector& result, + const std::string& source, + char separator); + + // SplitString result won't contain empty strings (compared to TokenizeString) + static void SplitString(std::set& result, + const std::string& source, + char separator); + static void JoinStrings(std::string& result, const std::set& source, const char* separator); diff -r 94a52168480b -r 123a94dd57df OrthancFramework/UnitTestsSources/FrameworkTests.cpp --- a/OrthancFramework/UnitTestsSources/FrameworkTests.cpp Thu Aug 17 11:25:59 2023 +0200 +++ b/OrthancFramework/UnitTestsSources/FrameworkTests.cpp Thu Aug 17 17:25:08 2023 +0200 @@ -706,6 +706,82 @@ ASSERT_EQ("", t[3]); } +TEST(Toolbox, SplitString) +{ + { + std::set result; + Toolbox::SplitString(result, "", ';'); + ASSERT_EQ(0u, result.size()); + } + + { + std::set result; + Toolbox::SplitString(result, "a", ';'); + ASSERT_EQ(1u, result.size()); + ASSERT_TRUE(result.end() != result.find("a")); + } + + { + std::set result; + Toolbox::SplitString(result, "a;b", ';'); + ASSERT_EQ(2u, result.size()); + ASSERT_TRUE(result.end() != result.find("a")); + ASSERT_TRUE(result.end() != result.find("b")); + } + + { + std::set result; + Toolbox::SplitString(result, "a;b;", ';'); + ASSERT_EQ(2u, result.size()); + ASSERT_TRUE(result.end() != result.find("a")); + ASSERT_TRUE(result.end() != result.find("b")); + } + + { + std::set result; + Toolbox::SplitString(result, "a;a", ';'); + ASSERT_EQ(1u, result.size()); + ASSERT_TRUE(result.end() != result.find("a")); + } + + { + std::vector result; + Toolbox::SplitString(result, "", ';'); + ASSERT_EQ(0u, result.size()); + } + + { + std::vector result; + Toolbox::SplitString(result, "a", ';'); + ASSERT_EQ(1u, result.size()); + ASSERT_EQ("a", result[0]); + } + + { + std::vector result; + Toolbox::SplitString(result, "a;b", ';'); + ASSERT_EQ(2u, result.size()); + ASSERT_EQ("a", result[0]); + ASSERT_EQ("b", result[1]); + } + + { + std::vector result; + Toolbox::SplitString(result, "a;b;", ';'); + ASSERT_EQ(2u, result.size()); + ASSERT_EQ("a", result[0]); + ASSERT_EQ("b", result[1]); + } + + { + std::vector result; + Toolbox::TokenizeString(result, "a;a", ';'); + ASSERT_EQ(2u, result.size()); + ASSERT_EQ("a", result[0]); + ASSERT_EQ("a", result[1]); + } +} + TEST(Toolbox, Enumerations) { ASSERT_EQ(Encoding_Utf8, StringToEncoding(EnumerationToString(Encoding_Utf8)));