Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/router/ROLoader.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 ROLoader.h
15
/// @author Daniel Krajzewicz
16
/// @author Christian Roessel
17
/// @author Michael Behrisch
18
/// @author Jakob Erdmann
19
/// @date Sept 2002
20
///
21
// Loader for networks and route imports
22
/****************************************************************************/
23
#pragma once
24
#include <config.h>
25
26
#include <utils/common/SUMOTime.h>
27
#include <utils/common/ValueTimeLine.h>
28
#include <utils/vehicle/SUMORouteLoaderControl.h>
29
#include <utils/xml/SAXWeightsHandler.h>
30
#include "RORoutable.h"
31
32
33
// ===========================================================================
34
// class declarations
35
// ===========================================================================
36
class OptionsCont;
37
class ROAbstractEdgeBuilder;
38
class RONet;
39
class ROVehicle;
40
class SUMORouteHandler;
41
42
43
// ===========================================================================
44
// class definitions
45
// ===========================================================================
46
/**
47
* @class ROLoader
48
* @brief The data loader.
49
*
50
* Loads the network and route descriptions using further classes.
51
*
52
* Is capable to either load all routes in one step or go through them step wise.
53
*/
54
class ROLoader {
55
public:
56
/** @brief Constructor
57
*
58
* @param[in] oc The options to use
59
* @param[in] emptyDestinationsAllowed Whether trips may be given without destinations
60
* @todo Recheck usage of emptyDestinationsAllowed
61
*/
62
ROLoader(OptionsCont& oc, const bool emptyDestinationsAllowed, const bool logSteps);
63
64
65
/// @brief Destructor
66
virtual ~ROLoader();
67
68
/// Loads the network
69
virtual void loadNet(RONet& toFill, ROAbstractEdgeBuilder& eb);
70
71
/// Loads the net weights
72
bool loadWeights(RONet& net, const std::string& optionName,
73
const std::string& measure, const bool useLanes, const bool boundariesOverride);
74
75
/** @brief Builds and opens all route loaders */
76
void openRoutes(RONet& net);
77
78
/** @brief Loads routes from all previously build route loaders */
79
void processRoutes(const SUMOTime start, const SUMOTime end, const SUMOTime increment,
80
RONet& net, const RORouterProvider& provider);
81
82
SUMORouteHandler* getRouteHandler();
83
84
protected:
85
/** @brief Opens route handler of the given type
86
*
87
* Checks whether the given option name is known, returns true if
88
* not (this means that everything's ok, though the according
89
* handler is not built).
90
*
91
* Checks then whether the given option name is set and his value is one
92
* or a set of valid (existing) files. This is done via a call to
93
* "OptionsCont::isUsableFileList" (which generates a proper error
94
* message).
95
*
96
* If the given files are valid, the proper instance(s) is built using
97
* "buildNamedHandler" and if this could be done, it is added to
98
* the list of route handlers to use ("myHandler")
99
*
100
* Returns whether the wished handler(s) could be built.
101
*
102
* @param[in] optionName The name of the option that refers to which handler and which files shall be used
103
* @param[in] net The net to assign to the built handlers
104
* @return Whether the wished handler(s) could be built
105
*/
106
bool openTypedRoutes(const std::string& optionName, RONet& net, const bool readAll = false);
107
108
109
/**
110
* @class EdgeFloatTimeLineRetriever_EdgeWeight
111
* @brief Obtains edge weights from a weights handler and stores them within the edges
112
* @see SAXWeightsHandler::EdgeFloatTimeLineRetriever
113
*/
114
class EdgeFloatTimeLineRetriever_EdgeWeight : public SAXWeightsHandler::EdgeFloatTimeLineRetriever {
115
public:
116
/// @brief Constructor
117
EdgeFloatTimeLineRetriever_EdgeWeight(RONet& net) : myNet(net) {}
118
119
/// @brief Destructor
120
~EdgeFloatTimeLineRetriever_EdgeWeight() { }
121
122
/** @brief Adds an effort for a given edge and time period
123
*
124
* @param[in] id The id of the object to add a weight for
125
* @param[in] val The weight
126
* @param[in] beg The begin of the interval the weight is valid for
127
* @param[in] end The end of the interval the weight is valid for
128
* @see SAXWeightsHandler::EdgeFloatTimeLineRetriever::addEdgeWeight
129
*/
130
void addEdgeWeight(const std::string& id,
131
double val, double beg, double end) const;
132
133
private:
134
/// @brief The network edges shall be obtained from
135
RONet& myNet;
136
137
};
138
139
140
/**
141
* @class EdgeFloatTimeLineRetriever_EdgeTravelTime
142
* @brief Obtains edge travel times from a weights handler and stores them within the edges
143
* @see SAXWeightsHandler::EdgeFloatTimeLineRetriever
144
*/
145
class EdgeFloatTimeLineRetriever_EdgeTravelTime : public SAXWeightsHandler::EdgeFloatTimeLineRetriever {
146
public:
147
/// @brief Constructor
148
EdgeFloatTimeLineRetriever_EdgeTravelTime(RONet& net) : myNet(net) {}
149
150
/// @brief Destructor
151
~EdgeFloatTimeLineRetriever_EdgeTravelTime() {}
152
153
/** @brief Adds a travel time for a given edge and time period
154
*
155
* @param[in] id The id of the object to add a weight for
156
* @param[in] val The travel time
157
* @param[in] beg The begin of the interval the weight is valid for
158
* @param[in] end The end of the interval the weight is valid for
159
* @see SAXWeightsHandler::EdgeFloatTimeLineRetriever::addEdgeWeight
160
*/
161
void addEdgeWeight(const std::string& id,
162
double val, double beg, double end) const;
163
164
private:
165
/// @brief The network edges shall be obtained from
166
RONet& myNet;
167
168
};
169
170
171
172
protected:
173
void writeStats(const SUMOTime time, const SUMOTime start, const SUMOTime absNo, bool endGiven);
174
175
176
private:
177
/// @brief Options to use
178
OptionsCont& myOptions;
179
180
/// @brief Information whether empty destinations are allowed
181
const bool myEmptyDestinationsAllowed;
182
183
/// @brief Information whether the routing steps should be logged
184
const bool myLogSteps;
185
186
/// @brief List of route loaders
187
SUMORouteLoaderControl myLoaders;
188
189
190
private:
191
/// @brief Invalidated copy constructor
192
ROLoader(const ROLoader& src);
193
194
/// @brief Invalidated assignment operator
195
ROLoader& operator=(const ROLoader& src);
196
};
197
198