void RORouteHandler::closeFlow() { // @todo: consider myScale? // let's check whether vehicles had to depart before the simulation starts myVehicleParameter->repetitionsDone = 0; SUMOTime offsetToBegin = string2time(OptionsCont::getOptions().getString("begin")) - myVehicleParameter->depart; while (myVehicleParameter->repetitionsDone * myVehicleParameter->repetitionOffset < offsetToBegin) { myVehicleParameter->repetitionsDone++; if (myVehicleParameter->repetitionsDone == myVehicleParameter->repetitionNumber) { delete myVehicleParameter; return; } } SUMOVTypeParameter* type = myNet.getVehicleTypeSecure(myVehicleParameter->vtypeid); RORouteDef* route = myNet.getRouteDef(myVehicleParameter->routeid); if (type == 0) { myErrorOutput->inform("The vehicle type '" + myVehicleParameter->vtypeid + "' for vehicle '" + myVehicleParameter->id + "' is not known."); delete myVehicleParameter; return; } if (route == 0) { myErrorOutput->inform("Vehicle '" + myVehicleParameter->id + "' has no route."); delete myVehicleParameter; return; } myActiveRouteID = ""; myNet.addFlow(myVehicleParameter, OptionsCont::getOptions().getBool("randomize-flows")); registerLastDepart(); myVehicleParameter = 0; }
void RORouteHandler::closePerson() { myActivePlan->closeTag(); myNet.addPerson(myVehicleParameter->depart, myActivePlan->getString()); registerLastDepart(); delete myVehicleParameter; myVehicleParameter = 0; delete myActivePlan; myActivePlan = 0; }
void RORouteHandler::closePerson() { if (myActivePerson->getPlan().empty()) { WRITE_WARNING("Discarding person '" + myVehicleParameter->id + "' because it's plan is empty"); } else { if (myNet.addPerson(myActivePerson)) { registerLastDepart(); } } delete myVehicleParameter; myVehicleParameter = 0; myActivePerson = 0; }
void RORouteHandler::closeContainer() { myActiveContainerPlan->closeTag(); if (myActiveContainerPlanSize > 0) { myNet.addContainer(myVehicleParameter->depart, myActiveContainerPlan->getString()); registerLastDepart(); } else { WRITE_WARNING("Discarding container '" + myVehicleParameter->id + "' because it's plan is empty"); } delete myVehicleParameter; myVehicleParameter = 0; delete myActiveContainerPlan; myActiveContainerPlan = 0; myActiveContainerPlanSize = 0; }
void RORouteHandler::closeFlow() { // @todo: consider myScale? if (myVehicleParameter->repetitionNumber == 0) { delete myVehicleParameter; myVehicleParameter = 0; return; } // let's check whether vehicles had to depart before the simulation starts myVehicleParameter->repetitionsDone = 0; const SUMOTime offsetToBegin = myBegin - myVehicleParameter->depart; while (myVehicleParameter->repetitionsDone * myVehicleParameter->repetitionOffset < offsetToBegin) { myVehicleParameter->repetitionsDone++; if (myVehicleParameter->repetitionsDone == myVehicleParameter->repetitionNumber) { delete myVehicleParameter; myVehicleParameter = 0; return; } } if (myNet.getVehicleTypeSecure(myVehicleParameter->vtypeid) == 0) { myErrorOutput->inform("The vehicle type '" + myVehicleParameter->vtypeid + "' for flow '" + myVehicleParameter->id + "' is not known."); } if (myVehicleParameter->routeid[0] == '!' && myNet.getRouteDef(myVehicleParameter->routeid) == 0) { closeRoute(true); } if (myNet.getRouteDef(myVehicleParameter->routeid) == 0) { myErrorOutput->inform("The route '" + myVehicleParameter->routeid + "' for flow '" + myVehicleParameter->id + "' is not known."); delete myVehicleParameter; myVehicleParameter = 0; return; } myActiveRouteID = ""; if (!MsgHandler::getErrorInstance()->wasInformed()) { if (myNet.addFlow(myVehicleParameter, OptionsCont::getOptions().getBool("randomize-flows"))) { registerLastDepart(); } else { myErrorOutput->inform("Another flow with the id '" + myVehicleParameter->id + "' exists."); } } else { delete myVehicleParameter; } myVehicleParameter = 0; myInsertStopEdgesAt = -1; }
void MSRouteHandler::closePerson() { if (myActivePlan->size() == 0) { throw ProcessError("Person '" + myVehicleParameter->id + "' has no plan."); } MSVehicleType* type = MSNet::getInstance()->getVehicleControl().getVType(myVehicleParameter->vtypeid); if (type == 0) { throw ProcessError("The type '" + myVehicleParameter->vtypeid + "' for person '" + myVehicleParameter->id + "' is not known."); } MSPerson* person = MSNet::getInstance()->getPersonControl().buildPerson(myVehicleParameter, type, myActivePlan); // @todo: consider myScale? if ((myAddVehiclesDirectly || checkLastDepart()) && MSNet::getInstance()->getPersonControl().add(myVehicleParameter->id, person)) { MSNet::getInstance()->getPersonControl().setDeparture(myVehicleParameter->depart, person); registerLastDepart(); } else { delete person; } myVehicleParameter = 0; myActivePlan = 0; }
void RORouteHandler::closeVehicle() { // get the vehicle id if (myVehicleParameter->departProcedure == DEPART_GIVEN && myVehicleParameter->depart < myBegin) { return; } // get vehicle type SUMOVTypeParameter* type = myNet.getVehicleTypeSecure(myVehicleParameter->vtypeid); if (type == 0) { myErrorOutput->inform("The vehicle type '" + myVehicleParameter->vtypeid + "' for vehicle '" + myVehicleParameter->id + "' is not known."); type = myNet.getVehicleTypeSecure(DEFAULT_VTYPE_ID); } else { if (!myKeepVTypeDist) { // fix the type id in case we used a distribution myVehicleParameter->vtypeid = type->id; } } if (type->vehicleClass == SVC_PEDESTRIAN) { WRITE_WARNING("Vehicle type '" + type->id + "' with vClass=pedestrian should only be used for persons and not for vehicle '" + myVehicleParameter->id + "'."); } // get the route RORouteDef* route = myNet.getRouteDef(myVehicleParameter->routeid); if (route == 0) { myErrorOutput->inform("The route of the vehicle '" + myVehicleParameter->id + "' is not known."); return; } if (route->getID()[0] != '!') { route = route->copy("!" + myVehicleParameter->id, myVehicleParameter->depart); } // build the vehicle if (!MsgHandler::getErrorInstance()->wasInformed()) { ROVehicle* veh = new ROVehicle(*myVehicleParameter, route, type, &myNet, myErrorOutput); if (myNet.addVehicle(myVehicleParameter->id, veh)) { registerLastDepart(); } } }
void RORouteHandler::closeVehicle() { // get the vehicle id if (myVehicleParameter->departProcedure == DEPART_GIVEN && myVehicleParameter->depart < string2time(OptionsCont::getOptions().getString("begin"))) { return; } // get vehicle type SUMOVTypeParameter* type = myNet.getVehicleTypeSecure(myVehicleParameter->vtypeid); // get the route RORouteDef* route = myNet.getRouteDef(myVehicleParameter->routeid); if (route == 0) { myErrorOutput->inform("The route of the vehicle '" + myVehicleParameter->id + "' is not known."); return; } if (route->getID()[0] != '!') { route = route->copy("!" + myVehicleParameter->id); } // build the vehicle if (!MsgHandler::getErrorInstance()->wasInformed()) { ROVehicle* veh = new ROVehicle(*myVehicleParameter, route, type); myNet.addVehicle(myVehicleParameter->id, veh); registerLastDepart(); } }
void MSRouteHandler::closeFlow() { // let's check whether vehicles had to depart before the simulation starts myVehicleParameter->repetitionsDone = 0; SUMOTime offsetToBegin = string2time(OptionsCont::getOptions().getString("begin")) - myVehicleParameter->depart; while (myVehicleParameter->repetitionsDone * myVehicleParameter->repetitionOffset < offsetToBegin) { myVehicleParameter->repetitionsDone++; if (myVehicleParameter->repetitionsDone == myVehicleParameter->repetitionNumber) { return; } } if (MSNet::getInstance()->getVehicleControl().getVType(myVehicleParameter->vtypeid) == 0) { throw ProcessError("The vehicle type '" + myVehicleParameter->vtypeid + "' for vehicle '" + myVehicleParameter->id + "' is not known."); } if (MSRoute::dictionary("!" + myVehicleParameter->id) == 0) { // if not, try via the (hopefully) given route-id if (MSRoute::dictionary(myVehicleParameter->routeid) == 0) { if (myVehicleParameter->routeid != "") { throw ProcessError("The route '" + myVehicleParameter->routeid + "' for vehicle '" + myVehicleParameter->id + "' is not known."); } else { throw ProcessError("Vehicle '" + myVehicleParameter->id + "' has no route."); } } } else { myVehicleParameter->routeid = "!" + myVehicleParameter->id; } myActiveRouteID = ""; // check whether the vehicle shall be added directly to the network or // shall stay in the internal buffer if (myAddVehiclesDirectly || checkLastDepart()) { MSNet::getInstance()->getInsertionControl().add(myVehicleParameter); registerLastDepart(); } myVehicleParameter = 0; }
void MSRouteHandler::closeVehicle() { // get nested route const MSRoute* route = MSRoute::dictionary("!" + myVehicleParameter->id); MSVehicleControl& vehControl = MSNet::getInstance()->getVehicleControl(); if (myVehicleParameter->departProcedure == DEPART_GIVEN) { // let's check whether this vehicle had to depart before the simulation starts if (!(myAddVehiclesDirectly || checkLastDepart()) || myVehicleParameter->depart < string2time(OptionsCont::getOptions().getString("begin"))) { if (route != 0) { route->addReference(); route->release(); } return; } } // get the vehicle's type MSVehicleType* vtype = 0; if (myVehicleParameter->vtypeid != "") { vtype = vehControl.getVType(myVehicleParameter->vtypeid); if (vtype == 0) { throw ProcessError("The vehicle type '" + myVehicleParameter->vtypeid + "' for vehicle '" + myVehicleParameter->id + "' is not known."); } } else { // there should be one (at least the default one) vtype = vehControl.getVType(); } if (route == 0) { // if there is no nested route, try via the (hopefully) given route-id route = MSRoute::dictionary(myVehicleParameter->routeid); } if (route == 0) { // nothing found? -> error if (myVehicleParameter->routeid != "") { throw ProcessError("The route '" + myVehicleParameter->routeid + "' for vehicle '" + myVehicleParameter->id + "' is not known."); } else { throw ProcessError("Vehicle '" + myVehicleParameter->id + "' has no route."); } } myActiveRouteID = ""; // try to build the vehicle SUMOVehicle* vehicle = 0; if (vehControl.getVehicle(myVehicleParameter->id) == 0) { vehicle = vehControl.buildVehicle(myVehicleParameter, route, vtype); // maybe we do not want this vehicle to be inserted due to scaling if (vehControl.isInQuota()) { // add the vehicle to the vehicle control vehControl.addVehicle(myVehicleParameter->id, vehicle); if (myVehicleParameter->departProcedure == DEPART_TRIGGERED) { vehControl.addWaiting(*route->begin(), vehicle); vehControl.registerOneWaitingForPerson(); } registerLastDepart(); myVehicleParameter = 0; } else { vehControl.deleteVehicle(vehicle, true); myVehicleParameter = 0; vehicle = 0; } } else { // strange: another vehicle with the same id already exists if (!MSGlobals::gStateLoaded) { // and was not loaded while loading a simulation state // -> error throw ProcessError("Another vehicle with the id '" + myVehicleParameter->id + "' exists."); } else { // ok, it seems to be loaded previously while loading a simulation state vehicle = 0; } } // check whether the vehicle shall be added directly to the network or // shall stay in the internal buffer if (vehicle != 0) { if (vehicle->getParameter().departProcedure == DEPART_GIVEN) { MSNet::getInstance()->getInsertionControl().add(vehicle); } } }