Program Listing for File UtilString.h
↰
Return to documentation for file
(
api\Cpp_API_Reference\UtilString.h
)
#pragma once
#include <sstream>
#include <string>
#include <regex>
class UtilString
{
public:
template<typename T>
static std::string ToString(const T& t)
{
//Do not use std::move which will kill performance for large amount of calls
return std::to_string(t);
}
template<typename T>
static T FromString(const std::string& str)
{
std::stringstream ss;
ss << str;
T output;
ss >> output;
return output;
}
static std::vector<std::string> split(const std::string& input, const std::string& separator)
{
std::vector<std::string> vec;
if (input.empty())
return vec;
std::regex re(separator);
std::sregex_token_iterator p(input.begin(), input.end(), re, -1);
std::sregex_token_iterator end;
while (p != end)
vec.emplace_back(*p++);
return vec;
}
template<typename T>
static std::vector<T> ListFromString(const std::string& str, const std::string& separator)
{
std::vector<T> list;
std::vector<std::string> strList = split(str, separator);
for (auto& item : strList)
{
T v = FromString<T>(item);
list.push_back(v);
}
return list;
}
static std::string ListToString(const std::vector<double>& listOfData, const std::string& separator)
{
std::string ret;
for (size_t i = 0; i < listOfData.size(); i++)
{
auto& item = listOfData[i];
std::string str = UtilString::ToString(item);
ret += str;
if (i < listOfData.size() - 1)
{
ret += separator;
}
}
return std::move(ret);
}
static std::string ListToString(const std::vector<long>& listOfData, const std::string& separator)
{
std::string ret;
for (size_t i = 0; i < listOfData.size(); i++)
{
auto& item = listOfData[i];
std::string str = UtilString::ToString(item);
ret += str;
if (i < listOfData.size() - 1)
{
ret += separator;
}
}
return std::move(ret);
}
};