comparison Core/Toolbox.cpp @ 624:b58d65608949

integration find-move-scp -> mainline
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 25 Oct 2013 12:42:38 +0200
parents 0bedf8ff9288
children dc12a3fa4961
comparison
equal deleted inserted replaced
609:5651d2c6f6fd 624:b58d65608949
40 #include <boost/filesystem/fstream.hpp> 40 #include <boost/filesystem/fstream.hpp>
41 #include <boost/date_time/posix_time/posix_time.hpp> 41 #include <boost/date_time/posix_time/posix_time.hpp>
42 #include <boost/uuid/sha1.hpp> 42 #include <boost/uuid/sha1.hpp>
43 #include <algorithm> 43 #include <algorithm>
44 #include <ctype.h> 44 #include <ctype.h>
45 #include <boost/regex.hpp>
45 46
46 #if defined(_WIN32) 47 #if defined(_WIN32)
47 #include <windows.h> 48 #include <windows.h>
48 #endif 49 #endif
49 50
724 725
725 default: 726 default:
726 throw OrthancException(ErrorCode_NotImplemented); 727 throw OrthancException(ErrorCode_NotImplemented);
727 } 728 }
728 } 729 }
730
731
732 std::string Toolbox::WildcardToRegularExpression(const std::string& source)
733 {
734 // TODO - Speed up this with a regular expression
735
736 std::string result = source;
737
738 // Escape all special characters
739 boost::replace_all(result, "\\", "\\\\");
740 boost::replace_all(result, "^", "\\^");
741 boost::replace_all(result, ".", "\\.");
742 boost::replace_all(result, "$", "\\$");
743 boost::replace_all(result, "|", "\\|");
744 boost::replace_all(result, "(", "\\(");
745 boost::replace_all(result, ")", "\\)");
746 boost::replace_all(result, "[", "\\[");
747 boost::replace_all(result, "]", "\\]");
748 boost::replace_all(result, "+", "\\+");
749 boost::replace_all(result, "/", "\\/");
750 boost::replace_all(result, "{", "\\{");
751 boost::replace_all(result, "}", "\\}");
752
753 // Convert wildcards '*' and '?' to their regex equivalents
754 boost::replace_all(result, "?", ".");
755 boost::replace_all(result, "*", ".*");
756
757 return result;
758 }
759
760
761
762 void Toolbox::TokenizeString(std::vector<std::string>& result,
763 const std::string& value,
764 char separator)
765 {
766 result.clear();
767
768 std::string currentItem;
769
770 for (size_t i = 0; i < value.size(); i++)
771 {
772 if (value[i] == separator)
773 {
774 result.push_back(currentItem);
775 currentItem.clear();
776 }
777 else
778 {
779 currentItem.push_back(value[i]);
780 }
781 }
782
783 result.push_back(currentItem);
784 }
729 } 785 }
786