void MSVehicleControl::removePending() { #ifdef HAVE_FOX std::vector<SUMOVehicle*>& vehs = myPendingRemovals.getContainer(); #else std::vector<SUMOVehicle*>& vehs = myPendingRemovals; #endif std::sort(vehs.begin(), vehs.end(), ComparatorNumericalIdLess()); for (SUMOVehicle* const veh : vehs) { myTotalTravelTime += STEPS2TIME(MSNet::getInstance()->getCurrentTimeStep() - veh->getDeparture()); myRunningVehNo--; MSNet::getInstance()->informVehicleStateListener(veh, MSNet::VEHICLE_STATE_ARRIVED); for (MSVehicleDevice* const dev : veh->getDevices()) { dev->generateOutput(); } if (OptionsCont::getOptions().isSet("tripinfo-output")) { // close tag after tripinfo (possibly including emissions from another device) have been written OutputDevice::getDeviceByOption("tripinfo-output").closeTag(); } deleteVehicle(veh); } vehs.clear(); #ifdef HAVE_FOX myPendingRemovals.unlock(); #endif }
void MSVehicleControl::scheduleVehicleRemoval(SUMOVehicle* veh) { assert(myRunningVehNo > 0); myTotalTravelTime += STEPS2TIME(MSNet::getInstance()->getCurrentTimeStep() - veh->getDeparture()); myRunningVehNo--; MSNet::getInstance()->informVehicleStateListener(veh, MSNet::VEHICLE_STATE_ARRIVED); for (std::vector<MSDevice*>::const_iterator i = veh->getDevices().begin(); i != veh->getDevices().end(); ++i) { (*i)->generateOutput(); } if (OptionsCont::getOptions().isSet("tripinfo-output")) { OutputDevice::getDeviceByOption("tripinfo-output").closeTag(); } deleteVehicle(veh); }