bool MSCalibrator::childCheckEmit(MSCalibratorChild *child) { if (myToEmit.find(child)==myToEmit.end()) { // should not happen - a child is calling and should have a vehicle added throw 1; } if (child!=myActiveChild||myDestLane->getEdge().isVaporizing()) { // check whether this is due to vaporization if (myDestLane->getEdge().isVaporizing()) { myToEmit[child].first->setWasVaporized(true); } // remove the vehicle previously inserted by the child delete myToEmit[child].first; // erase the child information myToEmit.erase(myToEmit.find(child)); // inform child to process the next one (the current was not used) return true; } // get the vehicle and the speed the child has read/generated MSVehicle *veh = myToEmit[child].first; SUMOReal speed = myToEmit[child].second; // check whether the speed shall be patched //TM SUMOReal pos = myPos+1; if (speed<0) { speed = MIN2(myDestLane->getMaxSpeed(), veh->getMaxSpeed()); } // try to emit #ifdef HAVE_MESOSIM if (MSGlobals::gUseMesoSim) { if (myDestLane->getEdge().emit(*veh, myNet.getCurrentTimeStep())) { veh->onDepart(); // insert vehicle into the dictionary if (!myNet.getVehicleControl().addVehicle(veh->getID(), veh)) { // !!! throw 1; } // erase the child information myToEmit.erase(myToEmit.find(child)); return true; } } else { #endif if (myDestLane->isEmissionSuccess(veh, speed, pos, false)) { veh->onDepart(); // insert vehicle into the dictionary if (!myNet.getVehicleControl().addVehicle(veh->getID(), veh)) { // !!! throw 1; } // erase the child information myToEmit.erase(myToEmit.find(child)); return true; } #ifdef HAVE_MESOSIM } #endif return false; }