50 #include <mesosim/MELoop.h>
51 #include <mesosim/MESegment.h>
52 #include <mesosim/MEVehicle.h>
55 #ifdef CHECK_MEMORY_LEAKS
57 #endif // CHECK_MEMORY_LEAKS
71 const std::string& streetName) :
72 myID(id), myNumericalID(numericalID), myLanes(0),
73 myLaneChanger(0), myVaporizationRequests(0), myLastFailedInsertionTime(-1),
74 myStreetName(streetName) {}
83 for (AllowedLanesCont::iterator i1 = (*i2).second.begin(); i1 != (*i2).second.end(); i1++) {
105 myAllowed[0] =
new std::vector<MSLane*>();
106 for (std::vector<MSLane*>::iterator i =
myLanes->begin(); i !=
myLanes->end(); ++i) {
109 for (MSLinkCont::const_iterator j = lc.begin(); j != lc.end(); ++j) {
110 MSLane* toL = (*j)->getLane();
122 myAllowed[&to] =
new std::vector<MSLane*>();
138 for (AllowedLanesCont::iterator i1 = (*i2).second.begin(); i1 != (*i2).second.end(); i1++) {
146 for (std::vector<MSLane*>::iterator i =
myLanes->begin(); i !=
myLanes->end(); ++i) {
156 std::vector<MSLane*>::iterator laneIt = find(
myLanes->begin(),
myLanes->end(), lane);
160 return *(laneIt + 1);
166 std::vector<MSLane*>::iterator laneIt = find(
myLanes->begin(),
myLanes->end(), lane);
170 return *(laneIt - 1);
174 const std::vector<MSLane*>*
180 const std::vector<MSLane*>*
186 const std::vector<MSLane*>*
188 AllowedLanesCont::const_iterator it = c.find(dest);
196 const std::vector<MSLane*>*
211 for (AllowedLanesCont::const_iterator i1 =
myAllowed.begin(); i1 !=
myAllowed.end(); ++i1) {
212 const MSEdge* edge = i1->first;
213 const std::vector<MSLane*>* lanes = i1->second;
216 for (std::vector<MSLane*>::const_iterator i2 = lanes->begin(); i2 != lanes->end(); ++i2) {
218 if ((*i2)->allowsVehicleClass(vclass)) {
256 unsigned int noCars = INT_MAX;
257 for (std::vector<MSLane*>::const_iterator i = allowed->begin(); i != allowed->end(); ++i) {
258 if ((*i)->getVehicleNumber() < noCars) {
289 for (std::vector<MSVehicle::LaneQ>::const_iterator i = bl.begin(); i != bl.end(); ++i) {
290 if ((*i).length > bestLength) {
291 bestLength = (*i).length;
294 std::vector<MSLane*> *bestLanes =
new std::vector<MSLane*>();
295 for (std::vector<MSVehicle::LaneQ>::const_iterator i = bl.begin(); i != bl.end(); ++i) {
296 if ((*i).length == bestLength) {
297 bestLanes->push_back((*i).lane);
334 v.
getID() +
"'. Inserting at lane end instead.");
346 MESegment* segment = MSGlobals::gMesoNet->getSegmentForEdge(*
this, pos);
347 MEVehicle* veh =
static_cast<MEVehicle*
>(&v);
349 while (segment != 0 && !result) {
350 result = segment->initialise(veh, time);
351 segment = segment->getNextSegment();
354 result = segment->initialise(veh, time);
360 return insertionLane != 0 && insertionLane->
insertVehicle(static_cast<MSVehicle&>(v));
375 #ifdef HAVE_INTERNAL_LANES
377 MSEdge::getInternalFollowingEdge(
MSEdge* followerAfterInternal)
const {
379 for (std::vector<MSLane*>::const_iterator i =
myLanes->begin(); i !=
myLanes->end(); ++i) {
382 for (MSLinkCont::const_iterator j = lc.begin(); j != lc.end(); ++j) {
385 return &link->getViaLane()->getEdge();
399 MESegment* first = MSGlobals::gMesoNet->getSegmentForEdge(*
this);
400 unsigned segments = 0;
402 v += first->getMeanSpeed();
403 first = first->getNextSegment();
405 }
while (first != 0);
409 for (std::vector<MSLane*>::iterator i =
myLanes->begin(); i !=
myLanes->end(); ++i) {
410 v += (*i)->getMeanSpeed();
426 DictType::iterator it =
myDict.find(
id);
442 DictType::iterator it =
myDict.find(
id);
466 for (DictType::iterator i =
myDict.begin(); i !=
myDict.end(); ++i) {
475 for (DictType::iterator i =
myDict.begin(); i !=
myDict.end(); ++i) {
476 into.push_back((*i).first);
483 const std::string& rid) {
491 const std::string& rid) {
492 for (std::vector<std::string>::const_iterator i = desc.begin(); i != desc.end(); ++i) {
496 throw ProcessError(
"The edge '" + *i +
"' within the route " + rid +
" is not known."
497 +
"\n The route can not be build.");
499 into.push_back(edge);
506 return getLanes()[0]->getShape()[-1].distanceTo2D(other->
getLanes()[0]->getShape()[0]);
519 return getLanes()[0]->getMaxSpeed();