Line data Source code
1 : /****************************************************************************/
2 : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 : // Copyright (C) 2002-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 RORoutable.h
15 : /// @author Michael Behrisch
16 : /// @date Oct 2015
17 : ///
18 : // A routable thing such as a vehicle or person
19 : /****************************************************************************/
20 : #pragma once
21 : #include <config.h>
22 :
23 : #include <string>
24 : #include <iostream>
25 : #include <utils/common/StdDefs.h>
26 : #include <utils/common/SUMOTime.h>
27 : #include <utils/router/RouterProvider.h>
28 : #include <utils/vehicle/SUMOVehicleParameter.h>
29 : #include <utils/vehicle/SUMOVTypeParameter.h>
30 :
31 : // ===========================================================================
32 : // class declarations
33 : // ===========================================================================
34 : class OutputDevice;
35 : class ROEdge;
36 : class ROLane;
37 : class RONode;
38 : class ROVehicle;
39 :
40 : typedef std::vector<const ROEdge*> ConstROEdgeVector;
41 : typedef IntermodalRouter<ROEdge, ROLane, RONode, ROVehicle> ROIntermodalRouter;
42 : typedef RouterProvider<ROEdge, ROLane, RONode, ROVehicle> RORouterProvider;
43 :
44 :
45 : // ===========================================================================
46 : // class definitions
47 : // ===========================================================================
48 : /**
49 : * @class RORoutable
50 : * @brief A routable thing such as a vehicle or person
51 : */
52 : class RORoutable {
53 : public:
54 : /** @brief Constructor
55 : *
56 : * @param[in] pars Parameter of this routable
57 : * @param[in] type The type of the routable
58 : */
59 : RORoutable(const SUMOVehicleParameter& pars, const SUMOVTypeParameter* type)
60 153927 : : myParameter(pars), myType(type), myRoutingSuccess(false) {}
61 :
62 :
63 : /// @brief Destructor
64 153927 : virtual ~RORoutable() {}
65 :
66 :
67 : /** @brief Returns the definition of the vehicle / person parameter
68 : *
69 : * @return The vehicle / person's parameter
70 : */
71 : inline const SUMOVehicleParameter& getParameter() const {
72 268212 : return myParameter;
73 : }
74 :
75 :
76 : /** @brief Returns the type of the routable
77 : *
78 : * @return The routable's type
79 : *
80 : * @todo Why not return a reference?
81 : */
82 : inline const SUMOVTypeParameter* getType() const {
83 12973810 : return myType;
84 : }
85 :
86 :
87 : /** @brief Returns the id of the routable
88 : *
89 : * @return The id of the routable
90 : */
91 : inline const std::string& getID() const {
92 153673 : return myParameter.id;
93 : }
94 :
95 :
96 : /** @brief Returns the time the vehicle starts at, -1 for triggered vehicles
97 : *
98 : * @return The vehicle's depart time
99 : */
100 : inline SUMOTime getDepart() const {
101 153289 : return myParameter.depart;
102 : }
103 :
104 : /// @brief update depart time (for triggered persons)
105 : inline void setDepart(SUMOTime t) {
106 : myParameter.depart = t;
107 : }
108 :
109 : inline SUMOVehicleClass getVClass() const {
110 4494846 : return getType() != 0 ? getType()->vehicleClass : SVC_IGNORING;
111 : }
112 :
113 : /** @brief Returns whether this object is ignoring transient permission
114 : * changes (during routing)
115 : */
116 : bool ignoreTransientPermissions() const {
117 : return false;
118 : };
119 :
120 : /// @brief Returns the vehicle's maximum speed
121 6758274 : inline double getMaxSpeed() const {
122 6758274 : return MIN2(getType()->maxSpeed,
123 6758274 : getType()->desiredMaxSpeed * getType()->speedFactor.getParameter()[0]);
124 : }
125 :
126 : virtual const ROEdge* getDepartEdge() const = 0;
127 :
128 :
129 : inline bool isPublicTransport() const {
130 304919 : return myParameter.line != "";
131 : }
132 :
133 : inline bool isPartOfFlow() const {
134 52 : return myParameter.repetitionNumber >= 0;
135 : }
136 :
137 : virtual void computeRoute(const RORouterProvider& provider,
138 : const bool removeLoops, MsgHandler* errorHandler) = 0;
139 :
140 :
141 : /** @brief Saves the routable including the vehicle type (if it was not saved before).
142 : *
143 : * @param[in] os The routes - output device to store the vehicle's description into
144 : * @param[in] altos The route alternatives - output device to store the vehicle's description into
145 : * @param[in] typeos The types - output device to store the vehicle types into
146 : * @exception IOError If something fails (not yet implemented)
147 : */
148 151094 : void write(OutputDevice* os, OutputDevice* const altos,
149 : OutputDevice* const typeos, OptionsCont& options) const {
150 151094 : if (os != nullptr) {
151 151092 : if (altos == nullptr && typeos == nullptr) {
152 26990 : saveAsXML(*os, os, false, options);
153 : } else {
154 124102 : saveAsXML(*os, typeos, false, options);
155 : }
156 : }
157 151094 : if (altos != nullptr) {
158 116888 : saveAsXML(*altos, typeos, true, options);
159 : }
160 151094 : }
161 :
162 :
163 : inline bool getRoutingSuccess() const {
164 153089 : return myRoutingSuccess;
165 : }
166 :
167 :
168 : protected:
169 : /** @brief Saves the complete routable description.
170 : *
171 : * Saves the routable itself including the route and stops.
172 : *
173 : * @param[in] os The routes or alternatives output device to store the routable's description into
174 : * @param[in] typeos The types - output device to store additional types into
175 : * @param[in] asAlternatives Whether the route shall be saved as route alternatives
176 : * @param[in] options to find out about defaults and whether exit times for the edges shall be written
177 : * @exception IOError If something fails (not yet implemented)
178 : */
179 : virtual void saveAsXML(OutputDevice& os, OutputDevice* const typeos, bool asAlternatives, OptionsCont& options) const = 0;
180 :
181 :
182 : private:
183 : /// @brief The vehicle's parameter
184 : SUMOVehicleParameter myParameter;
185 :
186 : /// @brief The type of the vehicle
187 : const SUMOVTypeParameter* const myType;
188 :
189 : protected:
190 : /// @brief Whether the last routing was successful
191 : bool myRoutingSuccess;
192 :
193 :
194 : private:
195 : /// @brief Invalidated copy constructor
196 : RORoutable(const RORoutable& src);
197 :
198 : /// @brief Invalidated assignment operator
199 : RORoutable& operator=(const RORoutable& src);
200 :
201 : };
|