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: 2025-12-06 15:35:27 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-2025 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      1298497 : MSStage::MSStage(MSStageType type, const MSEdge* destination, MSStoppingPlace* toStop, const double arrivalPos,
      48      1298497 :                  const double arrivalPosLat, const std::string& group) :
      49      1298497 :     myDestination(destination),
      50      1298497 :     myDestinationStop(toStop),
      51      1298497 :     myArrivalPos(arrivalPos),
      52      1298497 :     myArrivalPosLat(arrivalPosLat),
      53      1298497 :     myDeparted(-1),
      54      1298497 :     myArrived(-1),
      55      1298497 :     myType(type),
      56      1298497 :     myGroup(group),
      57      1298497 :     myCosts(-1),
      58      1298497 :     myParametersSet(0)
      59      1298497 : {}
      60              : 
      61      1298313 : MSStage::~MSStage() {}
      62              : 
      63              : 
      64              : const MSEdge*
      65     66346063 : MSStage::getDestination() const {
      66     66346063 :     return myDestination;
      67              : }
      68              : 
      69              : 
      70              : const MSEdge*
      71       776650 : MSStage::getEdge() const {
      72       776650 :     return myDestination;
      73              : }
      74              : 
      75              : 
      76              : const MSEdge*
      77           96 : MSStage::getFromEdge() const {
      78           96 :     return myDestination;
      79              : }
      80              : 
      81              : 
      82              : double
      83       481127 : MSStage::getEdgePos(SUMOTime /* now */) const {
      84       481127 :     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         8388 : MSStage::getSpeed() const {
     102         8388 :     return 0.;
     103              : }
     104              : 
     105              : 
     106              : ConstMSEdgeVector
     107          312 : MSStage::getEdges() const {
     108              :     ConstMSEdgeVector result;
     109          312 :     result.push_back(getDestination());
     110          312 :     return result;
     111            0 : }
     112              : 
     113              : 
     114              : void
     115       500325 : MSStage::setDeparted(SUMOTime now) {
     116       500325 :     if (myDeparted < 0) {
     117       496887 :         myDeparted = now;
     118              :     }
     119       500325 : }
     120              : 
     121              : SUMOTime
     122       484149 : MSStage::getDeparted() const {
     123       484149 :     return myDeparted;
     124              : }
     125              : 
     126              : SUMOTime
     127          876 : MSStage::getArrived() const {
     128          876 :     return myArrived;
     129              : }
     130              : 
     131              : 
     132              : SUMOTime
     133       233203 : MSStage::getDuration() const {
     134       233203 :     return myArrived >= 0 ? myArrived - myDeparted : SUMOTime_MAX;
     135              : }
     136              : 
     137              : 
     138              : SUMOTime
     139        58569 : MSStage::getTravelTime() const {
     140        58569 :     return getDuration();
     141              : }
     142              : 
     143              : SUMOTime
     144        70658 : MSStage::getWaitingTime() const {
     145        70658 :     return 0;
     146              : }
     147              : 
     148              : SUMOTime
     149        77586 : MSStage::getTotalWaitingTime() const {
     150        77586 :     return getWaitingTime();
     151              : }
     152              : 
     153              : SUMOTime
     154        71122 : MSStage::getTimeLoss(const MSTransportable* /*transportable*/) const {
     155        71122 :     return 0;
     156              : }
     157              : 
     158              : 
     159              : const std::string
     160      1148633 : MSStage::setArrived(MSNet* /* net */, MSTransportable* /* transportable */, SUMOTime now, const bool /* vehicleArrived */) {
     161      1148633 :     myArrived = now;
     162      1148633 :     return "";
     163              : }
     164              : 
     165              : bool
     166            0 : MSStage::isWaitingFor(const SUMOVehicle* /*vehicle*/) const {
     167            0 :     return false;
     168              : }
     169              : 
     170              : Position
     171       299897 : MSStage::getEdgePosition(const MSEdge* e, double at, double offset) const {
     172       299897 :     return getLanePosition(e->getLanes()[0], at, offset);
     173              : }
     174              : 
     175              : Position
     176      1843082 : MSStage::getLanePosition(const MSLane* lane, double at, double offset) const {
     177      1843082 :     return lane->getShape().positionAtOffset(lane->interpolateLanePosToGeometryPos(at), offset);
     178              : }
     179              : 
     180              : 
     181              : double
     182       482647 : MSStage::getEdgeAngle(const MSEdge* e, double at) const {
     183       482647 :     return e->getLanes()[0]->getShape().rotationAtOffset(at);
     184              : }
     185              : 
     186              : 
     187              : void
     188           57 : MSStage::setDestination(const MSEdge* newDestination, MSStoppingPlace* newDestStop) {
     189           57 :     myDestination = newDestination;
     190           57 :     myDestinationStop = newDestStop;
     191           57 :     if (newDestStop != nullptr) {
     192           50 :         myArrivalPos = (newDestStop->getBeginLanePosition() + newDestStop->getEndLanePosition()) / 2;
     193              :     }
     194           57 : }
     195              : 
     196              : bool
     197       265447 : MSStage::unspecifiedArrivalPos() const {
     198       265447 :     return myArrivalPos == ARRIVALPOS_UNSPECIFIED;
     199              : }
     200              : 
     201              : 
     202              : 
     203              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1