#ifndef UTIL_H #define UTIL_H #include #include #include #include #include #include #include template void split(const std::string &s, char delim, Out result, int limit) { int it = 0; std::istringstream iss(s); std::string item; while (std::getline(iss, item, delim) && it <= limit) { *result++ = item; if (limit > 0) it++; } } std::vector split(const std::string &s, char delim, int limit) { std::vector elems; split(s, delim, std::back_inserter(elems), limit); return elems; } static std::string toLower(std::string str) { std::transform(str.begin(), str.end(), str.begin(), [](unsigned char c){ return std::tolower(c); }); return str; } static std::string toUpper(std::string str) { std::transform(str.begin(), str.end(), str.begin(), [](unsigned char c){ return std::toupper(c); }); return str; } static char* trim(char *str) { char *end; while(isspace(*str)) str++; if(*str == 0) return str; end = str + strnlen(str, 128) - 1; while(end > str && isspace(*end)) end--; *(end+1) = '\0'; return str; } #endif