Refactor flag handling: move FlagParser implementation to flag.cc, remove ResourceManager, and update includes
This commit is contained in:
@@ -17,6 +17,7 @@ set(
|
|||||||
set(
|
set(
|
||||||
YAZE_UTIL_SRC
|
YAZE_UTIL_SRC
|
||||||
util/bps.cc
|
util/bps.cc
|
||||||
|
util/flag.cc
|
||||||
util/hex.cc
|
util/hex.cc
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -133,8 +134,7 @@ if (YAZE_BUILD_LIB)
|
|||||||
FILES
|
FILES
|
||||||
incl/yaze.h
|
incl/yaze.h
|
||||||
incl/zelda.h
|
incl/zelda.h
|
||||||
incl/snes_tile.h
|
incl/snes.h
|
||||||
incl/snes_color.h
|
|
||||||
incl/overworld.h
|
incl/overworld.h
|
||||||
incl/dungeon.h
|
incl/dungeon.h
|
||||||
DESTINATION
|
DESTINATION
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
#include "app/editor/system/constant_manager.h"
|
#include "app/editor/system/constant_manager.h"
|
||||||
#include "app/editor/system/extension_manager.h"
|
#include "app/editor/system/extension_manager.h"
|
||||||
#include "app/editor/system/history_manager.h"
|
#include "app/editor/system/history_manager.h"
|
||||||
#include "app/editor/system/resource_manager.h"
|
|
||||||
|
|
||||||
namespace yaze {
|
namespace yaze {
|
||||||
|
|
||||||
@@ -23,7 +22,6 @@ struct EditorContext {
|
|||||||
CommandManager command_manager;
|
CommandManager command_manager;
|
||||||
ExtensionManager extension_manager;
|
ExtensionManager extension_manager;
|
||||||
HistoryManager history_manager;
|
HistoryManager history_manager;
|
||||||
ResourceManager resource_manager;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class EditorType {
|
enum class EditorType {
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
#ifndef YAZE_APP_EDITOR_SYSTEM_RESOURCE_MANAGER_H
|
|
||||||
#define YAZE_APP_EDITOR_SYSTEM_RESOURCE_MANAGER_H
|
|
||||||
|
|
||||||
#include <cstddef>
|
|
||||||
|
|
||||||
namespace yaze {
|
|
||||||
namespace editor {
|
|
||||||
|
|
||||||
// System resource manager.
|
|
||||||
class ResourceManager {
|
|
||||||
public:
|
|
||||||
ResourceManager() : count_(0) {}
|
|
||||||
~ResourceManager() = default;
|
|
||||||
|
|
||||||
void Load(const char* path);
|
|
||||||
void Unload(const char* path);
|
|
||||||
void UnloadAll();
|
|
||||||
|
|
||||||
size_t Count() const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
size_t count_;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace editor
|
|
||||||
} // namespace yaze
|
|
||||||
|
|
||||||
#endif // YAZE_APP_EDITOR_SYSTEM_RESOURCE_MANAGER_H
|
|
||||||
50
src/util/flag.cc
Normal file
50
src/util/flag.cc
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
#include "flag.h"
|
||||||
|
|
||||||
|
namespace yaze {
|
||||||
|
namespace util {
|
||||||
|
|
||||||
|
void FlagParser::Parse(std::vector<std::string>* tokens) {
|
||||||
|
std::vector<std::string> leftover;
|
||||||
|
leftover.reserve(tokens->size());
|
||||||
|
|
||||||
|
for (size_t i = 0; i < tokens->size(); i++) {
|
||||||
|
const std::string& token = (*tokens)[i];
|
||||||
|
if (token.rfind("--", 0) == 0) {
|
||||||
|
// Found a token that starts with "--".
|
||||||
|
std::string flag_name;
|
||||||
|
std::string value_string;
|
||||||
|
if (!ExtractFlagAndValue(token, &flag_name, &value_string)) {
|
||||||
|
// If no value found after '=', see if next token is a value.
|
||||||
|
if ((i + 1) < tokens->size()) {
|
||||||
|
const std::string& next_token = (*tokens)[i + 1];
|
||||||
|
// If next token is NOT another flag, treat it as the value.
|
||||||
|
if (next_token.rfind("--", 0) != 0) {
|
||||||
|
value_string = next_token;
|
||||||
|
i++;
|
||||||
|
} else {
|
||||||
|
// If no explicit value, treat it as boolean 'true'.
|
||||||
|
value_string = "true";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
value_string = "true";
|
||||||
|
}
|
||||||
|
flag_name = token;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attempt to parse the flag (strip leading dashes in the registry).
|
||||||
|
IFlag* flag_ptr = registry_->GetFlag(flag_name);
|
||||||
|
if (!flag_ptr) {
|
||||||
|
throw std::runtime_error("Unrecognized flag: " + flag_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the parsed value on the matching flag.
|
||||||
|
flag_ptr->ParseValue(value_string);
|
||||||
|
} else {
|
||||||
|
leftover.push_back(token);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*tokens = leftover;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace util
|
||||||
|
} // namespace yaze
|
||||||
@@ -129,48 +129,7 @@ class FlagParser {
|
|||||||
// Parses flags out of the given token list. Recognizes forms:
|
// Parses flags out of the given token list. Recognizes forms:
|
||||||
// --flag=value or --flag value
|
// --flag=value or --flag value
|
||||||
// Any token not recognized as a flag is left in `leftover`.
|
// Any token not recognized as a flag is left in `leftover`.
|
||||||
void Parse(std::vector<std::string>* tokens) {
|
void Parse(std::vector<std::string>* tokens);
|
||||||
std::vector<std::string> leftover;
|
|
||||||
leftover.reserve(tokens->size());
|
|
||||||
|
|
||||||
for (size_t i = 0; i < tokens->size(); i++) {
|
|
||||||
const std::string& token = (*tokens)[i];
|
|
||||||
if (token.rfind("--", 0) == 0) {
|
|
||||||
// Found a token that starts with "--".
|
|
||||||
std::string flag_name;
|
|
||||||
std::string value_string;
|
|
||||||
if (!ExtractFlagAndValue(token, &flag_name, &value_string)) {
|
|
||||||
// If no value found after '=', see if next token is a value.
|
|
||||||
if ((i + 1) < tokens->size()) {
|
|
||||||
const std::string& next_token = (*tokens)[i + 1];
|
|
||||||
// If next token is NOT another flag, treat it as the value.
|
|
||||||
if (next_token.rfind("--", 0) != 0) {
|
|
||||||
value_string = next_token;
|
|
||||||
i++;
|
|
||||||
} else {
|
|
||||||
// If no explicit value, treat it as boolean 'true'.
|
|
||||||
value_string = "true";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
value_string = "true";
|
|
||||||
}
|
|
||||||
flag_name = token;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Attempt to parse the flag (strip leading dashes in the registry).
|
|
||||||
IFlag* flag_ptr = registry_->GetFlag(flag_name);
|
|
||||||
if (!flag_ptr) {
|
|
||||||
throw std::runtime_error("Unrecognized flag: " + flag_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the parsed value on the matching flag.
|
|
||||||
flag_ptr->ParseValue(value_string);
|
|
||||||
} else {
|
|
||||||
leftover.push_back(token);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*tokens = leftover;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FlagRegistry* registry_;
|
FlagRegistry* registry_;
|
||||||
|
|||||||
Reference in New Issue
Block a user