iw5-mod/src/utils/flags.cpp

51 lines
896 B
C++
Raw Normal View History

2019-09-24 11:46:47 +02:00
#include <std_include.hpp>
#include "flags.hpp"
#include "string.hpp"
2019-09-27 22:35:57 +02:00
namespace utils::flags
2019-09-24 11:46:47 +02:00
{
2019-09-27 22:35:57 +02:00
void parse_flags(std::vector<std::string>& flags)
2019-09-24 11:46:47 +02:00
{
2019-09-27 22:35:57 +02:00
int num_args;
const auto argv = CommandLineToArgvW(GetCommandLineW(), &num_args);
2019-09-24 11:46:47 +02:00
2019-09-27 22:35:57 +02:00
flags.clear();
2019-09-24 11:46:47 +02:00
2019-09-27 22:35:57 +02:00
if (argv)
{
for (auto i = 0; i < num_args; ++i)
2019-09-24 11:46:47 +02:00
{
2019-09-27 22:35:57 +02:00
std::wstring wide_flag(argv[i]);
if (wide_flag[0] == L'-')
2019-09-24 11:46:47 +02:00
{
2019-09-27 22:35:57 +02:00
flags.emplace_back(wide_flag.begin() + 1, wide_flag.end());
2019-09-24 11:46:47 +02:00
}
}
2019-09-27 22:35:57 +02:00
LocalFree(argv);
2019-09-24 11:46:47 +02:00
}
2019-09-27 22:35:57 +02:00
}
2019-09-24 11:46:47 +02:00
2019-09-27 22:35:57 +02:00
bool has_flag(const std::string& flag)
{
static auto parsed = false;
static std::vector<std::string> enabled_flags;
2019-09-24 11:46:47 +02:00
2019-09-27 22:35:57 +02:00
if (!parsed)
{
parse_flags(enabled_flags);
2022-03-10 12:32:22 +00:00
parsed = true;
2019-09-27 22:35:57 +02:00
}
2019-09-24 11:46:47 +02:00
2019-09-27 22:35:57 +02:00
for (const auto& entry : enabled_flags)
{
if (string::to_lower(entry) == string::to_lower(flag))
2019-09-24 11:46:47 +02:00
{
2019-09-27 22:35:57 +02:00
return true;
2019-09-24 11:46:47 +02:00
}
}
2019-09-27 22:35:57 +02:00
return false;
2019-09-24 11:46:47 +02:00
}
}