yeet wstring overloads

This commit is contained in:
altalk23 2024-06-07 09:38:06 +03:00
parent d943897898
commit 38976cc42c
3 changed files with 2 additions and 207 deletions
loader
include/Geode/utils
src/utils

View file

@ -12,6 +12,7 @@
#include <matjson.hpp>
#include <charconv>
#include <clocale>
#include <type_traits>
// only windows seems to properly implement std::hash on std::filesystem::path
#ifdef GEODE_IS_ANDROID
@ -34,14 +35,6 @@ namespace geode {
return out;
}
template <class T>
struct TypeIdentity {
using type = T;
};
template <class T>
using TypeIdentityType = typename TypeIdentity<T>::type;
namespace utils {
// helper for std::visit
template<class... Ts> struct makeVisitor : Ts... { using Ts::operator()...; };
@ -74,7 +67,7 @@ namespace geode {
}
template <typename T>
constexpr const T& clamp(const T& value, const TypeIdentityType<T>& minValue, const TypeIdentityType<T>& maxValue) {
constexpr const T& clamp(const T& value, const std::type_identity_t<T>& minValue, const std::type_identity_t<T>& maxValue) {
return value < minValue ? minValue : maxValue < value ? maxValue : value;
}

View file

@ -20,76 +20,48 @@ namespace geode::utils::string {
GEODE_DLL std::wstring utf8ToWide(std::string const& str);
GEODE_DLL std::string& toLowerIP(std::string& str);
GEODE_DLL std::wstring& toLowerIP(std::wstring& str);
GEODE_DLL std::string toLower(std::string const& str);
GEODE_DLL std::wstring toLower(std::wstring const& str);
GEODE_DLL std::string& toUpperIP(std::string& str);
GEODE_DLL std::wstring& toUpperIP(std::wstring& str);
GEODE_DLL std::string toUpper(std::string const& str);
GEODE_DLL std::wstring toUpper(std::wstring const& str);
GEODE_DLL std::string& replaceIP(
std::string& str, std::string const& orig, std::string const& repl
);
GEODE_DLL std::wstring& replaceIP(
std::wstring& str, std::wstring const& orig, std::wstring const& repl
);
GEODE_DLL std::string replace(
std::string const& str, std::string const& orig, std::string const& repl
);
GEODE_DLL std::wstring replace(
std::wstring const& str, std::wstring const& orig, std::wstring const& repl
);
GEODE_DLL std::vector<std::string> split(std::string const& str, std::string const& split);
GEODE_DLL std::vector<std::wstring> split(std::wstring const& str, std::wstring const& split);
GEODE_DLL std::string join(std::vector<std::string> const& strs, std::string const& separator);
GEODE_DLL std::wstring join(std::vector<std::wstring> const& strs, std::wstring const& separator);
GEODE_DLL std::vector<char> split(std::string const& str);
GEODE_DLL std::vector<wchar_t> split(std::wstring const& str);
GEODE_DLL bool contains(std::string const& str, std::string const& subs);
GEODE_DLL bool contains(std::wstring const& str, std::wstring const& subs);
GEODE_DLL bool contains(std::string const& str, char c);
GEODE_DLL bool contains(std::wstring const& str, wchar_t c);
GEODE_DLL bool containsAny(std::string const& str, std::vector<std::string> const& subs);
GEODE_DLL bool containsAny(std::wstring const& str, std::vector<std::wstring> const& subs);
GEODE_DLL bool containsAll(std::string const& str, std::vector<std::string> const& subs);
GEODE_DLL bool containsAll(std::wstring const& str, std::vector<std::wstring> const& subs);
GEODE_DLL size_t count(std::string const& str, char c);
GEODE_DLL size_t count(std::wstring const& str, wchar_t c);
GEODE_DLL std::string& trimLeftIP(std::string& str);
GEODE_DLL std::wstring& trimLeftIP(std::wstring& str);
GEODE_DLL std::string& trimRightIP(std::string& str);
GEODE_DLL std::wstring& trimRightIP(std::wstring& str);
GEODE_DLL std::string& trimIP(std::string& str);
GEODE_DLL std::wstring& trimIP(std::wstring& str);
GEODE_DLL std::string trimLeft(std::string const& str);
GEODE_DLL std::wstring trimLeft(std::wstring const& str);
GEODE_DLL std::string trimRight(std::string const& str);
GEODE_DLL std::wstring trimRight(std::wstring const& str);
GEODE_DLL std::string trim(std::string const& str);
GEODE_DLL std::wstring trim(std::wstring const& str);
GEODE_DLL std::string& normalizeIP(std::string& str);
GEODE_DLL std::wstring& normalizeIP(std::wstring& str);
GEODE_DLL std::string normalize(std::string const& str);
GEODE_DLL std::wstring normalize(std::wstring const& str);
GEODE_DLL bool startsWith(std::string const& str, std::string const& prefix);
GEODE_DLL bool startsWith(std::wstring const& str, std::wstring const& prefix);
GEODE_DLL bool endsWith(std::string const& str, std::string const& suffix);
GEODE_DLL bool endsWith(std::wstring const& str, std::wstring const& suffix);
}

View file

@ -29,20 +29,11 @@ bool utils::string::startsWith(std::string const& str, std::string const& prefix
return str.rfind(prefix, 0) == 0;
}
bool utils::string::startsWith(std::wstring const& str, std::wstring const& prefix) {
return str.rfind(prefix, 0) == 0;
}
bool utils::string::endsWith(std::string const& str, std::string const& suffix) {
if (suffix.size() > str.size()) return false;
return std::equal(suffix.rbegin(), suffix.rend(), str.rbegin());
}
bool utils::string::endsWith(std::wstring const& str, std::wstring const& suffix) {
if (suffix.size() > str.size()) return false;
return std::equal(suffix.rbegin(), suffix.rend(), str.rbegin());
}
std::string& utils::string::toLowerIP(std::string& str) {
std::transform(str.begin(), str.end(), str.begin(), [](auto c) {
return std::tolower(c);
@ -50,23 +41,11 @@ std::string& utils::string::toLowerIP(std::string& str) {
return str;
}
std::wstring& utils::string::toLowerIP(std::wstring& str) {
std::transform(str.begin(), str.end(), str.begin(), [](auto c) {
return std::towlower(c);
});
return str;
}
std::string utils::string::toLower(std::string const& str) {
std::string ret = str;
return utils::string::toLowerIP(ret);
}
std::wstring utils::string::toLower(std::wstring const& str) {
std::wstring ret = str;
return utils::string::toLowerIP(ret);
}
std::string& utils::string::toUpperIP(std::string& str) {
std::transform(str.begin(), str.end(), str.begin(), [](auto c) {
return std::toupper(c);
@ -74,23 +53,11 @@ std::string& utils::string::toUpperIP(std::string& str) {
return str;
}
std::wstring& utils::string::toUpperIP(std::wstring& str) {
std::transform(str.begin(), str.end(), str.begin(), [](auto c) {
return std::towupper(c);
});
return str;
}
std::string utils::string::toUpper(std::string const& str) {
std::string ret = str;
return utils::string::toUpperIP(ret);
}
std::wstring utils::string::toUpper(std::wstring const& str) {
std::wstring ret = str;
return utils::string::toUpperIP(ret);
}
std::string& utils::string::replaceIP(std::string& str, std::string const& orig, std::string const& repl) {
std::string::size_type n = 0;
while ((n = str.find(orig, n)) != std::string::npos) {
@ -100,17 +67,6 @@ std::string& utils::string::replaceIP(std::string& str, std::string const& orig,
return str;
}
std::wstring& utils::string::replaceIP(
std::wstring& str, std::wstring const& orig, std::wstring const& repl
) {
std::wstring::size_type n = 0;
while ((n = str.find(orig, n)) != std::wstring::npos) {
str.replace(n, orig.size(), repl);
n += repl.size();
}
return str;
}
std::string utils::string::replace(
std::string const& str, std::string const& orig, std::string const& repl
) {
@ -118,13 +74,6 @@ std::string utils::string::replace(
return utils::string::replaceIP(ret, orig, repl);
}
std::wstring utils::string::replace(
std::wstring const& str, std::wstring const& orig, std::wstring const& repl
) {
auto ret = str;
return utils::string::replaceIP(ret, orig, repl);
}
std::vector<std::string> utils::string::split(std::string const& str, std::string const& split) {
std::vector<std::string> res;
if (str.empty()) return res;
@ -138,19 +87,6 @@ std::vector<std::string> utils::string::split(std::string const& str, std::strin
return res;
}
std::vector<std::wstring> utils::string::split(std::wstring const& str, std::wstring const& split) {
std::vector<std::wstring> res;
if (str.empty()) return res;
auto s = str;
size_t pos;
while ((pos = s.find(split)) != std::wstring::npos) {
res.push_back(s.substr(0, pos));
s.erase(0, pos + split.length());
}
res.push_back(s);
return res;
}
std::string utils::string::join(std::vector<std::string> const& strs, std::string const& separator) {
std::string res;
if (strs.empty())
@ -168,23 +104,6 @@ std::string utils::string::join(std::vector<std::string> const& strs, std::strin
return res;
}
std::wstring utils::string::join(std::vector<std::wstring> const& strs, std::wstring const& separator) {
std::wstring res;
if (strs.empty())
return res;
if (strs.size() == 1)
return strs[0];
// idk if less allocations but an extra loop is faster but
size_t size = 0;
for (auto const& str : strs)
size += str.size() + separator.size();
res.reserve(size);
for (auto const& str : strs)
res += str + separator;
res.erase(res.size() - separator.size());
return res;
}
std::vector<char> utils::string::split(std::string const& str) {
std::vector<char> res;
for (auto const& s : str) {
@ -193,30 +112,14 @@ std::vector<char> utils::string::split(std::string const& str) {
return res;
}
std::vector<wchar_t> utils::string::split(std::wstring const& str) {
std::vector<wchar_t> res;
for (auto const& s : str) {
res.push_back(s);
}
return res;
}
bool utils::string::contains(std::string const& str, std::string const& subs) {
return str.find(subs) != std::string::npos;
}
bool utils::string::contains(std::wstring const& str, std::wstring const& subs) {
return str.find(subs) != std::wstring::npos;
}
bool utils::string::contains(std::string const& str, std::string::value_type c) {
return str.find(c) != std::string::npos;
}
bool utils::string::contains(std::wstring const& str, std::wstring::value_type c) {
return str.find(c) != std::wstring::npos;
}
bool utils::string::containsAny(std::string const& str, std::vector<std::string> const& subs) {
for (auto const& sub : subs) {
if (utils::string::contains(str, sub)) return true;
@ -224,13 +127,6 @@ bool utils::string::containsAny(std::string const& str, std::vector<std::string>
return false;
}
bool utils::string::containsAny(std::wstring const& str, std::vector<std::wstring> const& subs) {
for (auto const& sub : subs) {
if (utils::string::contains(str, sub)) return true;
}
return false;
}
bool utils::string::containsAll(std::string const& str, std::vector<std::string> const& subs) {
bool found = true;
for (auto const& sub : subs) {
@ -239,14 +135,6 @@ bool utils::string::containsAll(std::string const& str, std::vector<std::string>
return found;
}
bool utils::string::containsAll(std::wstring const& str, std::vector<std::wstring> const& subs) {
bool found = true;
for (auto const& sub : subs) {
if (!utils::string::contains(str, sub)) found = false;
}
return found;
}
size_t utils::string::count(std::string const& str, char countC) {
size_t res = 0;
for (auto c : str)
@ -254,13 +142,6 @@ size_t utils::string::count(std::string const& str, char countC) {
return res;
}
size_t utils::string::count(std::wstring const& str, wchar_t countC) {
size_t res = 0;
for (auto c : str)
if (c == countC) res++;
return res;
}
std::string& utils::string::trimLeftIP(std::string& str) {
str.erase(str.begin(), std::find_if(str.begin(), str.end(), [](auto ch) {
return !std::isspace(ch);
@ -268,13 +149,6 @@ std::string& utils::string::trimLeftIP(std::string& str) {
return str;
}
std::wstring& utils::string::trimLeftIP(std::wstring& str) {
str.erase(str.begin(), std::find_if(str.begin(), str.end(), [](auto ch) {
return !std::isspace(ch);
}));
return str;
}
std::string& utils::string::trimRightIP(std::string& str) {
str.erase(
std::find_if(
@ -289,76 +163,32 @@ std::string& utils::string::trimRightIP(std::string& str) {
return str;
}
std::wstring& utils::string::trimRightIP(std::wstring& str) {
str.erase(
std::find_if(
str.rbegin(),
str.rend(),
[](auto ch) {
return !std::isspace(ch);
}
).base(),
str.end()
);
return str;
}
std::string& utils::string::trimIP(std::string& str) {
return utils::string::trimLeftIP(utils::string::trimRightIP(str));
}
std::wstring& utils::string::trimIP(std::wstring& str) {
return utils::string::trimLeftIP(utils::string::trimRightIP(str));
}
std::string utils::string::trimLeft(std::string const& str) {
auto s2 = str;
return utils::string::trimLeftIP(s2);
}
std::wstring utils::string::trimLeft(std::wstring const& str) {
auto s2 = str;
return utils::string::trimLeftIP(s2);
}
std::string utils::string::trimRight(std::string const& str) {
auto ret = str;
return utils::string::trimRightIP(ret);
}
std::wstring utils::string::trimRight(std::wstring const& str) {
auto ret = str;
return utils::string::trimRightIP(ret);
}
std::string utils::string::trim(std::string const& str) {
auto ret = str;
return utils::string::trimIP(ret);
}
std::wstring utils::string::trim(std::wstring const& str) {
auto ret = str;
return utils::string::trimIP(ret);
}
std::string& utils::string::normalizeIP(std::string& str) {
while (utils::string::contains(str, " "))
utils::string::replaceIP(str, " ", " ");
return str;
}
std::wstring& utils::string::normalizeIP(std::wstring& str) {
while (utils::string::contains(str, L" "))
utils::string::replaceIP(str, L" ", L" ");
return str;
}
std::string utils::string::normalize(std::string const& str) {
auto ret = str;
return utils::string::normalizeIP(ret);
}
std::wstring utils::string::normalize(std::wstring const& str) {
auto ret = str;
return utils::string::normalizeIP(ret);
}