Add flag handling for ROM file in main application

This commit is contained in:
scawful
2025-01-21 22:13:00 -05:00
parent 1764ca0dde
commit 01db131adb
2 changed files with 22 additions and 9 deletions

View File

@@ -96,7 +96,6 @@ class FlagRegistry {
std::unordered_map<std::string, std::unique_ptr<IFlag>> flags_;
};
inline FlagRegistry* global_flag_registry() {
// Guaranteed to be initialized once per process.
static FlagRegistry* registry = new FlagRegistry();
@@ -106,9 +105,10 @@ inline FlagRegistry* global_flag_registry() {
#define DECLARE_FLAG(type, name) extern yaze::util::Flag<type>* FLAGS_##name
// Defines a global Flag<type>* FLAGS_<name> and registers it.
#define DEFINE_FLAG(type, name, default_val, help_text) \
yaze::util::Flag<type>* FLAGS_##name = \
yaze::util::global_flag_registry()->RegisterFlag<type>("--" #name, (default_val), (help_text))
#define DEFINE_FLAG(type, name, default_val, help_text) \
yaze::util::Flag<type>* FLAGS_##name = \
yaze::util::global_flag_registry()->RegisterFlag<type>( \
"--" #name, (default_val), (help_text))
// Retrieves the current value of a declared flag.
#define FLAG_VALUE(name) (FLAGS_##name->Get())
@@ -117,6 +117,15 @@ class FlagParser {
public:
explicit FlagParser(FlagRegistry* registry) : registry_(registry) {}
// Parses flags out of the given command line arguments.
void Parse(int argc, char** argv) {
std::vector<std::string> tokens;
for (int i = 0; i < argc; i++) {
tokens.push_back(argv[i]);
}
Parse(&tokens);
}
// Parses flags out of the given token list. Recognizes forms:
// --flag=value or --flag value
// Any token not recognized as a flag is left in `leftover`.