Mercurial > hg > orthanc
diff Core/Toolbox.cpp @ 759:8cfc6119a5bd dicom-rt
integration mainline -> dicom-rt
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 16 Apr 2014 16:04:55 +0200 |
parents | b82292ba2083 203157cb4fde |
children | e57e08ed510f |
line wrap: on
line diff
--- a/Core/Toolbox.cpp Thu Oct 17 14:21:50 2013 +0200 +++ b/Core/Toolbox.cpp Wed Apr 16 16:04:55 2014 +0200 @@ -1,6 +1,6 @@ /** * Orthanc - A Lightweight, RESTful DICOM Store - * Copyright (C) 2012-2013 Medical Physics Department, CHU of Liege, + * Copyright (C) 2012-2014 Medical Physics Department, CHU of Liege, * Belgium * * This program is free software: you can redistribute it and/or @@ -42,6 +42,7 @@ #include <boost/uuid/sha1.hpp> #include <algorithm> #include <ctype.h> +#include <boost/regex.hpp> #if defined(_WIN32) #include <windows.h> @@ -156,17 +157,6 @@ } #endif - void Toolbox::Sleep(uint32_t seconds) - { -#if defined(_WIN32) - ::Sleep(static_cast<DWORD>(seconds) * static_cast<DWORD>(1000)); -#elif defined(__linux) - usleep(static_cast<uint64_t>(seconds) * static_cast<uint64_t>(1000000)); -#else -#error Support your platform here -#endif - } - void Toolbox::USleep(uint64_t microSeconds) { #if defined(_WIN32) @@ -186,6 +176,7 @@ #else signal(SIGINT, SignalHandler); signal(SIGQUIT, SignalHandler); + signal(SIGTERM, SignalHandler); #endif finish = false; @@ -199,6 +190,7 @@ #else signal(SIGINT, NULL); signal(SIGQUIT, NULL); + signal(SIGTERM, NULL); #endif } @@ -216,6 +208,20 @@ } + void Toolbox::ToUpperCase(std::string& result, + const std::string& source) + { + result = source; + ToUpperCase(result); + } + + void Toolbox::ToLowerCase(std::string& result, + const std::string& source) + { + result = source; + ToLowerCase(result); + } + void Toolbox::ReadFile(std::string& content, const std::string& path) @@ -448,13 +454,29 @@ void Toolbox::ComputeMD5(std::string& result, const std::string& data) { + if (data.size() > 0) + { + ComputeMD5(result, &data[0], data.size()); + } + else + { + ComputeMD5(result, NULL, 0); + } + } + + + void Toolbox::ComputeMD5(std::string& result, + const void* data, + size_t length) + { md5_state_s state; md5_init(&state); - if (data.size() > 0) + if (length > 0) { - md5_append(&state, reinterpret_cast<const md5_byte_t*>(&data[0]), - static_cast<int>(data.size())); + md5_append(&state, + reinterpret_cast<const md5_byte_t*>(data), + static_cast<int>(length)); } md5_byte_t actualHash[16]; @@ -728,45 +750,58 @@ } + std::string Toolbox::WildcardToRegularExpression(const std::string& source) + { + // TODO - Speed up this with a regular expression - void Toolbox::Split(std::vector<std::string>& result, - const std::string& source, - char delimiter) + 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) { - if (source.size() == 0) + result.clear(); + + std::string currentItem; + + for (size_t i = 0; i < value.size(); i++) { - result.clear(); - return; - } - - size_t count = 1; - for (size_t i = 0; i < source.size(); i++) - { - if (source[i] == delimiter) + if (value[i] == separator) { - count++; + result.push_back(currentItem); + currentItem.clear(); + } + else + { + currentItem.push_back(value[i]); } } - result.clear(); - result.resize(count); - - size_t pos = 0; - size_t start = 0; - while (start < source.size()) - { - assert(pos < count); + result.push_back(currentItem); + } +} - size_t end = start; - while (end < source.size() && - source[end] != delimiter) - { - end++; - } - - result[pos++] = source.substr(start, end - start); - start = end + 1; - } - } - -}