Refactor utils

This commit is contained in:
FutureRave 2022-02-27 16:42:53 +00:00
parent f4ba792dc3
commit 204a752a96
No known key found for this signature in database
GPG Key ID: E883E2BC9657D955
4 changed files with 61 additions and 32 deletions

View File

@ -6,9 +6,15 @@ namespace Components
bool Flags::HasFlag(const std::string& flag)
{
Flags::ParseFlags();
static auto parsed = false;
for (auto entry : Flags::EnabledFlags)
if (!parsed)
{
Flags::ParseFlags();
parsed = true;
}
for (const auto& entry : Flags::EnabledFlags)
{
if (Utils::String::ToLower(entry) == Utils::String::ToLower(flag))
{
@ -21,21 +27,20 @@ namespace Components
void Flags::ParseFlags()
{
static bool flagsParsed = false;
if (flagsParsed) return;
flagsParsed = true;
int numArgs;
LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &numArgs);
auto* const argv = CommandLineToArgvW(GetCommandLineW(), &numArgs);
assert(Flags::EnabledFlags.empty());
if (argv)
{
for (int i = 0; i < numArgs; ++i)
for (auto i = 0; i < numArgs; ++i)
{
std::wstring wFlag(argv[i]);
if (wFlag[0] == L'-')
{
Flags::EnabledFlags.push_back(std::string(++wFlag.begin(), wFlag.end()));
wFlag.erase(wFlag.begin());
Flags::EnabledFlags.push_back(Utils::String::Convert(wFlag));
}
}
@ -51,11 +56,5 @@ namespace Components
Flags::Flags()
{
Flags::ParseFlags();
}
Flags::~Flags()
{
Flags::EnabledFlags.clear();
}
}

View File

@ -6,7 +6,6 @@ namespace Components
{
public:
Flags();
~Flags();
static bool HasFlag(const std::string& flag);

View File

@ -103,30 +103,58 @@ namespace Utils
return _isspace_l(c, nullptr);
}
// trim from start
std::string &LTrim(std::string &s)
// Trim from start
std::string& LTrim(std::string& str)
{
s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](int val)
str.erase(str.begin(), std::find_if(str.begin(), str.end(), [](int val)
{
return !IsSpace(val);
}));
return s;
return str;
}
// trim from end
std::string &RTrim(std::string &s)
// Trim from end
std::string& RTrim(std::string& str)
{
s.erase(std::find_if(s.rbegin(), s.rend(), [](int val)
str.erase(std::find_if(str.rbegin(), str.rend(), [](int val)
{
return !IsSpace(val);
}).base(), s.end());
return s;
}).base(), str.end());
return str;
}
// trim from both ends
std::string &Trim(std::string &s)
// Trim from both ends
std::string& Trim(std::string& str)
{
return LTrim(RTrim(s));
return LTrim(RTrim(str));
}
std::string Convert(const std::wstring& wstr)
{
std::string result;
result.reserve(wstr.size());
for (const auto& chr : wstr)
{
result.push_back(static_cast<char>(chr));
}
return result;
}
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 FormatTimeSpan(int milliseconds)

View File

@ -79,11 +79,14 @@ namespace Utils
std::string ToUpper(std::string input);
bool EndsWith(const std::string& haystack, const std::string& needle);
std::vector<std::string> Split(const std::string& str, const char delim);
void Replace(std::string &string, const std::string& find, const std::string& replace);
void Replace(std::string& string, const std::string& find, const std::string& replace);
bool StartsWith(const std::string& haystack, const std::string& needle);
std::string &LTrim(std::string &s);
std::string &RTrim(std::string &s);
std::string &Trim(std::string &s);
std::string& LTrim(std::string& str);
std::string& RTrim(std::string& str);
std::string& Trim(std::string& str);
std::string Convert(const std::wstring& wstr);
std::wstring Convert(const std::string& str);
std::string FormatTimeSpan(int milliseconds);
std::string FormatBandwidth(size_t bytes, int milliseconds);