Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/utils/handlers/RouteHandler.h
169678 views
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 RouteHandler.h
15
/// @author Pablo Alvarez Lopez
16
/// @date Jun 2021
17
///
18
// The XML-Handler for route elements loading
19
/****************************************************************************/
20
#pragma once
21
#include <config.h>
22
23
#include "CommonHandler.h"
24
25
// ===========================================================================
26
// class definitions
27
// ===========================================================================
28
29
class RouteHandler : public CommonHandler {
30
31
public:
32
/**@brief Constructor
33
* @param[in] filename Name of the parsed file
34
* @param[in] hardFail enable or disable hardFails (continue handling demand elements if there is an error)
35
*/
36
RouteHandler(const std::string& filename, const bool hardFail);
37
38
/// @brief Destructor
39
virtual ~RouteHandler();
40
41
/// @brief begin parse attributes
42
bool beginParseAttributes(SumoXMLTag tag, const SUMOSAXAttributes& attrs);
43
44
/// @brief end parse attributes
45
void endParseAttributes();
46
47
/// @brief parse SumoBaseObject (it's called recursivelly)
48
void parseSumoBaseObject(CommonXMLStructure::SumoBaseObject* obj);
49
50
/// @brief run post parser tasks
51
virtual bool postParserTasks() = 0;
52
53
/// @name build functions
54
/// @{
55
56
/// @brief build vType
57
virtual bool buildVType(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVTypeParameter& vTypeParameter) = 0;
58
59
/// @brief build vType ref
60
virtual bool buildVTypeRef(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& vTypeID, const double probability) = 0;
61
62
/// @brief build vType distribution
63
virtual bool buildVTypeDistribution(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const int deterministic) = 0;
64
65
/// @brief build route
66
virtual bool buildRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, SUMOVehicleClass vClass,
67
const std::vector<std::string>& edgeIDs, const RGBColor& color, const int repeat, const SUMOTime cycleTime,
68
const double probability, const Parameterised::Map& routeParameters) = 0;
69
70
/// @brief build route ref
71
virtual bool buildRouteRef(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& routeID, const double probability) = 0;
72
73
/// @brief build route distribution
74
virtual bool buildRouteDistribution(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id) = 0;
75
76
/// @brief build a vehicle over an existent route
77
virtual bool buildVehicleOverRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters) = 0;
78
79
/// @brief build a vehicle with an embedded route
80
virtual bool buildVehicleEmbeddedRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
81
const std::vector<std::string>& edgeIDs, const RGBColor& color, const int repeat, const SUMOTime cycleTime,
82
const Parameterised::Map& routeParameters) = 0;
83
84
/// @brief build a flow over an existent route
85
virtual bool buildFlowOverRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters) = 0;
86
87
/// @brief build a flow with an embedded route
88
virtual bool buildFlowEmbeddedRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
89
const std::vector<std::string>& edgeIDs, const RGBColor& color, const int repeat, const SUMOTime cycleTime,
90
const Parameterised::Map& routeParameters) = 0;
91
92
/// @brief build trip (from-to edges)
93
virtual bool buildTrip(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
94
const std::string& fromEdgeID, const std::string& toEdgeID) = 0;
95
96
/// @brief build trip (from-to junctions)
97
virtual bool buildTripJunctions(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
98
const std::string& fromJunctionID, const std::string& toJunctionID) = 0;
99
100
/// @brief build trip (from-to TAZs)
101
virtual bool buildTripTAZs(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
102
const std::string& fromTazID, const std::string& toTazID) = 0;
103
104
/// @brief build flow (from-to edges)
105
virtual bool buildFlow(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
106
const std::string& fromEdgeID, const std::string& toEdgeID) = 0;
107
108
/// @brief build flow (from-to junctions)
109
virtual bool buildFlowJunctions(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
110
const std::string& fromJunctionID, const std::string& toJunctionID) = 0;
111
112
/// @brief build flow (from-to TAZs)
113
virtual bool buildFlowTAZs(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
114
const std::string& fromTAZID, const std::string& toTAZID) = 0;
115
116
/// @brief build person
117
virtual bool buildPerson(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& personParameters) = 0;
118
119
/// @brief build person flow
120
virtual bool buildPersonFlow(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& personFlowParameters) = 0;
121
122
/// @brief build person trip
123
virtual bool buildPersonTrip(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
124
const double arrivalPos, const std::vector<std::string>& types, const std::vector<std::string>& modes,
125
const std::vector<std::string>& lines, const double walkFactor, const std::string& group) = 0;
126
127
/// @brief build walk
128
virtual bool buildWalk(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
129
const double arrivalPos, const double speed, const SUMOTime duration) = 0;
130
131
/// @brief build ride
132
virtual bool buildRide(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
133
const double arrivalPos, const std::vector<std::string>& lines, const std::string& group) = 0;
134
135
/// @brief build container
136
virtual bool buildContainer(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& containerParameters) = 0;
137
138
/// @brief build container flow
139
virtual bool buildContainerFlow(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& containerFlowParameters) = 0;
140
141
/// @brief build transport
142
virtual bool buildTransport(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
143
const double arrivalPos, const std::vector<std::string>& lines, const std::string& group) = 0;
144
145
/// @brief build tranship
146
virtual bool buildTranship(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
147
const double arrivalPosition, const double departPosition, const double speed, const SUMOTime duration) = 0;
148
149
/// @brief build stop
150
virtual bool buildStop(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
151
const SUMOVehicleParameter::Stop& stopParameters) = 0;
152
153
/// @}
154
155
private:
156
/// @brief enable or disable hardFail (stop parsing if parameter aren't correct)
157
const bool myHardFail;
158
159
/// @brief The default value for flow begins
160
SUMOTime myFlowBeginDefault;
161
162
/// @brief The default value for flow ends
163
SUMOTime myFlowEndDefault;
164
165
/// @name parse route element attributes
166
/// @{
167
/// @brief parse vType
168
void parseVType(const SUMOSAXAttributes& attrs);
169
170
/// @brief parse vType reference
171
void parseVTypeRef(const SUMOSAXAttributes& attrs);
172
173
/// @brief parse vType distribution
174
void parseVTypeDistribution(const SUMOSAXAttributes& attrs);
175
176
/// @brief parse route
177
void parseRoute(const SUMOSAXAttributes& attrs);
178
179
/// @brief parse route reference
180
void parseRouteRef(const SUMOSAXAttributes& attrs);
181
182
/// @brief parse embedded route
183
void parseRouteEmbedded(const SUMOSAXAttributes& attrs);
184
185
/// @brief parse route distribution
186
void parseRouteDistribution(const SUMOSAXAttributes& attrs);
187
188
/// @brief parse trip
189
void parseTrip(const SUMOSAXAttributes& attrs);
190
191
/// @brief parse vehicle (including vehicles over routes and vehicles with embedded routes)
192
void parseVehicle(const SUMOSAXAttributes& attrs);
193
194
/// @brief parse flow (including flows, flows over routes and flows with embedded routes)
195
void parseFlow(const SUMOSAXAttributes& attrs);
196
197
/// @brief parse stop
198
void parseStop(const SUMOSAXAttributes& attrs);
199
200
/// @brief parse person
201
void parsePerson(const SUMOSAXAttributes& attrs);
202
203
/// @brief parse person flow
204
void parsePersonFlow(const SUMOSAXAttributes& attrs);
205
206
/// @brief parse person trip
207
void parsePersonTrip(const SUMOSAXAttributes& attrs);
208
209
/// @brief parse walk
210
void parseWalk(const SUMOSAXAttributes& attrs);
211
212
/// @brief parse ride
213
void parseRide(const SUMOSAXAttributes& attrs);
214
215
/// @brief parse container
216
void parseContainer(const SUMOSAXAttributes& attrs);
217
218
/// @brief parse container flow
219
void parseContainerFlow(const SUMOSAXAttributes& attrs);
220
221
/// @brief parse transport
222
void parseTransport(const SUMOSAXAttributes& attrs);
223
224
/// @brief parse tranship
225
void parseTranship(const SUMOSAXAttributes& attrs);
226
227
/// @brief parse interval
228
void parseInterval(const SUMOSAXAttributes& attrs);
229
230
/// @brief parse nested CarFollowingModel
231
bool parseNestedCFM(const SumoXMLTag tag, const SUMOSAXAttributes& attrs,
232
CommonXMLStructure::SumoBaseObject* vTypeObject);
233
234
/// @brief parse stop parameters
235
bool parseStopParameters(SUMOVehicleParameter::Stop& stop, const SUMOSAXAttributes& attrs);
236
237
/// @}
238
239
/// @name check functions used for simplify code in handlers
240
/// @{
241
242
/// @brief check if element is defined over from-to edges
243
bool isOverFromToEdges(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const;
244
245
/// @brief check if element is defined over from-to junctions
246
bool isOverFromToJunctions(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const;
247
248
/// @brief check if element is defined over from-to junctions
249
bool isOverFromToTAZs(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const;
250
251
/// @}
252
253
/// @brief invalidate default onstructor
254
RouteHandler() = delete;
255
256
/// @brief invalidate copy constructor
257
RouteHandler(const RouteHandler& s) = delete;
258
259
/// @brief invalidate assignment operator
260
RouteHandler& operator=(const RouteHandler& s) = delete;
261
};
262
263