Skip to content

Commit

Permalink
forwarding params on trip expansion and cloning #14198
Browse files Browse the repository at this point in the history
  • Loading branch information
behrisch committed Jan 12, 2024
1 parent 774437b commit 0c92dc1
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 20 deletions.
4 changes: 3 additions & 1 deletion src/microsim/transportables/MSPerson.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,9 @@ MSPerson::MSPersonStage_Walking::clone() const {
departLane = route[0]->getNumLanes() - 1;
}
}
return new MSPersonStage_Walking("dummyID", route, myDestinationStop, myWalkingTime, mySpeed, departPos, arrivalPos, myDepartPosLat, departLane, myRouteID);
MSStage* clon = new MSPersonStage_Walking("dummyID", route, myDestinationStop, myWalkingTime, mySpeed, departPos, arrivalPos, myDepartPosLat, departLane, myRouteID);
clon->setParameters(*this);
return clon;
}


Expand Down
7 changes: 5 additions & 2 deletions src/microsim/transportables/MSStageDriving.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,11 @@ MSStageDriving::MSStageDriving(const MSEdge* origin, const MSEdge* destination,

MSStage*
MSStageDriving::clone() const {
return new MSStageDriving(myOrigin, myDestination, myDestinationStop, myArrivalPos, std::vector<std::string>(myLines.begin(), myLines.end()),
myGroup, myIntendedVehicleID, myIntendedDepart);
MSStage* const clon = new MSStageDriving(myOrigin, myDestination, myDestinationStop, myArrivalPos,
std::vector<std::string>(myLines.begin(), myLines.end()),
myGroup, myIntendedVehicleID, myIntendedDepart);
clon->setParameters(*this);
return clon;
}


Expand Down
4 changes: 3 additions & 1 deletion src/microsim/transportables/MSStageTranship.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ MSStageTranship::~MSStageTranship() {

MSStage*
MSStageTranship::clone() const {
return new MSStageTranship(myRoute, myDestinationStop, mySpeed, myDepartPos, myArrivalPos);
MSStage* const clon = new MSStageTranship(myRoute, myDestinationStop, mySpeed, myDepartPos, myArrivalPos);
clon->setParameters(*this);
return clon;
}


Expand Down
21 changes: 18 additions & 3 deletions src/microsim/transportables/MSStageTrip.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,12 @@ MSStageTrip::~MSStageTrip() {}

MSStage*
MSStageTrip::clone() const {
return new MSStageTrip(myOrigin, const_cast<MSStoppingPlace*>(myOriginStop),
myDestination, myDestinationStop, myDuration,
myModeSet, myVTypes, mySpeed, myWalkFactor, myGroup, myDepartPosLat, myHaveArrivalPos, myArrivalPos);
MSStage* const clon = new MSStageTrip(myOrigin, const_cast<MSStoppingPlace*>(myOriginStop),
myDestination, myDestinationStop, myDuration,
myModeSet, myVTypes, mySpeed, myWalkFactor, myGroup,
myDepartPosLat, myHaveArrivalPos, myArrivalPos);
clon->setParameters(*this);
return clon;
}


Expand Down Expand Up @@ -230,6 +233,9 @@ MSStageTrip::setArrived(MSNet* net, MSTransportable* transportable, SUMOTime now
}
}
previous = new MSPerson::MSPersonStage_Walking(transportable->getID(), it->edges, bs, myDuration, mySpeed, depPos, localArrivalPos, myDepartPosLat);
if (knowsParameter("pushParam")) {
previous->setParameters(*this);
}
transportable->appendStage(previous, stageIndex++);
} else if (isTaxi) {
const ConstMSEdgeVector& prevEdges = previous->getEdges();
Expand All @@ -245,13 +251,19 @@ MSStageTrip::setArrived(MSNet* net, MSTransportable* transportable, SUMOTime now
}
}
previous = new MSStageDriving(rideOrigin, it->edges.back(), bs, localArrivalPos, std::vector<std::string>({ "taxi" }), myGroup);
if (knowsParameter("pushParam")) {
previous->setParameters(*this);
}
transportable->appendStage(previous, stageIndex++);
} else if (vehicle != nullptr && it->line == vehicle->getID()) {
if (bs == nullptr && it + 1 != result.end()) {
// we have no defined endpoint and are in the middle of the trip, drive as far as possible
localArrivalPos = it->edges.back()->getLength();
}
previous = new MSStageDriving(rideOrigin, it->edges.back(), bs, localArrivalPos, std::vector<std::string>({ it->line }));
if (knowsParameter("pushParam")) {
previous->setParameters(*this);
}
transportable->appendStage(previous, stageIndex++);
vehicle->replaceRouteEdges(it->edges, -1, 0, "person:" + transportable->getID(), true);
vehicle->setArrivalPos(localArrivalPos);
Expand All @@ -260,6 +272,9 @@ MSStageTrip::setArrived(MSNet* net, MSTransportable* transportable, SUMOTime now
carUsed = true;
} else {
previous = new MSStageDriving(rideOrigin, it->edges.back(), bs, localArrivalPos, std::vector<std::string>({ it->line }), myGroup, it->intended, TIME2STEPS(it->depart));
if (knowsParameter("pushParam")) {
previous->setParameters(*this);
}
transportable->appendStage(previous, stageIndex++);
}
}
Expand Down
5 changes: 4 additions & 1 deletion src/microsim/transportables/MSStageWaiting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,10 @@ MSStageWaiting::~MSStageWaiting() {}

MSStage*
MSStageWaiting::clone() const {
return new MSStageWaiting(myDestination, myDestinationStop, myWaitingDuration, myWaitingUntil, myArrivalPos, myActType, myType == MSStageType::WAITING_FOR_DEPART);
MSStage* const clon = new MSStageWaiting(myDestination, myDestinationStop, myWaitingDuration, myWaitingUntil, myArrivalPos,
myActType, myType == MSStageType::WAITING_FOR_DEPART);
clon->setParameters(*this);
return clon;
}

SUMOTime
Expand Down
14 changes: 2 additions & 12 deletions src/utils/common/Parameterised.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -146,23 +146,13 @@ Parameterised::getParametersStr(const std::string kvsep, const std::string sep)

void
Parameterised::setParameters(const Parameterised& params) {
// first clear map
myMap.clear();
// set parameter
for (const auto& keyValue : params.getParametersMap()) {
setParameter(keyValue.first, keyValue.second);
}
myMap = params.getParametersMap();
}


void
Parameterised::setParametersMap(const Parameterised::Map& paramsMap) {
// first clear map
myMap.clear();
// set parameter
for (const auto& keyValue : paramsMap) {
setParameter(keyValue.first, keyValue.second);
}
myMap = paramsMap;
}


Expand Down

0 comments on commit 0c92dc1

Please sign in to comment.