@@ -52,7 +52,6 @@ namespace dsm {
5252
5353 protected:
5454 std::vector<std::pair<double , double >> m_travelDTs;
55- std::unordered_map<Id, Id> m_agentNextStreetId;
5655 bool m_forcePriorities;
5756 std::optional<delay_t > m_dataUpdatePeriod;
5857 std::unordered_map<Id, std::array<unsigned long long , 4 >> m_turnCounts;
@@ -306,7 +305,6 @@ namespace dsm {
306305 bool bArrived{false };
307306 if (!bCanPass) {
308307 if (pAgent->isRandom ()) {
309- m_agentNextStreetId.erase (agentId);
310308 bArrived = true ;
311309 } else {
312310 continue ;
@@ -331,7 +329,8 @@ namespace dsm {
331329 }
332330 continue ;
333331 }
334- auto const & nextStreet{this ->m_graph .streetSet ()[m_agentNextStreetId[agentId]]};
332+ auto const & nextStreet{
333+ this ->m_graph .street (this ->agents ().at (agentId)->nextStreetId ().value ())};
335334 if (nextStreet->isFull ()) {
336335 continue ;
337336 }
@@ -360,7 +359,8 @@ namespace dsm {
360359 return false ;
361360 }
362361 for (auto const [angle, agentId] : intersection.agents ()) {
363- auto const & nextStreet{this ->m_graph .streetSet ()[m_agentNextStreetId[agentId]]};
362+ auto const & nextStreet{
363+ this ->m_graph .street (this ->agents ().at (agentId)->nextStreetId ().value ())};
364364 if (nextStreet->isFull ()) {
365365 if (m_forcePriorities) {
366366 return false ;
@@ -373,7 +373,6 @@ namespace dsm {
373373 this ->agents ().at (agentId)->incrementDelay (
374374 std::ceil (nextStreet->length () / this ->agents ().at (agentId)->speed ()));
375375 nextStreet->addAgent (agentId);
376- m_agentNextStreetId.erase (agentId);
377376 return true ;
378377 }
379378 return false ;
@@ -383,7 +382,8 @@ namespace dsm {
383382 return false ;
384383 }
385384 auto const agentId{roundabout.agents ().front ()};
386- auto const & nextStreet{this ->m_graph .streetSet ()[m_agentNextStreetId[agentId]]};
385+ auto const & nextStreet{
386+ this ->m_graph .street (this ->agents ().at (agentId)->nextStreetId ().value ())};
387387 if (!(nextStreet->isFull ())) {
388388 if (this ->agents ().at (agentId)->streetId ().has_value ()) {
389389 const auto streetId = this ->agents ().at (agentId)->streetId ().value ();
@@ -401,7 +401,6 @@ namespace dsm {
401401 this ->agents ().at (agentId)->incrementDelay (
402402 std::ceil (nextStreet->length () / this ->agents ().at (agentId)->speed ()));
403403 nextStreet->addAgent (agentId);
404- m_agentNextStreetId.erase (agentId);
405404 } else {
406405 return false ;
407406 }
@@ -448,8 +447,8 @@ namespace dsm {
448447 } else {
449448 auto const nextStreetId =
450449 this ->m_nextStreetId (agentId, street->nodePair ().second , street->id ());
451- auto const & pNextStreet{this ->m_graph .streetSet ()[ nextStreetId] };
452- m_agentNextStreetId. emplace (agentId, nextStreetId);
450+ auto const & pNextStreet{this ->m_graph .street ( nextStreetId) };
451+ agent-> setNextStreetId ( nextStreetId);
453452 if (nLanes == 1 ) {
454453 street->enqueue (agentId, 0 );
455454 } else {
@@ -490,8 +489,7 @@ namespace dsm {
490489 }
491490 }
492491 }
493- } else if (!agent->streetId ().has_value () &&
494- !m_agentNextStreetId.contains (agentId)) {
492+ } else if (!agent->streetId ().has_value () && !agent->nextStreetId ().has_value ()) {
495493 Id srcNodeId = agent->srcNodeId ().has_value () ? agent->srcNodeId ().value ()
496494 : nodeDist (this ->m_generator );
497495 const auto & srcNode{this ->m_graph .nodeSet ()[srcNodeId]};
@@ -511,7 +509,7 @@ namespace dsm {
511509 auto & roundabout = dynamic_cast <Roundabout&>(*srcNode);
512510 roundabout.enqueue (agentId);
513511 }
514- m_agentNextStreetId. emplace (agentId, nextStreet->id ());
512+ agent-> setNextStreetId ( nextStreet->id ());
515513 } else if (agent->delay () == 0 ) {
516514 agent->setSpeed (0 .);
517515 }
0 commit comments