/* ------------------------------------------------------------------------- * main * ----------------------------------------------------------------------- */ int main(int argc, char** argv) { OptionsCont& oc = OptionsCont::getOptions(); // give some application descriptions oc.setApplicationDescription("Builds vehicle routes for SUMO using detector values."); oc.setApplicationName("dfrouter", "SUMO dfrouter Version " + (std::string)VERSION_STRING); int ret = 0; RODFNet* net = 0; RODFDetectorCon* detectors = 0; RODFDetectorFlows* flows = 0; try { // initialise the application system (messaging, xml, options) XMLSubSys::init(); RODFFrame::fillOptions(); OptionsIO::getOptions(true, argc, argv); if (oc.processMetaOptions(argc < 2)) { SystemFrame::close(); return 0; } XMLSubSys::setValidation(oc.getBool("xml-validation")); MsgHandler::initOutputOptions(); if (!RODFFrame::checkOptions()) { throw ProcessError(); } RandHelper::initRandGlobal(); // load data ROLoader loader(oc, false, !oc.getBool("no-step-log")); net = new RODFNet(oc.getBool("highway-mode")); RODFEdgeBuilder builder; loader.loadNet(*net, builder); net->buildApproachList(); // load detectors detectors = new RODFDetectorCon(); readDetectors(*detectors, oc, net); // load detector values flows = new RODFDetectorFlows(string2time(oc.getString("begin")), string2time(oc.getString("end")), string2time(oc.getString("time-step"))); readDetectorFlows(*flows, oc, *detectors); // build routes startComputation(net, *flows, *detectors, oc); } catch (const ProcessError& e) { if (std::string(e.what()) != std::string("Process Error") && std::string(e.what()) != std::string("")) { WRITE_ERROR(e.what()); } MsgHandler::getErrorInstance()->inform("Quitting (on error).", false); ret = 1; #ifndef _DEBUG } catch (const std::exception& e) { if (std::string(e.what()) != std::string("")) { WRITE_ERROR(e.what()); } MsgHandler::getErrorInstance()->inform("Quitting (on error).", false); ret = 1; } catch (...) { MsgHandler::getErrorInstance()->inform("Quitting (on unknown error).", false); ret = 1; #endif } delete net; delete flows; delete detectors; SystemFrame::close(); if (ret == 0) { std::cout << "Success." << std::endl; } return ret; }