/* * Util.h * * Copyright (C) 2008 Matthias Schiffer * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef MAD_COMMON_UTIL_H_ #define MAD_COMMON_UTIL_H_ #include #include #include namespace Mad { namespace Common { class Util { private: Util(); public: static std::string tolower(const std::string &str) { std::string ret; for(std::string::const_iterator c = str.begin(); c != str.end(); ++c) ret += std::tolower(*c); return ret; } static std::string trim(const std::string &str) { size_t beg, end; beg = str.find_first_not_of(" \t"); end = str.find_last_not_of(" \t"); if(beg == std::string::npos) beg = 0; if(end != std::string::npos) end = end-beg+1; return str.substr(beg, end); } static std::vector split(const std::string &str) { std::vector ret; std::string temp; bool quoteSingle = false, quoteDouble = false, escape = false; size_t beg = 0; for(size_t cur = 0; cur < str.length(); ++cur) { if(!escape) { if(str[cur] == ' ' && !quoteSingle && !quoteDouble) { if(cur == beg && temp.empty()) { ++beg; } else { temp += str.substr(beg, cur-beg); ret.push_back(temp); temp.clear(); beg = cur+1; } continue; } if(str[cur] == '"' && !quoteSingle) { temp += str.substr(beg, cur-beg); beg = cur+1; quoteDouble = !quoteDouble; continue; } if(str[cur] == '\'' && !quoteDouble) { temp += str.substr(beg, cur-beg); beg = cur+1; quoteSingle = !quoteSingle; continue; } if(str[cur] == '\\') { escape = true; continue; } } if(escape && ((!quoteSingle && !quoteDouble) || (quoteSingle && str[cur] == '\'') || (quoteDouble && (str[cur] == '"' || str[cur] == '\\')))) { temp += str.substr(beg, cur-beg-1); beg = cur; } escape = false; } temp += str.substr(beg, std::string::npos); ret.push_back(temp); return ret; } }; } } #endif /* MAD_COMMON_UTIL_H_ */