From 946d2a6928192835840a795d7f6389f4578f9fab Mon Sep 17 00:00:00 2001
From: Romain BERNARD <romain.bernard@uca.fr>
Date: Thu, 19 Sep 2024 19:24:34 +0200
Subject: [PATCH] fix cases where isEntry wasn't used to differentiate transit
 entry/exit

---
 .../Heuristics/MultimodalModularHeuristic.cpp         | 11 ++++++++---
 src/routes/vehicle/SAEVRoute.cpp                      |  7 +++++++
 src/routes/vehicle/SAEVRoute.h                        |  2 ++
 3 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/src/algorithm/Multimodal/Heuristics/MultimodalModularHeuristic.cpp b/src/algorithm/Multimodal/Heuristics/MultimodalModularHeuristic.cpp
index 588ca10..07fbcc0 100644
--- a/src/algorithm/Multimodal/Heuristics/MultimodalModularHeuristic.cpp
+++ b/src/algorithm/Multimodal/Heuristics/MultimodalModularHeuristic.cpp
@@ -109,7 +109,7 @@ MultimodalModularHeuristic::insertBestTransitAccessInRoute(const std::vector<Req
     for(const auto& subreq : accessSubRequestsList) {
         updateSubRequest(baseRequestId, subreq, isEntry);
         SAEVRouteChangelist changeList = BestInsertionHeuristic::tryBestRequestInsertionInActiveVehicle(
-                _route->getEntrySubRequestOrigin(baseRequestId), *_route);
+                _route->getSubRequestOrigin(baseRequestId, isEntry), *_route);
         //If we've found an insertion that doesn't create a vehicle, stop there
         if(changeList.success()) {
             DEBUG_MMH_MSG("ENTRY CANDIDATE SUCCESS : " + subreq.to_string());
@@ -162,8 +162,13 @@ void MultimodalModularHeuristic::updateSubRequest(size_t requestId, const Reques
     else
         _exitSubRequests[requestId] = request;
 
-    _route->getEntrySubRequestOrigin(requestId).setRequest(&getSubrequest(requestId, isEntry));
-    _route->getEntrySubRequestDestination(requestId).setRequest(&getSubrequest(requestId, isEntry));
+    if(isEntry) {
+        _route->getEntrySubRequestOrigin(requestId).setRequest(&getSubrequest(requestId, isEntry));
+        _route->getEntrySubRequestDestination(requestId).setRequest(&getSubrequest(requestId, isEntry));
+    } else {
+        _route->getExitSubRequestOrigin(requestId).setRequest(&getSubrequest(requestId, isEntry));
+        _route->getExitSubRequestDestination(requestId).setRequest(&getSubrequest(requestId, isEntry));
+    }
 }
 
 const Request& MultimodalModularHeuristic::getSubrequest(size_t requestId, bool isEntry) {
diff --git a/src/routes/vehicle/SAEVRoute.cpp b/src/routes/vehicle/SAEVRoute.cpp
index 818a394..8b11c80 100644
--- a/src/routes/vehicle/SAEVRoute.cpp
+++ b/src/routes/vehicle/SAEVRoute.cpp
@@ -565,3 +565,10 @@ SAEVRouteChangelist SAEVRoute::removeRequestWithPropagation(size_t requestId) {
     return removeRequestWithPropagation(getRequestOrigin(requestId));
 }
 
+SAEVKeyPoint &SAEVRoute::getSubRequestOrigin(size_t baseRequestId, bool isEntry) {
+    if(isEntry)
+        return getEntrySubRequestOrigin(baseRequestId);
+    else
+        return getExitSubRequestOrigin(baseRequestId);
+}
+
diff --git a/src/routes/vehicle/SAEVRoute.h b/src/routes/vehicle/SAEVRoute.h
index 39ae4f2..78ddd58 100644
--- a/src/routes/vehicle/SAEVRoute.h
+++ b/src/routes/vehicle/SAEVRoute.h
@@ -231,6 +231,8 @@ public:
      */
     std::string to_string(size_t vehicleId);
     void exportToFile();
+
+    SAEVKeyPoint &getSubRequestOrigin(size_t baseRequestId, bool isEntry);
 };
 
 #include "propagation/SAEVRouteChangelist.h"
-- 
GitLab