void fill_list(common::List<bool>& list) { const Uint nb_rows = list.size(); for(Uint i = 0; i != nb_rows; ++i) { list[i] = (i % 2 == 0); } }
void fill_list(common::List<T>& list) { typedef typename boost::mpl::if_< typename boost::is_integral<T>::type, boost::random::uniform_int_distribution<T>, boost::random::uniform_real_distribution<T> >::type distribution_type; distribution_type dist(0, 1); const Uint nb_rows = list.size(); for(Uint i = 0; i != nb_rows; ++i) { list[i] = dist(gen); } }
/** * Create a ScummEngine instance, based on the given detector data. * * This is heavily based on our MD5 detection scheme. */ Common::Error ScummMetaEngine::createInstance(OSystem *syst, Engine **engine) const { assert(syst); assert(engine); const char *gameid = ConfMan.get("gameid").c_str(); // We start by checking whether the specified game ID is obsolete. // If that is the case, we automatically upgrade the target to use // the correct new game ID (and platform, if specified). for (const ADObsoleteGameID *o = obsoleteGameIDsTable; o->from; ++o) { if (!scumm_stricmp(gameid, o->from)) { // Match found, perform upgrade gameid = o->to; ConfMan.set("gameid", o->to); if (o->platform != Common::kPlatformUnknown) ConfMan.set("platform", Common::getPlatformCode(o->platform)); warning("Target upgraded from game ID %s to %s", o->from, o->to); ConfMan.flushToDisk(); break; } } // Fetch the list of files in the current directory Common::FSList fslist; Common::FSNode dir(ConfMan.get("path")); if (!dir.isDirectory()) return Common::kInvalidPathError; if (!dir.getChildren(fslist, Common::FSNode::kListFilesOnly)) return Common::kNoGameDataFoundError; // Invoke the detector, but fixed to the specified gameid. Common::List<DetectorResult> results; ::detectGames(fslist, results, gameid); // Unable to locate game data if (results.empty()) return Common::kNoGameDataFoundError; // No unique match found. If a platform override is present, try to // narrow down the list a bit more. if (results.size() > 1 && ConfMan.hasKey("platform")) { Common::Platform platform = Common::parsePlatform(ConfMan.get("platform")); Common::List<DetectorResult> tmp; // Copy only those candidates which match the platform setting for (Common::List<DetectorResult>::iterator x = results.begin(); x != results.end(); ++x) { if (x->game.platform == platform) { tmp.push_back(*x); } } // If we narrowed it down too much, print a warning, else use the list // we just computed as new candidates list. if (tmp.empty()) { warning("Engine_SCUMM_create: Game data inconsistent with platform override"); } else { results = tmp; } } // Still no unique match found -> print a warning if (results.size() > 1) warning("Engine_SCUMM_create: No unique game candidate found, using first one"); // Simply use the first match DetectorResult res(*(results.begin())); debug(1, "Using gameid %s, variant %s, extra %s", res.game.gameid, res.game.variant, res.extra); // Print the MD5 of the game; either verbose using printf, in case of an // unknown MD5, or with a medium debug level in case of a known MD5 (for // debugging purposes). if (!findInMD5Table(res.md5.c_str())) { printf("Your game version appears to be unknown. If this is *NOT* a fan-modified\n"); printf("version (in particular, not a fan-made translation), please, report the\n"); printf("following data to the ScummVM team along with name of the game you tried\n"); printf("to add and its version/language/etc.:\n"); printf(" SCUMM gameid '%s', file '%s', MD5 '%s'\n\n", res.game.gameid, generateFilenameForDetection(res.fp.pattern, res.fp.genMethod).c_str(), res.md5.c_str()); } else { debug(1, "Using MD5 '%s'", res.md5.c_str()); } // If the GUI options were updated, we catch this here and update them in the users config // file transparently. Common::updateGameGUIOptions(res.game.guioptions, getGameGUIOptionsDescriptionLanguage(res.language)); // Check for a user override of the platform. We allow the user to override // the platform, to make it possible to add games which are not yet in // our MD5 database but require a specific platform setting. // TODO: Do we really still need / want the platform override ? if (ConfMan.hasKey("platform")) res.game.platform = Common::parsePlatform(ConfMan.get("platform")); // Language override if (ConfMan.hasKey("language")) res.language = Common::parseLanguage(ConfMan.get("language")); // V3 FM-TOWNS games *always* should use the corresponding music driver, // anything else makes no sense for them. // TODO: Maybe allow the null driver, too? if (res.game.platform == Common::kPlatformFMTowns && res.game.version == 3) res.game.midi = MDT_TOWNS; // Finally, we have massaged the GameDescriptor to our satisfaction, and can // instantiate the appropriate game engine. Hooray! switch (res.game.version) { case 0: *engine = new ScummEngine_v0(syst, res); break; case 1: case 2: *engine = new ScummEngine_v2(syst, res); break; case 3: if (res.game.features & GF_OLD256) *engine = new ScummEngine_v3(syst, res); else *engine = new ScummEngine_v3old(syst, res); break; case 4: *engine = new ScummEngine_v4(syst, res); break; case 5: *engine = new ScummEngine_v5(syst, res); break; case 6: switch (res.game.heversion) { #ifdef ENABLE_HE case 200: *engine = new ScummEngine_vCUPhe(syst, res); break; case 100: *engine = new ScummEngine_v100he(syst, res); break; case 99: *engine = new ScummEngine_v99he(syst, res); break; case 98: case 95: case 90: *engine = new ScummEngine_v90he(syst, res); break; case 85: case 80: *engine = new ScummEngine_v80he(syst, res); break; case 74: case 73: case 72: *engine = new ScummEngine_v72he(syst, res); break; case 71: *engine = new ScummEngine_v71he(syst, res); break; #endif case 70: *engine = new ScummEngine_v70he(syst, res); break; case 62: case 61: *engine = new ScummEngine_v60he(syst, res); break; default: *engine = new ScummEngine_v6(syst, res); } break; #ifdef ENABLE_SCUMM_7_8 case 7: *engine = new ScummEngine_v7(syst, res); break; case 8: *engine = new ScummEngine_v8(syst, res); break; #endif default: error("Engine_SCUMM_create(): Unknown version of game engine"); } return Common::kNoError; }