Mercurial > hg > orthanc
diff Core/Toolbox.cpp @ 608:0bedf8ff9288 find-move-scp
basic find scp
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 17 Oct 2013 18:07:55 +0200 |
parents | 2737806bcf60 |
children | dc12a3fa4961 |
line wrap: on
line diff
--- a/Core/Toolbox.cpp Thu Oct 17 14:20:13 2013 +0200 +++ b/Core/Toolbox.cpp Thu Oct 17 18:07:55 2013 +0200 @@ -42,6 +42,7 @@ #include <boost/uuid/sha1.hpp> #include <algorithm> #include <ctype.h> +#include <boost/regex.hpp> #if defined(_WIN32) #include <windows.h> @@ -726,4 +727,60 @@ throw OrthancException(ErrorCode_NotImplemented); } } + + + std::string Toolbox::WildcardToRegularExpression(const std::string& source) + { + // TODO - Speed up this with a regular expression + + std::string result = source; + + // Escape all special characters + boost::replace_all(result, "\\", "\\\\"); + boost::replace_all(result, "^", "\\^"); + boost::replace_all(result, ".", "\\."); + boost::replace_all(result, "$", "\\$"); + boost::replace_all(result, "|", "\\|"); + boost::replace_all(result, "(", "\\("); + boost::replace_all(result, ")", "\\)"); + boost::replace_all(result, "[", "\\["); + boost::replace_all(result, "]", "\\]"); + boost::replace_all(result, "+", "\\+"); + boost::replace_all(result, "/", "\\/"); + boost::replace_all(result, "{", "\\{"); + boost::replace_all(result, "}", "\\}"); + + // Convert wildcards '*' and '?' to their regex equivalents + boost::replace_all(result, "?", "."); + boost::replace_all(result, "*", ".*"); + + return result; + } + + + + void Toolbox::TokenizeString(std::vector<std::string>& result, + const std::string& value, + char separator) + { + result.clear(); + + std::string currentItem; + + for (size_t i = 0; i < value.size(); i++) + { + if (value[i] == separator) + { + result.push_back(currentItem); + currentItem.clear(); + } + else + { + currentItem.push_back(value[i]); + } + } + + result.push_back(currentItem); + } } +