int main(int argc, char *argv[]) #endif { #if WANT_CONCURRENT tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred); #endif #ifdef _MSC_VER // Memory leak checking _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_ALLOC_MEM_DF | /*_CRTDBG_CHECK_CRT_DF | */_CRTDBG_DELAY_FREE_MEM_DF | _CRTDBG_LEAK_CHECK_DF); #endif // Parse the command line std::auto_ptr<CommandLine> commandline(new CommandLine); Result result = eInvalidCommandLineArguments; if (!commandline->Parse(argc, argv)) { banner(); CommandLine::usage(); } else { if (commandline->GetNoiseLevel() > CommandLine::nlSilent) banner(); #if WANT_CONCURRENT int p = commandline->GetNumThreads(); if (p > 0) { cout << "Number of threads: " << p << endl; init.initialize(p); } else init.initialize(); #endif // Which operation was selected switch (commandline->GetOperation()) { case CommandLine::opCreate: { // Create recovery data Par2Creator *creator = new Par2Creator; result = creator->Process(*commandline); delete creator; } break; case CommandLine::opVerify: { // Verify damaged files switch (commandline->GetVersion()) { case CommandLine::verPar1: { Par1Repairer *repairer = new Par1Repairer; result = repairer->Process(*commandline, false); delete repairer; } break; case CommandLine::verPar2: { Par2Repairer *repairer = new Par2Repairer; result = repairer->Process(*commandline, false); delete repairer; } break; case CommandLine::opNone: break; } } break; case CommandLine::opRepair: { // Repair damaged files switch (commandline->GetVersion()) { case CommandLine::verPar1: { Par1Repairer *repairer = new Par1Repairer; result = repairer->Process(*commandline, true); delete repairer; } break; case CommandLine::verPar2: { Par2Repairer *repairer = new Par2Repairer; result = repairer->Process(*commandline, true); delete repairer; } break; case CommandLine::opNone: break; } } break; case CommandLine::opNone: break; } } return result; }
int main(int argc, char *argv[]) { #ifdef _MSC_VER // Memory leak checking _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_ALLOC_MEM_DF | /*_CRTDBG_CHECK_CRT_DF | */_CRTDBG_DELAY_FREE_MEM_DF | _CRTDBG_LEAK_CHECK_DF); #endif // Parse the command line CommandLine *commandline = new CommandLine; Result result = eInvalidCommandLineArguments; if (!commandline->Parse(argc, argv)) { banner(); CommandLine::usage(); } else { if (commandline->GetNoiseLevel() > CommandLine::nlSilent) banner(); // Which operation was selected switch (commandline->GetOperation()) { case CommandLine::opCreate: { // Create recovery data Par2Creator *creator = new Par2Creator; result = creator->Process(*commandline); delete creator; } break; case CommandLine::opVerify: { // Verify damaged files switch (commandline->GetVersion()) { case CommandLine::verPar1: { Par1Repairer *repairer = new Par1Repairer; result = repairer->Process(*commandline, false); delete repairer; } break; case CommandLine::verPar2: { Par2Repairer *repairer = new Par2Repairer; result = repairer->Process(*commandline, false); delete repairer; } break; case CommandLine::opNone: break; } } break; case CommandLine::opRepair: { // Repair damaged files switch (commandline->GetVersion()) { case CommandLine::verPar1: { Par1Repairer *repairer = new Par1Repairer; result = repairer->Process(*commandline, true); delete repairer; } break; case CommandLine::verPar2: { Par2Repairer *repairer = new Par2Repairer; result = repairer->Process(*commandline, true); delete repairer; } break; case CommandLine::opNone: break; } } break; case CommandLine::opNone: break; } } delete commandline; return result; }