Cleaned up engine debug level code.
svn-id: r32195
This commit is contained in:
parent
5204d012f6
commit
cc08a4953d
4 changed files with 76 additions and 54 deletions
|
@ -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())) {
|
||||
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());
|
||||
gDebugLevels[i] = EngineDebugLevel(level, option, description);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
*i = EngineDebugLevel(level, option, description);
|
||||
} else {
|
||||
gDebugLevels.push_back(EngineDebugLevel(level, option, description));
|
||||
sort(gDebugLevels.begin(), gDebugLevels.end(), DebugLevelSort());
|
||||
}
|
||||
|
||||
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;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
void enableSpecialDebugLevelList(const String &option) {
|
||||
uint start = 0;
|
||||
uint end = 0;
|
||||
StringTokenizer tokenizer(option, " ,");
|
||||
String token;
|
||||
|
||||
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;
|
||||
}
|
||||
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;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
const Array<EngineDebugLevel> &listSpecialDebugLevels() {
|
||||
const DebugLevelContainer &listSpecialDebugLevels() {
|
||||
return gDebugLevels;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue