LCOV - code coverage report
Current view: top level - src/microsim/transportables - MSStage.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 89.9 % 69 62
Test Date: 2026-04-16 16:39:47 Functions: 84.6 % 26 22

            Line data    Source code
       1              : /****************************************************************************/
       2              : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3              : // Copyright (C) 2001-2026 German Aerospace Center (DLR) and others.
       4              : // This program and the accompanying materials are made available under the
       5              : // terms of the Eclipse Public License 2.0 which is available at
       6              : // https://www.eclipse.org/legal/epl-2.0/
       7              : // This Source Code may also be made available under the following Secondary
       8              : // Licenses when the conditions for such availability set forth in the Eclipse
       9              : // Public License 2.0 are satisfied: GNU General Public License, version 2
      10              : // or later which is available at
      11              : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
      12              : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
      13              : /****************************************************************************/
      14              : /// @file    MSStage.cpp
      15              : /// @author  Melanie Weber
      16              : /// @author  Andreas Kendziorra
      17              : /// @author  Michael Behrisch
      18              : /// @date    Thu, 12 Jun 2014
      19              : ///
      20              : // The common superclass for modelling transportable objects like persons and containers
      21              : /****************************************************************************/
      22              : #include <config.h>
      23              : 
      24              : #include <utils/vehicle/SUMOVehicleParameter.h>
      25              : #include <microsim/MSEdge.h>
      26              : #include <microsim/MSLane.h>
      27              : #include <microsim/MSNet.h>
      28              : #include <microsim/MSStoppingPlace.h>
      29              : #include <microsim/devices/MSTransportableDevice.h>
      30              : #include <microsim/transportables/MSTransportableControl.h>
      31              : #include <microsim/transportables/MSTransportable.h>
      32              : #include <microsim/transportables/MSPModel.h>
      33              : 
      34              : 
      35              : /* -------------------------------------------------------------------------
      36              : * static member definitions
      37              : * ----------------------------------------------------------------------- */
      38              : const double MSStage::ARRIVALPOS_UNSPECIFIED(std::numeric_limits<double>::infinity());
      39              : const double MSStage::ROADSIDE_OFFSET(3);
      40              : 
      41              : // ===========================================================================
      42              : // method definitions
      43              : // ===========================================================================
      44              : /* -------------------------------------------------------------------------
      45              :  * MSStage - methods
      46              :  * ----------------------------------------------------------------------- */
      47      1171167 : MSStage::MSStage(MSStageType type, const MSEdge* destination, MSStoppingPlace* toStop, const double arrivalPos,
      48      1171167 :                  const double arrivalPosLat, const std::string& group) :
      49      1171167 :     myDestination(destination),
      50      1171167 :     myDestinationStop(toStop),
      51      1171167 :     myArrivalPos(arrivalPos),
      52      1171167 :     myArrivalPosLat(arrivalPosLat),
      53      1171167 :     myDeparted(-1),
      54      1171167 :     myArrived(-1),
      55      1171167 :     myType(type),
      56      1171167 :     myGroup(group),
      57      1171167 :     myCosts(-1),
      58      1171167 :     myParametersSet(0)
      59      1171167 : {}
      60              : 
      61      1171057 : MSStage::~MSStage() {}
      62              : 
      63              : 
      64              : const MSEdge*
      65     52189501 : MSStage::getDestination() const {
      66     52189501 :     return myDestination;
      67              : }
      68              : 
      69              : 
      70              : const MSEdge*
      71       673769 : MSStage::getEdge() const {
      72       673769 :     return myDestination;
      73              : }
      74              : 
      75              : 
      76              : const MSEdge*
      77           97 : MSStage::getFromEdge() const {
      78           97 :     return myDestination;
      79              : }
      80              : 
      81              : 
      82              : double
      83       466170 : MSStage::getEdgePos(SUMOTime /* now */) const {
      84       466170 :     return myArrivalPos;
      85              : }
      86              : 
      87              : 
      88              : double
      89            0 : MSStage::getEdgePosLat(SUMOTime /* now */) const {
      90            0 :     return myArrivalPosLat;
      91              : }
      92              : 
      93              : 
      94              : int
      95            0 : MSStage::getDirection() const {
      96            0 :     return MSPModel::UNDEFINED_DIRECTION;
      97              : }
      98              : 
      99              : 
     100              : double
     101        12752 : MSStage::getSpeed() const {
     102        12752 :     return 0.;
     103              : }
     104              : 
     105              : 
     106              : ConstMSEdgeVector
     107          342 : MSStage::getEdges() const {
     108              :     ConstMSEdgeVector result;
     109          342 :     result.push_back(getDestination());
     110          342 :     return result;
     111            0 : }
     112              : 
     113              : 
     114              : void
     115       464348 : MSStage::setDeparted(SUMOTime now) {
     116       464348 :     if (myDeparted < 0) {
     117       460940 :         myDeparted = now;
     118              :     }
     119       464348 : }
     120              : 
     121              : SUMOTime
     122       526093 : MSStage::getDeparted() const {
     123       526093 :     return myDeparted;
     124              : }
     125              : 
     126              : SUMOTime
     127          882 : MSStage::getArrived() const {
     128          882 :     return myArrived;
     129              : }
     130              : 
     131              : 
     132              : SUMOTime
     133       234308 : MSStage::getDuration() const {
     134       234308 :     return myArrived >= 0 ? myArrived - myDeparted : SUMOTime_MAX;
     135              : }
     136              : 
     137              : 
     138              : SUMOTime
     139        58831 : MSStage::getTravelTime() const {
     140        58831 :     return getDuration();
     141              : }
     142              : 
     143              : SUMOTime
     144        71501 : MSStage::getWaitingTime() const {
     145        71501 :     return 0;
     146              : }
     147              : 
     148              : SUMOTime
     149        78981 : MSStage::getTotalWaitingTime() const {
     150        78981 :     return getWaitingTime();
     151              : }
     152              : 
     153              : SUMOTime
     154        71965 : MSStage::getTimeLoss(const MSTransportable* /*transportable*/) const {
     155        71965 :     return 0;
     156              : }
     157              : 
     158              : 
     159              : const std::string
     160      1055116 : MSStage::setArrived(MSNet* /* net */, MSTransportable* /* transportable */, SUMOTime now, const bool /* vehicleArrived */) {
     161      1055116 :     myArrived = now;
     162      1055116 :     return "";
     163              : }
     164              : 
     165              : bool
     166            0 : MSStage::isWaitingFor(const SUMOVehicle* /*vehicle*/) const {
     167            0 :     return false;
     168              : }
     169              : 
     170              : Position
     171       320559 : MSStage::getEdgePosition(const MSEdge* e, double at, double offset) const {
     172       320559 :     return getLanePosition(e->getLanes()[0], at, offset);
     173              : }
     174              : 
     175              : Position
     176      9610253 : MSStage::getLanePosition(const MSLane* lane, double at, double offset) const {
     177      9610253 :     return lane->getShape().positionAtOffset(lane->interpolateLanePosToGeometryPos(at), offset);
     178              : }
     179              : 
     180              : 
     181              : double
     182      4298960 : MSStage::getEdgeAngle(const MSEdge* e, double at) const {
     183      4298960 :     return e->getLanes()[0]->getShape().rotationAtOffset(at);
     184              : }
     185              : 
     186              : 
     187              : void
     188           56 : MSStage::setDestination(const MSEdge* newDestination, MSStoppingPlace* newDestStop) {
     189           56 :     myDestination = newDestination;
     190           56 :     myDestinationStop = newDestStop;
     191           56 :     if (newDestStop != nullptr) {
     192           49 :         myArrivalPos = (newDestStop->getBeginLanePosition() + newDestStop->getEndLanePosition()) / 2;
     193              :     }
     194           56 : }
     195              : 
     196              : bool
     197       303982 : MSStage::unspecifiedArrivalPos() const {
     198       303982 :     return myArrivalPos == ARRIVALPOS_UNSPECIFIED;
     199              : }
     200              : 
     201              : 
     202              : 
     203              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1