#include <std_include.hpp> #include "string.hpp" namespace utils::string { const char* va(const char* fmt, ...) { static thread_local va_provider<8, 256> provider; va_list ap; va_start(ap, fmt); const char* result = provider.get(fmt, ap); va_end(ap); return result; } std::string to_lower(std::string text) { std::transform(text.begin(), text.end(), text.begin(), [](const unsigned char input) { return static_cast<char>(std::tolower(input)); }); return text; } std::string to_upper(std::string text) { std::transform(text.begin(), text.end(), text.begin(), [](const unsigned char input) { return static_cast<char>(std::toupper(input)); }); return text; } bool match_compare(const std::string& input, const std::string& text, const bool exact) { if (exact && text == input) return true; if (!exact && text.find(input) != std::string::npos) return true; return false; } std::wstring convert(const std::string& str) { std::wstring result; result.reserve(str.size()); for (const auto& chr : str) { result.push_back(static_cast<wchar_t>(chr)); } return result; } std::string dump_hex(const std::string& data, const std::string& separator) { std::string result; for (unsigned int i = 0; i < data.size(); ++i) { if (i > 0) { result.append(separator); } result.append(va("%02X", data[i] & 0xFF)); } return result; } }