diff options
author | Johannes Schickel | 2008-05-20 16:37:32 +0000 |
---|---|---|
committer | Johannes Schickel | 2008-05-20 16:37:32 +0000 |
commit | cc08a4953d3cf1af0146b29c63f8f72803f1ca48 (patch) | |
tree | 2a499e12ff355e88c0cb5877224643199bd0ceb0 | |
parent | 5204d012f6b059532f68e9c7330616989f95a380 (diff) | |
download | scummvm-rg350-cc08a4953d3cf1af0146b29c63f8f72803f1ca48.tar.gz scummvm-rg350-cc08a4953d3cf1af0146b29c63f8f72803f1ca48.tar.bz2 scummvm-rg350-cc08a4953d3cf1af0146b29c63f8f72803f1ca48.zip |
Cleaned up engine debug level code.
svn-id: r32195
-rw-r--r-- | common/util.cpp | 92 | ||||
-rw-r--r-- | common/util.h | 6 | ||||
-rw-r--r-- | engines/scumm/debugger.cpp | 28 | ||||
-rw-r--r-- | gui/debugger.cpp | 6 |
4 files changed, 77 insertions, 55 deletions
diff --git a/common/util.cpp b/common/util.cpp index 700ea97701..6f0fdcb233 100644 --- a/common/util.cpp +++ b/common/util.cpp @@ -394,18 +394,40 @@ const char *getRenderModeDescription(RenderMode id) { #pragma mark - -static Array<EngineDebugLevel> gDebugLevels; -static uint32 gDebugLevelsEnabled = 0; +namespace { + +DebugLevelContainer gDebugLevels; +uint32 gDebugLevelsEnabled = 0; + +struct DebugLevelSort { + bool operator()(const EngineDebugLevel &l, const EngineDebugLevel &r) { + return (l.option.compareToIgnoreCase(r.option) < 0); + } +}; + +struct DebugLevelSearch { + const String &_option; + + DebugLevelSearch(const String &option) : _option(option) {} + + bool operator()(const EngineDebugLevel &l) { + return _option.equalsIgnoreCase(l.option); + } +}; + +} bool addSpecialDebugLevel(uint32 level, const String &option, const String &description) { - for (uint i = 0; i < gDebugLevels.size(); ++i) { - if (!scumm_stricmp(option.c_str(), gDebugLevels[i].option.c_str())) { - warning("Declared engine debug level '%s' again", option.c_str()); - gDebugLevels[i] = EngineDebugLevel(level, option, description); - return true; - } + DebugLevelContainer::iterator i = find_if(gDebugLevels.begin(), gDebugLevels.end(), DebugLevelSearch(option)); + + if (i != gDebugLevels.end()) { + warning("Declared engine debug level '%s' again", option.c_str()); + *i = EngineDebugLevel(level, option, description); + } else { + gDebugLevels.push_back(EngineDebugLevel(level, option, description)); + sort(gDebugLevels.begin(), gDebugLevels.end(), DebugLevelSort()); } - gDebugLevels.push_back(EngineDebugLevel(level, option, description)); + return true; } @@ -415,43 +437,43 @@ void clearAllSpecialDebugLevels() { } bool enableSpecialDebugLevel(const String &option) { - for (uint i = 0; i < gDebugLevels.size(); ++i) { - if (!scumm_stricmp(option.c_str(), gDebugLevels[i].option.c_str())) { - gDebugLevelsEnabled |= gDebugLevels[i].level; - gDebugLevels[i].enabled = true; - return true; - } + DebugLevelContainer::iterator i = find_if(gDebugLevels.begin(), gDebugLevels.end(), DebugLevelSearch(option)); + + if (i != gDebugLevels.end()) { + gDebugLevelsEnabled |= i->level; + i->enabled = true; + + return true; + } else { + return false; } - return false; } void enableSpecialDebugLevelList(const String &option) { - uint start = 0; - uint end = 0; - - const char *str = option.c_str(); - for (end = start + 1; end <= option.size(); ++end) { - if (str[end] == ',' || end == option.size()) { - if (!enableSpecialDebugLevel(Common::String(&str[start], end-start))) { - warning("Engine does not support debug level '%s'", Common::String(&str[start], end-start).c_str()); - } - start = end + 1; - } + StringTokenizer tokenizer(option, " ,"); + String token; + + while (!tokenizer.empty()) { + token = tokenizer.nextToken(); + if (!enableSpecialDebugLevel(token)) + warning("Engine does not support debug level '%s'", token.c_str()); } } bool disableSpecialDebugLevel(const String &option) { - for (uint i = 0; i < gDebugLevels.size(); ++i) { - if (!scumm_stricmp(option.c_str(), gDebugLevels[i].option.c_str())) { - gDebugLevelsEnabled &= ~gDebugLevels[i].level; - gDebugLevels[i].enabled = false; - return true; - } + DebugLevelContainer::iterator i = find_if(gDebugLevels.begin(), gDebugLevels.end(), DebugLevelSearch(option)); + + if (i != gDebugLevels.end()) { + gDebugLevelsEnabled &= ~i->level; + i->enabled = false; + + return true; + } else { + return false; } - return false; } -const Array<EngineDebugLevel> &listSpecialDebugLevels() { +const DebugLevelContainer &listSpecialDebugLevels() { return gDebugLevels; } diff --git a/common/util.h b/common/util.h index 1f680d28c1..c23513596c 100644 --- a/common/util.h +++ b/common/util.h @@ -27,7 +27,7 @@ #include "common/scummsys.h" #include "common/str.h" -#include "common/array.h" +#include "common/list.h" #ifdef MIN #undef MIN @@ -308,11 +308,13 @@ void enableSpecialDebugLevelList(const String &option); */ bool disableSpecialDebugLevel(const String &option); +typedef List<EngineDebugLevel> DebugLevelContainer; + /** * Lists all debug levels * @return returns a arry with all debug levels */ -const Array<EngineDebugLevel> &listSpecialDebugLevels(); +const DebugLevelContainer &listSpecialDebugLevels(); /** * Return the active debug flag mask (i.e. all active debug flags ORed diff --git a/engines/scumm/debugger.cpp b/engines/scumm/debugger.cpp index 954e400c2c..9f9115e207 100644 --- a/engines/scumm/debugger.cpp +++ b/engines/scumm/debugger.cpp @@ -498,25 +498,24 @@ bool ScummDebugger::Cmd_Object(int argc, const char **argv) { } bool ScummDebugger::Cmd_Debug(int argc, const char **argv) { - Common::Array<Common::EngineDebugLevel> lvls = Common::listSpecialDebugLevels(); + const Common::DebugLevelContainer &lvls = Common::listSpecialDebugLevels(); bool setFlag = false; // Remove or add debug channel? if ((argc == 1) && (Common::getEnabledSpecialDebugLevels() == 0)) { DebugPrintf("No debug flags are enabled\n"); DebugPrintf("Available Channels: "); - for (uint i = 0; i < lvls.size(); i++) { - DebugPrintf("%s, ", lvls[i].option.c_str()); + for (Common::DebugLevelContainer::iterator i = lvls.begin(); i != lvls.end(); ++i) { + DebugPrintf("%s, ", i->option.c_str()); } DebugPrintf("\n"); return true; } if ((argc == 1) && (Common::getEnabledSpecialDebugLevels() > 0)) { - for (uint i = 0; i < lvls.size(); i++) { - if (lvls[i].enabled) - DebugPrintf("%s - %s\n", lvls[i].option.c_str(), - lvls[i].description.c_str()); + for (Common::DebugLevelContainer::iterator i = lvls.begin(); i != lvls.end(); ++i) { + if (i->enabled) + DebugPrintf("%s - %s\n", i->option.c_str(), i->description.c_str()); } return true; } @@ -529,25 +528,24 @@ bool ScummDebugger::Cmd_Debug(int argc, const char **argv) { } else { DebugPrintf("Syntax: Debug +CHANNEL, or Debug -CHANNEL\n"); DebugPrintf("Available Channels: "); - for (uint i = 0; i < lvls.size(); i++) { - DebugPrintf("%s, ", lvls[i].option.c_str()); - DebugPrintf("\n"); + for (Common::DebugLevelContainer::iterator i = lvls.begin(); i != lvls.end(); ++i) { + DebugPrintf("%s\n", i->option.c_str()); } } // Identify flag const char *realFlag = argv[1] + 1; - for (uint i = 0; i < lvls.size(); i++) { - if ((scumm_stricmp(lvls[i].option.c_str(), realFlag)) == 0) { + for (Common::DebugLevelContainer::iterator i = lvls.begin(); i != lvls.end(); ++i) { + if (i->option.equalsIgnoreCase(realFlag)) { if (setFlag) { - enableSpecialDebugLevel(lvls[i].option); + enableSpecialDebugLevel(i->option); DebugPrintf("Enable "); } else { - disableSpecialDebugLevel(lvls[i].option); + disableSpecialDebugLevel(i->option); DebugPrintf("Disable "); } - DebugPrintf("%s\n", lvls[i].description.c_str()); + DebugPrintf("%s\n", i->description.c_str()); return true; } } diff --git a/gui/debugger.cpp b/gui/debugger.cpp index 99aebe9b62..87abe854be 100644 --- a/gui/debugger.cpp +++ b/gui/debugger.cpp @@ -406,7 +406,7 @@ bool Debugger::Cmd_Help(int argc, const char **argv) { } bool Debugger::Cmd_DebugFlagsList(int argc, const char **argv) { - const Common::Array<Common::EngineDebugLevel> &debugLevels = Common::listSpecialDebugLevels(); + const Common::DebugLevelContainer &debugLevels = Common::listSpecialDebugLevels(); DebugPrintf("Engine debug levels:\n"); DebugPrintf("--------------------\n"); @@ -414,8 +414,8 @@ bool Debugger::Cmd_DebugFlagsList(int argc, const char **argv) { DebugPrintf("No engine debug levels\n"); return true; } - for (uint i = 0; i < debugLevels.size(); ++i) { - DebugPrintf("'%s' - Description: %s\n", debugLevels[i].option.c_str(), debugLevels[i].description.c_str()); + for (Common::DebugLevelContainer::const_iterator i = debugLevels.begin(); i != debugLevels.end(); ++i) { + DebugPrintf("'%s' - Description: %s\n", i->option.c_str(), i->description.c_str()); } DebugPrintf("\n"); return true; |