bool Characterization::canExecute(Feature* task) { // is argOnly set? if (argOnly.getValue().size() > 0) { vector<string> onlies = argOnly.getValue(); vector<string>::iterator i; for(i=onlies.begin(); i != onlies.end(); ++i) { string onlyFeat = *i; if (onlyFeat.compare(task->getName()) == 0) { VerboseOutput::println(string("Characterization"), "option --only: extract feature only '" + onlyFeat + "'"); return true; } } return false; } bool result = true; // check if a certain level is requested if( (task->getLevel() == argLevel.getValue()) || ((argLevel.getValue() == 0) && (task->getLevel() < 4)) ) { // check if certain features should be skipped vector<string> nos = argNO.getValue(); vector<string>::iterator i; for(i=nos.begin(); i != nos.end(); ++i) { string no = *i; if (no.compare(task->getName()) == 0) { result = false; } } } else { result = false; } return result; }
static std::unique_ptr<cMemorySettingsRepository> ParseArguments(int argc, char ** argv) { try { // Parse the comand line args: TCLAP::CmdLine cmd("Cuberite"); TCLAP::ValueArg<int> slotsArg ("s", "max-players", "Maximum number of slots for the server to use, overrides setting in setting.ini", false, -1, "number", cmd); TCLAP::MultiArg<int> portsArg ("p", "port", "The port number the server should listen to", false, "port", cmd); TCLAP::SwitchArg commLogArg ("", "log-comm", "Log server client communications to file", cmd); TCLAP::SwitchArg commLogInArg ("", "log-comm-in", "Log inbound server client communications to file", cmd); TCLAP::SwitchArg commLogOutArg ("", "log-comm-out", "Log outbound server client communications to file", cmd); TCLAP::SwitchArg crashDumpFull ("", "crash-dump-full", "Crashdumps created by the server will contain full server memory", cmd); TCLAP::SwitchArg crashDumpGlobals("", "crash-dump-globals", "Crashdumps created by the server will contain the global variables' values", cmd); TCLAP::SwitchArg noBufArg ("", "no-output-buffering", "Disable output buffering", cmd); TCLAP::SwitchArg runAsServiceArg ("d", "service", "Run as a service on Windows, or daemon on UNIX like systems", cmd); cmd.parse(argc, argv); // Copy the parsed args' values into a settings repository: auto repo = cpp14::make_unique<cMemorySettingsRepository>(); if (slotsArg.isSet()) { int slots = slotsArg.getValue(); repo->AddValue("Server", "MaxPlayers", static_cast<Int64>(slots)); } if (portsArg.isSet()) { for (auto port: portsArg.getValue()) { repo->AddValue("Server", "Port", static_cast<Int64>(port)); } } if (commLogArg.getValue()) { g_ShouldLogCommIn = true; g_ShouldLogCommOut = true; } else { g_ShouldLogCommIn = commLogInArg.getValue(); g_ShouldLogCommOut = commLogOutArg.getValue(); } if (noBufArg.getValue()) { setvbuf(stdout, nullptr, _IONBF, 0); } repo->SetReadOnly(); // Set the service flag directly to cRoot: if (runAsServiceArg.getValue()) { cRoot::m_RunAsService = true; } // Apply the CrashDump flags for platforms that support them: #if defined(_WIN32) && !defined(_WIN64) && defined(_MSC_VER) // 32-bit Windows app compiled in MSVC if (crashDumpGlobals.getValue()) { g_DumpFlags = static_cast<MINIDUMP_TYPE>(g_DumpFlags | MiniDumpWithDataSegs); } if (crashDumpFull.getValue()) { g_DumpFlags = static_cast<MINIDUMP_TYPE>(g_DumpFlags | MiniDumpWithFullMemory); } #endif // 32-bit Windows app compiled in MSVC return repo; } catch (const TCLAP::ArgException & exc) { printf("Error reading command line %s for arg %s", exc.error().c_str(), exc.argId().c_str()); return cpp14::make_unique<cMemorySettingsRepository>(); } }