1#include <CS2Kit/Utils/SteamId.hpp>
2#include <CS2Kit/Utils/StringUtils.hpp>
10std::string StringUtils::ToLower(
const std::string& str)
12 std::string result = str;
13 std::transform(result.begin(), result.end(), result.begin(), [](
unsigned char c) { return std::tolower(c); });
17std::string StringUtils::ToUpper(
const std::string& str)
19 std::string result = str;
20 std::transform(result.begin(), result.end(), result.begin(), [](
unsigned char c) { return std::toupper(c); });
24std::string StringUtils::TrimLeft(
const std::string& str)
26 auto it = std::find_if(str.begin(), str.end(), [](
unsigned char c) { return !std::isspace(c); });
27 return std::string(it, str.end());
30std::string StringUtils::TrimRight(
const std::string& str)
32 auto it = std::find_if(str.rbegin(), str.rend(), [](
unsigned char c) { return !std::isspace(c); });
33 return std::string(str.begin(), it.base());
36std::string StringUtils::Trim(
const std::string& str)
38 return TrimLeft(TrimRight(str));
41std::vector<std::string> StringUtils::Split(
const std::string& str,
char delimiter)
43 std::vector<std::string> result;
44 std::stringstream ss(str);
46 while (std::getline(ss, item, delimiter))
47 result.push_back(item);
51std::string StringUtils::Join(
const std::vector<std::string>& parts,
const std::string& delimiter)
56 std::string result = parts[0];
57 for (
size_t i = 1; i < parts.size(); ++i)
58 result += delimiter + parts[i];
62bool StringUtils::StartsWith(
const std::string& str,
const std::string& prefix)
64 return str.length() >= prefix.length() && str.substr(0, prefix.length()) == prefix;
67bool StringUtils::EndsWith(
const std::string& str,
const std::string& suffix)
69 return str.length() >= suffix.length() && str.substr(str.length() - suffix.length()) == suffix;
72bool StringUtils::ContainsIgnoreCase(
const std::string& str,
const std::string& substr)
74 return ToLower(str).find(ToLower(substr)) != std::string::npos;
77std::string StringUtils::ReplaceAll(
const std::string& str,
const std::string& from,
const std::string& to)
82 std::string result = str;
84 while ((pos = result.find(from, pos)) != std::string::npos)
86 result.replace(pos, from.length(), to);
92bool StringUtils::IsNumeric(
const std::string& str)
96 return std::all_of(str.begin(), str.end(), [](
unsigned char c) { return std::isdigit(c); });
99StringUtils::TargetInfo StringUtils::ParseTarget(
const std::string& target)
102 return {TargetType::Name,
""};
104 if (target ==
"@all" || target ==
"@*")
105 return {TargetType::All, target};
108 return {TargetType::Me, target};
110 if (target[0] ==
'#' && target.length() > 1)
112 auto indexStr = target.substr(1);
113 if (IsNumeric(indexStr))
114 return {TargetType::Index, indexStr};
117 if (IsNumeric(target) && target.length() >= 15)
121 int64_t steamId64 = std::stoll(target);
122 if (SteamId::IsValid(steamId64))
123 return {TargetType::SteamId, target};
129 if (StartsWith(target,
"[U:1:"))
131 auto steamId64 = SteamId::FromSteamId3(target);
132 if (steamId64.has_value())
133 return {TargetType::SteamId, std::to_string(*steamId64)};
136 if (StartsWith(target,
"STEAM_"))
138 auto steamId64 = SteamId::FromSteamId(target);
139 if (steamId64.has_value())
140 return {TargetType::SteamId, std::to_string(*steamId64)};
143 return {TargetType::Name, target};