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