Line data Source code
1 : /****************************************************************************/
2 : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 : // Copyright (C) 2001-2024 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 MSStageTranship.h
15 : /// @author Melanie Weber
16 : /// @author Andreas Kendziorra
17 : /// @date Thu, 12 Jun 2014
18 : ///
19 : // The class for modelling container-movements
20 : /****************************************************************************/
21 : #pragma once
22 : #include <config.h>
23 :
24 : #include <string>
25 : #include <vector>
26 : #include <set>
27 : #include <utils/common/SUMOTime.h>
28 : #include <utils/common/Command.h>
29 : #include <utils/geom/Position.h>
30 : #include <utils/geom/PositionVector.h>
31 : #include <microsim/transportables/MSTransportable.h>
32 :
33 :
34 : // ===========================================================================
35 : // class declarations
36 : // ===========================================================================
37 : class MSNet;
38 : class MSEdge;
39 : class MSLane;
40 : class OutputDevice;
41 : class SUMOVehicleParameter;
42 : class MSStoppingPlace;
43 : class SUMOVehicle;
44 : class MSVehicleType;
45 : class MSCModel_NonInteracting;
46 : class CState;
47 :
48 :
49 : // ===========================================================================
50 : // class definitions
51 : // ===========================================================================
52 : /**
53 : * A "real" stage performing the tranship of a container
54 : * A container is in this stage if it gets transhiped between two stops that are
55 : * assumed to be connected.
56 : */
57 : class MSStageTranship : public MSStageMoving {
58 :
59 : public:
60 : /// constructor
61 : MSStageTranship(const std::vector<const MSEdge*>& route, MSStoppingPlace* toStop, double speed, double departPos, double arrivalPos);
62 :
63 : /// destructor
64 : ~MSStageTranship();
65 :
66 : MSStage* clone() const;
67 :
68 : /// proceeds to the next step
69 : void proceed(MSNet* net, MSTransportable* transportable, SUMOTime now, MSStage* previous);
70 :
71 : /// @brief get travel distance in this stage
72 : double getDistance() const;
73 :
74 : /// Returns the current stage description as a string
75 0 : std::string getStageDescription(const bool isPerson) const {
76 : UNUSED_PARAMETER(isPerson);
77 0 : return "tranship";
78 : }
79 : std::string getStageSummary(const bool isPerson) const;
80 :
81 : /** @brief Called on writing tripinfo output
82 : * @param[in] os The stream to write the information into
83 : * @exception IOError not yet implemented
84 : */
85 : void tripInfoOutput(OutputDevice& os, const MSTransportable* const transportable) const;
86 :
87 : /** @brief Called on writing vehroute output
88 : * @param[in] isPerson Whether we are writing person or container info
89 : * @param[in] os The stream to write the information into
90 : * @param[in] withRouteLength whether route length shall be written
91 : * @param[in] previous The previous stage for additional info such as from edge
92 : * @exception IOError not yet implemented
93 : */
94 : void routeOutput(const bool isPerson, OutputDevice& os, const bool withRouteLength, const MSStage* const previous) const;
95 :
96 : /// @brief move forward and return whether the container arrived
97 : bool moveToNextEdge(MSTransportable* container, SUMOTime currentTime, int prevDir, MSEdge* nextInternal = nullptr, const bool isReplay = false);
98 :
99 :
100 : /// @brief the maximum speed of the transportable
101 260547 : inline double getMaxSpeed(const MSTransportable* const transportable = nullptr) const {
102 : UNUSED_PARAMETER(transportable);
103 260547 : return mySpeed;
104 : }
105 :
106 130311 : inline double getArrivalPos() const {
107 130311 : return myArrivalPos;
108 : }
109 :
110 0 : inline const MSEdge* getNextRouteEdge() const {
111 0 : return myRouteStep == myRoute.end() - 1 ? 0 : *(myRouteStep + 1);
112 : }
113 :
114 : private:
115 : /// @brief Invalidated copy constructor.
116 : MSStageTranship(const MSStageTranship&);
117 :
118 : /// @brief Invalidated assignment operator.
119 : MSStageTranship& operator=(const MSStageTranship&);
120 :
121 : };
|