2016-07-11 11:14:58 -04:00
|
|
|
#include "STDInclude.hpp"
|
2016-08-28 16:46:23 -04:00
|
|
|
#include "base128.h"
|
2016-07-11 11:14:58 -04:00
|
|
|
|
|
|
|
namespace Utils
|
|
|
|
{
|
|
|
|
namespace String
|
|
|
|
{
|
2016-07-22 06:12:11 -04:00
|
|
|
std::string ToLower(std::string input)
|
2016-07-11 11:14:58 -04:00
|
|
|
{
|
|
|
|
std::transform(input.begin(), input.end(), input.begin(), ::tolower);
|
|
|
|
return input;
|
|
|
|
}
|
|
|
|
|
2016-07-22 06:12:11 -04:00
|
|
|
std::string ToUpper(std::string input)
|
2016-07-11 11:14:58 -04:00
|
|
|
{
|
|
|
|
std::transform(input.begin(), input.end(), input.begin(), ::toupper);
|
|
|
|
return input;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool EndsWith(std::string haystack, std::string needle)
|
|
|
|
{
|
|
|
|
return (strstr(haystack.data(), needle.data()) == (haystack.data() + haystack.size() - needle.size()));
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string DumpHex(std::string data, std::string separator)
|
|
|
|
{
|
|
|
|
std::string result;
|
|
|
|
|
|
|
|
for (unsigned int i = 0; i < data.size(); ++i)
|
|
|
|
{
|
|
|
|
if (i > 0)
|
|
|
|
{
|
|
|
|
result.append(separator);
|
|
|
|
}
|
|
|
|
|
|
|
|
result.append(fmt::sprintf("%02X", data[i] & 0xFF));
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2016-07-22 06:12:11 -04:00
|
|
|
std::string XOR(std::string str, char value)
|
2016-07-11 11:14:58 -04:00
|
|
|
{
|
|
|
|
for (unsigned int i = 0; i < str.size(); ++i)
|
|
|
|
{
|
|
|
|
str[i] ^= value;
|
|
|
|
}
|
|
|
|
|
|
|
|
return str;
|
|
|
|
}
|
|
|
|
|
|
|
|
std::vector<std::string> Explode(const std::string& str, char delim)
|
|
|
|
{
|
|
|
|
std::vector<std::string> result;
|
|
|
|
std::istringstream iss(str);
|
|
|
|
|
|
|
|
for (std::string token; std::getline(iss, token, delim);)
|
|
|
|
{
|
|
|
|
std::string _entry = std::move(token);
|
|
|
|
|
|
|
|
// Remove trailing 0x0 bytes
|
2016-08-14 10:05:57 -04:00
|
|
|
while (_entry.size() && !_entry.back())
|
2016-07-11 11:14:58 -04:00
|
|
|
{
|
|
|
|
_entry = _entry.substr(0, _entry.size() - 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
result.push_back(_entry);
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Replace(std::string &string, std::string find, std::string replace)
|
|
|
|
{
|
|
|
|
size_t nPos = 0;
|
|
|
|
|
|
|
|
while ((nPos = string.find(find, nPos)) != std::string::npos)
|
|
|
|
{
|
|
|
|
string = string.replace(nPos, find.length(), replace);
|
|
|
|
nPos += replace.length();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool StartsWith(std::string haystack, std::string needle)
|
|
|
|
{
|
|
|
|
return (haystack.size() >= needle.size() && !strncmp(needle.data(), haystack.data(), needle.size()));
|
|
|
|
}
|
|
|
|
|
|
|
|
// trim from start
|
|
|
|
std::string <rim(std::string &s)
|
|
|
|
{
|
|
|
|
s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun<int, int>(std::isspace))));
|
|
|
|
return s;
|
|
|
|
}
|
|
|
|
|
|
|
|
// trim from end
|
|
|
|
std::string &RTrim(std::string &s)
|
|
|
|
{
|
|
|
|
s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::ptr_fun<int, int>(std::isspace))).base(), s.end());
|
|
|
|
return s;
|
|
|
|
}
|
|
|
|
|
|
|
|
// trim from both ends
|
|
|
|
std::string &Trim(std::string &s)
|
|
|
|
{
|
|
|
|
return LTrim(RTrim(s));
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string FormatTimeSpan(int milliseconds)
|
|
|
|
{
|
|
|
|
int secondsTotal = milliseconds / 1000;
|
|
|
|
int seconds = secondsTotal % 60;
|
|
|
|
int minutesTotal = secondsTotal / 60;
|
|
|
|
int minutes = minutesTotal % 60;
|
|
|
|
int hoursTotal = minutesTotal / 60;
|
|
|
|
|
|
|
|
return fmt::sprintf("%02d:%02d:%02d", hoursTotal, minutes, seconds);
|
|
|
|
}
|
2016-08-27 12:18:03 -04:00
|
|
|
|
|
|
|
// Encodes a given string in Base64
|
2016-08-27 17:46:24 -04:00
|
|
|
std::string EncodeBase64(const char* input, const unsigned long inputSize) {
|
2016-08-27 12:18:03 -04:00
|
|
|
unsigned long outlen = long(inputSize + (inputSize / 3.0) + 16);
|
|
|
|
unsigned char* outbuf = new unsigned char[outlen]; //Reserve output memory
|
|
|
|
base64_encode((unsigned char*)input, inputSize, outbuf, &outlen);
|
|
|
|
std::string ret((char*)outbuf, outlen);
|
|
|
|
delete[] outbuf;
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Encodes a given string in Base64
|
2016-08-27 17:46:24 -04:00
|
|
|
std::string EncodeBase64(const std::string& input) {
|
|
|
|
return EncodeBase64(input.c_str(), input.size());
|
|
|
|
}
|
|
|
|
|
2016-08-28 16:46:23 -04:00
|
|
|
// Encodes a given string in Base128
|
|
|
|
std::string EncodeBase128(const std::string& input) {
|
|
|
|
auto encoder = new base128();
|
|
|
|
auto buffer = encoder->encode(const_cast<void*>(static_cast<const void*>(input.data())), input.size());
|
|
|
|
delete encoder;
|
|
|
|
return std::string(buffer);
|
|
|
|
}
|
|
|
|
|
2016-08-28 13:38:16 -04:00
|
|
|
// Generates a UUID and returns the string representation of it
|
|
|
|
std::string GenerateUUIDString() {
|
|
|
|
// Generate UUID data
|
|
|
|
UUID uuid;
|
|
|
|
UuidCreate(&uuid);
|
|
|
|
|
|
|
|
// Convert to string representation
|
|
|
|
char* strdata = NULL;
|
|
|
|
UuidToStringA(&uuid, (RPC_CSTR*)&strdata);
|
|
|
|
return std::string(strdata);
|
2016-08-27 12:18:03 -04:00
|
|
|
}
|
2016-07-11 11:14:58 -04:00
|
|
|
}
|
|
|
|
}
|