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 /common/util.cpp | |
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
Diffstat (limited to 'common/util.cpp')
-rw-r--r-- | common/util.cpp | 92 |
1 files changed, 57 insertions, 35 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; } |