void MSLaneChanger::laneChange(SUMOTime t) { // This is what happens in one timestep. After initialization of the // changer, each vehicle will try to change. After that the changer // nedds an update to prevent multiple changes of one vehicle. // Finally, the change-result has to be given back to the lanes. initChanger(); while (vehInChanger()) { bool haveChanged = change(); updateChanger(haveChanged); } updateLanes(t); }
void MSLaneChanger::laneChange(SUMOTime t) { // This is what happens in one timestep. After initialization of the // changer, each vehicle will try to change. After that the changer // needs an update to prevent multiple changes of one vehicle. // Finally, the change-result has to be given back to the lanes. initChanger(); try { while (vehInChanger()) { const bool haveChanged = change(); updateChanger(haveChanged); } updateLanes(t); } catch (const ProcessError&) { // clean up locks or the gui may hang for (ChangerIt ce = myChanger.begin(); ce != myChanger.end(); ++ce) { ce->lane->releaseVehicles(); } throw; } }