Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/router/RORoutable.h
169666 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2002-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 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
: myParameter(pars), myType(type), myRoutingSuccess(false) {}
61
62
63
/// @brief Destructor
64
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
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
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
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
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
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
inline double getMaxSpeed() const {
122
return MIN2(getType()->maxSpeed,
123
getType()->desiredMaxSpeed * getType()->speedFactor.getParameter(0));
124
}
125
126
virtual const ROEdge* getDepartEdge() const = 0;
127
128
129
inline bool isPublicTransport() const {
130
return myParameter.line != "";
131
}
132
133
inline bool isPartOfFlow() const {
134
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
void write(OutputDevice* os, OutputDevice* const altos,
149
OutputDevice* const typeos, OptionsCont& options, int quota) const {
150
for (int i = 0; i < quota; i++) {
151
if (os != nullptr) {
152
if (altos == nullptr && typeos == nullptr) {
153
saveAsXML(*os, os, false, options, i);
154
} else {
155
saveAsXML(*os, typeos, false, options, i);
156
}
157
}
158
if (altos != nullptr) {
159
saveAsXML(*altos, typeos, true, options, i);
160
}
161
}
162
}
163
164
165
inline bool getRoutingSuccess() const {
166
return myRoutingSuccess;
167
}
168
169
170
protected:
171
/** @brief Saves the complete routable description.
172
*
173
* Saves the routable itself including the route and stops.
174
*
175
* @param[in] os The routes or alternatives output device to store the routable's description into
176
* @param[in] typeos The types - output device to store additional types into
177
* @param[in] asAlternatives Whether the route shall be saved as route alternatives
178
* @param[in] options to find out about defaults and whether exit times for the edges shall be written
179
* @exception IOError If something fails (not yet implemented)
180
*/
181
virtual void saveAsXML(OutputDevice& os, OutputDevice* const typeos, bool asAlternatives, OptionsCont& options, int cloneIndex = 0) const = 0;
182
183
184
private:
185
/// @brief The vehicle's parameter
186
SUMOVehicleParameter myParameter;
187
188
/// @brief The type of the vehicle
189
const SUMOVTypeParameter* const myType;
190
191
protected:
192
/// @brief Whether the last routing was successful
193
bool myRoutingSuccess;
194
195
196
private:
197
/// @brief Invalidated copy constructor
198
RORoutable(const RORoutable& src);
199
200
/// @brief Invalidated assignment operator
201
RORoutable& operator=(const RORoutable& src);
202
203
};
204
205