diff options
author | Eugene Sandulenko | 2007-01-24 22:24:52 +0000 |
---|---|---|
committer | Eugene Sandulenko | 2007-01-24 22:24:52 +0000 |
commit | edd2422a55caeb5a46ee240feaea70a5aa4a4da2 (patch) | |
tree | 11c26d31c32895f734b2c7a9b177379e74d3cc24 /common | |
parent | dc8dde1872e30182b178fb1a772d564a3fb696af (diff) | |
download | scummvm-rg350-edd2422a55caeb5a46ee240feaea70a5aa4a4da2.tar.gz scummvm-rg350-edd2422a55caeb5a46ee240feaea70a5aa4a4da2.tar.bz2 scummvm-rg350-edd2422a55caeb5a46ee240feaea70a5aa4a4da2.zip |
Hide all AdvacedDetector parameters into a structure for easier maintenance
and extensibility
svn-id: r25163
Diffstat (limited to 'common')
-rw-r--r-- | common/advancedDetector.cpp | 47 | ||||
-rw-r--r-- | common/advancedDetector.h | 38 |
2 files changed, 42 insertions, 43 deletions
diff --git a/common/advancedDetector.cpp b/common/advancedDetector.cpp index ff46517e61..dbee275d2a 100644 --- a/common/advancedDetector.cpp +++ b/common/advancedDetector.cpp @@ -35,12 +35,12 @@ namespace Common { PluginError ADVANCED_DETECTOR_ENGINE_CREATE( GameList (*detectFunc)(const FSList &fslist), - const Common::ADObsoleteGameID *obsoleteList + const Common::ADParams ¶ms ) { const char *gameid = ConfMan.get("gameid").c_str(); - if (obsoleteList != 0) { - for (const Common::ADObsoleteGameID *o = obsoleteList; o->from; ++o) { + if (params.obsoleteList != 0) { + for (const Common::ADObsoleteGameID *o = params.obsoleteList; o->from; ++o) { if (!scumm_stricmp(gameid, o->from)) { gameid = o->to; ConfMan.set("gameid", o->to); @@ -74,10 +74,9 @@ PluginError ADVANCED_DETECTOR_ENGINE_CREATE( GameDescriptor ADVANCED_DETECTOR_FIND_GAMEID( const char *gameid, - const PlainGameDescriptor *list, - const Common::ADObsoleteGameID *obsoleteList + const Common::ADParams ¶ms ) { - const PlainGameDescriptor *g = list; + const PlainGameDescriptor *g = params.list; while (g->gameid) { if (0 == scumm_stricmp(gameid, g->gameid)) return *g; @@ -85,8 +84,8 @@ GameDescriptor ADVANCED_DETECTOR_FIND_GAMEID( } GameDescriptor gs; - if (obsoleteList != 0) { - const Common::ADObsoleteGameID *o = obsoleteList; + if (params.obsoleteList != 0) { + const Common::ADObsoleteGameID *o = params.obsoleteList; while (o->from) { if (0 == scumm_stricmp(gameid, o->from)) { gs["gameid"] = gameid; @@ -116,10 +115,7 @@ static GameDescriptor toGameDescriptor(const ADGameDescription &g, const PlainGa GameList ADVANCED_DETECTOR_DETECT_GAMES_FUNCTION( const FSList &fslist, - const byte *descs, - const int descItemSize, - const int md5Bytes, - const PlainGameDescriptor *list + const Common::ADParams ¶ms ) { GameList detectedGames; Common::AdvancedDetector ad; @@ -127,26 +123,23 @@ GameList ADVANCED_DETECTOR_DETECT_GAMES_FUNCTION( Common::ADGameDescList descList; const byte *descPtr; - for (descPtr = descs; ((const ADGameDescription *)descPtr)->gameid != 0; descPtr += descItemSize) + for (descPtr = params.descs; ((const ADGameDescription *)descPtr)->gameid != 0; descPtr += params.descItemSize) descList.push_back((const ADGameDescription *)descPtr); ad.registerGameDescriptions(descList); - debug(3, "%s: cnt: %d", ((const ADGameDescription *)descs)->gameid, descList.size()); + debug(3, "%s: cnt: %d", ((const ADGameDescription *)params.descs)->gameid, descList.size()); - matches = ad.detectGame(&fslist, md5Bytes, Common::UNK_LANG, Common::kPlatformUnknown); + matches = ad.detectGame(&fslist, params, Common::UNK_LANG, Common::kPlatformUnknown); for (uint i = 0; i < matches.size(); i++) - detectedGames.push_back(toGameDescriptor(*(const ADGameDescription *)(descs + matches[i] * descItemSize), list)); + detectedGames.push_back(toGameDescriptor(*(const ADGameDescription *)(params.descs + matches[i] * params.descItemSize), params.list)); return detectedGames; } int ADVANCED_DETECTOR_DETECT_INIT_GAME( - const byte *descs, - const int descItemSize, - const int md5Bytes, - const PlainGameDescriptor *list + const Common::ADParams ¶ms ) { int gameNumber = -1; @@ -166,15 +159,15 @@ int ADVANCED_DETECTOR_DETECT_INIT_GAME( Common::String gameid = ConfMan.get("gameid"); - for (descPtr = descs; ((const ADGameDescription *)descPtr)->gameid != 0; descPtr += descItemSize) + for (descPtr = params.descs; ((const ADGameDescription *)descPtr)->gameid != 0; descPtr += params.descItemSize) descList.push_back((const ADGameDescription *)descPtr); ad.registerGameDescriptions(descList); - matches = ad.detectGame(0, md5Bytes, language, platform); + matches = ad.detectGame(0, params, language, platform); for (uint i = 0; i < matches.size(); i++) { - if (((const ADGameDescription *)(descs + matches[i] * descItemSize))->gameid == gameid) { + if (((const ADGameDescription *)(params.descs + matches[i] * params.descItemSize))->gameid == gameid) { gameNumber = matches[i]; break; } @@ -184,7 +177,7 @@ int ADVANCED_DETECTOR_DETECT_INIT_GAME( error("TODO invalid gameNumber %d (max. expected value: %d)", gameNumber, descList.size()); } - debug(2, "Running %s", toGameDescriptor(*(const ADGameDescription *)(descs + gameNumber * descItemSize), list).description().c_str()); + debug(2, "Running %s", toGameDescriptor(*(const ADGameDescription *)(params.descs + gameNumber * params.descItemSize), params.list).description().c_str()); return gameNumber; } @@ -199,7 +192,7 @@ static String getDescription(const ADGameDescription *g) { return String(tmp); } -ADList AdvancedDetector::detectGame(const FSList *fslist, int md5Bytes, Language language, Platform platform) { +ADList AdvancedDetector::detectGame(const FSList *fslist, const Common::ADParams ¶ms, Language language, Platform platform) { typedef HashMap<String, bool, CaseSensitiveString_Hash, CaseSensitiveString_EqualTo> StringSet; StringSet filesList; @@ -238,7 +231,7 @@ ADList AdvancedDetector::detectGame(const FSList *fslist, int md5Bytes, Language if (!filesList.contains(tstr) && !filesList.contains(tstr2)) continue; - if (!md5_file(*file, md5sum, md5Bytes)) continue; + if (!md5_file(*file, md5sum, params.md5Bytes)) continue; for (j = 0; j < 16; j++) { sprintf(md5str + j*2, "%02x", (int)md5sum[j]); } @@ -257,7 +250,7 @@ ADList AdvancedDetector::detectGame(const FSList *fslist, int md5Bytes, Language if (testFile.open(file->_key)) { testFile.close(); - if (md5_file(file->_key.c_str(), md5sum, md5Bytes)) { + if (md5_file(file->_key.c_str(), md5sum, params.md5Bytes)) { for (j = 0; j < 16; j++) { sprintf(md5str + j*2, "%02x", (int)md5sum[j]); } diff --git a/common/advancedDetector.h b/common/advancedDetector.h index 8bf347884c..5623cbf76e 100644 --- a/common/advancedDetector.h +++ b/common/advancedDetector.h @@ -50,6 +50,19 @@ struct ADObsoleteGameID { Common::Platform platform; }; +struct ADParams { + // Pointer to ADGameDescription or its superset structure + const byte *descs; + // Size of that superset structure + const int descItemSize; + // Number of bytes to compute MD5 sum for + const int md5Bytes; + // List of all engine targets + const PlainGameDescriptor *list; + // Structure for autoupgrading obsolete targets + const Common::ADObsoleteGameID *obsoleteList; +}; + typedef Array<int> ADList; typedef Array<const ADGameDescription*> ADGameDescList; @@ -84,7 +97,7 @@ public: * @param platform restrict results to specified platform only * @return list of indexes to GameDescriptions of matched games */ - ADList detectGame(const FSList *fslist, int md5Bytes, Language language, Platform platform); + ADList detectGame(const FSList *fslist, const Common::ADParams ¶ms, Language language, Platform platform); private: ADGameDescList _gameDescriptions; @@ -95,8 +108,7 @@ private: // Possibly move it inside class AdvancedDetector ? GameDescriptor ADVANCED_DETECTOR_FIND_GAMEID( const char *gameid, - const PlainGameDescriptor *list, - const Common::ADObsoleteGameID *obsoleteList + const Common::ADParams ¶ms ); @@ -104,36 +116,30 @@ GameDescriptor ADVANCED_DETECTOR_FIND_GAMEID( // Possibly move it inside class AdvancedDetector ? GameList ADVANCED_DETECTOR_DETECT_GAMES_FUNCTION( const FSList &fslist, - const byte *descs, - const int descItemSize, - const int md5Bytes, - const PlainGameDescriptor *list + const Common::ADParams ¶ms ); // FIXME/TODO: Rename this function to something more sensible. // Possibly move it inside class AdvancedDetector ? int ADVANCED_DETECTOR_DETECT_INIT_GAME( - const byte *descs, - const int descItemSize, - const int md5Bytes, - const PlainGameDescriptor *list + const Common::ADParams ¶ms ); // FIXME/TODO: Rename this function to something more sensible. // Possibly move it inside class AdvancedDetector ? PluginError ADVANCED_DETECTOR_ENGINE_CREATE( GameList (*detectFunc)(const FSList &fslist), - const Common::ADObsoleteGameID *obsoleteList + const Common::ADParams ¶ms ); -#define ADVANCED_DETECTOR_DEFINE_PLUGIN(engine,createFunction,detectFunc,list,obsoleteList) \ +#define ADVANCED_DETECTOR_DEFINE_PLUGIN(engine,createFunction,detectFunc,params) \ GameList Engine_##engine##_gameIDList() { \ - return GameList(list); \ + return GameList(params.list); \ } \ GameDescriptor Engine_##engine##_findGameID(const char *gameid) { \ - return Common::ADVANCED_DETECTOR_FIND_GAMEID(gameid,list,obsoleteList); \ + return Common::ADVANCED_DETECTOR_FIND_GAMEID(gameid, params); \ } \ GameList Engine_##engine##_detectGames(const FSList &fslist) { \ return detectFunc(fslist); \ @@ -141,7 +147,7 @@ PluginError ADVANCED_DETECTOR_ENGINE_CREATE( PluginError Engine_##engine##_create(OSystem *syst, Engine **engine) { \ assert(syst); \ assert(engine); \ - PluginError err = ADVANCED_DETECTOR_ENGINE_CREATE(detectFunc, obsoleteList); \ + PluginError err = ADVANCED_DETECTOR_ENGINE_CREATE(detectFunc, params); \ if (err == kNoError) \ *engine = new createFunction(syst); \ return err; \ |