#include "utility/utilityString.h" #include #include namespace utility { std::deque split(const std::string& str, char delimiter) { return split>(str, std::string(1, delimiter)); } std::deque split(const std::string& str, const std::string& delimiter) { return split>(str, delimiter); } std::vector splitToVector(const std::string& str, char delimiter) { return split>(str, std::string(1, delimiter)); } std::vector splitToVector(const std::string& str, const std::string& delimiter) { return split>(str, delimiter); } std::string join(const std::deque& list, char delimiter) { return join >(list, std::string(1, delimiter)); } std::string join(const std::deque& list, const std::string& delimiter) { return join >(list, delimiter); } std::string join(const std::vector& list, char delimiter) { return join >(list, std::string(1, delimiter)); } std::string join(const std::vector& list, const std::string& delimiter) { return join >(list, delimiter); } std::deque tokenize(const std::string& str, char delimiter) { return tokenize(str, std::string(1, delimiter)); } std::deque tokenize(const std::string& str, const std::string& delimiter) { size_t pos = 0; size_t oldPos = 0; std::deque c; do { pos = str.find(delimiter, oldPos); if (pos != oldPos) { c.push_back(str.substr(oldPos, pos - oldPos)); } if (pos != std::string::npos) { c.push_back(str.substr(pos, delimiter.size())); } oldPos = pos + delimiter.size(); } while (pos != std::string::npos && oldPos < str.size()); return c; } std::deque tokenize(const std::deque& list, char delimiter) { return tokenize(list, std::string(1, delimiter)); } std::deque tokenize(const std::deque& list, const std::string& delimiter) { std::deque c; for (std::string str : list) { if (str.size()) { std::deque c2 = tokenize(str, delimiter); c.insert(c.end(), c2.begin(), c2.end()); } } return c; } std::string substrAfter(const std::string& str, char delimiter) { size_t pos = str.find(delimiter); if (pos != std::string::npos) { return str.substr(pos + 1, str.size()); } return str; } bool isPrefix(const std::string& prefix, const std::string& text) { typedef std::pair ResType; ResType res = std::mismatch(prefix.begin(), prefix.end(), text.begin()); return res.first == prefix.end(); } bool equalsCaseInsensitive(const std::string& a, const std::string& b) { if (a.size() == b.size()) { for (size_t i = 0; i < a.size(); i++) { if (tolower(a[i]) != tolower(b[i])) { return false; } } return true; } return false; } std::string replace(std::string str, const std::string& from, const std::string& to) { size_t pos = 0; if (from.size() == 0) { return str; } while ((pos = str.find(from, pos)) != std::string::npos) { str.replace(pos, from.length(), to); pos += to.length(); } return str; } }