Eclipse SUMO - Simulation of Urban MObility
MSDevice_Routing.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 // Copyright (C) 2007-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 /****************************************************************************/
20 // A device that performs vehicle rerouting based on current edge speeds
21 /****************************************************************************/
22 #pragma once
23 #include <config.h>
24 
25 #include <set>
26 #include <vector>
27 #include <map>
28 #include <utils/common/SUMOTime.h>
30 #include <microsim/MSVehicle.h>
31 #include "MSVehicleDevice.h"
32 
33 
34 // ===========================================================================
35 // class declarations
36 // ===========================================================================
37 class MSLane;
38 
39 
40 // ===========================================================================
41 // class definitions
42 // ===========================================================================
59 public:
63  static void insertOptions(OptionsCont& oc);
64 
68  static bool checkOptions(OptionsCont& oc);
69 
70 
86  static void buildVehicleDevices(SUMOVehicle& v, std::vector<MSVehicleDevice*>& into);
87 
88 
91 
92 
93 
96 
115  bool notifyEnter(SUMOTrafficObject& veh, MSMoveReminder::Notification reason, const MSLane* enteredLane = 0);
116 
118  void notifyStopEnded();
119 
121 
123  const std::string deviceName() const {
124  return "rerouting";
125  }
126 
131  void saveState(OutputDevice& out) const;
132 
137  void loadState(const SUMOSAXAttributes& attrs);
138 
140  void reroute(const SUMOTime currentTime, const bool onInit = false);
141 
142 
151  void skipRouting(const SUMOTime currentTime) {
152  mySkipRouting = currentTime;
153  }
154 
155  SUMOTime getPeriod() const {
156  return myPeriod;
157  }
158 
160  bool mayRerouteRailSignal() const {
161  return myRerouteRailSignal;
162  }
163 
165  std::string getParameter(const std::string& key) const;
166 
168  void setParameter(const std::string& key, const std::string& value);
169 
170  void setActive(bool active) {
171  myActive = active;
172  }
173 
174 private:
175 
183  MSDevice_Routing(SUMOVehicle& holder, const std::string& id, SUMOTime period, SUMOTime preInsertionPeriod);
184 
196  SUMOTime preInsertionReroute(const SUMOTime currentTime);
197 
213 
215  void rebuildRerouteCommand();
216 
217 private:
220 
223 
226 
229 
232 
235 
238 
241 
243  bool myActive;
244 
245 private:
248 
251 
252 
253 };
long long int SUMOTime
Definition: GUI.h:35
A device that performs vehicle rerouting based on current edge speeds.
const std::string deviceName() const
return the name for this type of device
void rebuildRerouteCommand()
rebuild reroute command according to period
void saveState(OutputDevice &out) const
Saves the state of the device.
SUMOTime getPeriod() const
SUMOTime wrappedRerouteCommandExecute(SUMOTime currentTime)
Performs rerouting after a period.
SUMOTime mySkipRouting
The time for which routing may be skipped because we cannot be inserted.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_Routing-options.
void setActive(bool active)
std::string getParameter(const std::string &key) const
try to retrieve the given parameter from this device. Throw exception for unsupported key
bool myActive
Whether the equipped vehicle may perform rerouting.
bool notifyEnter(SUMOTrafficObject &veh, MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
Computes a new route on vehicle insertion.
SUMOTime myPreInsertionPeriod
The period with which a vehicle shall be rerouted before insertion.
SUMOTime myPeriod
The period with which a vehicle shall be rerouted.
void loadState(const SUMOSAXAttributes &attrs)
Loads the state of the device from the given description.
void reroute(const SUMOTime currentTime, const bool onInit=false)
initiate the rerouting, create router / thread pool on first use
bool myRerouteRailSignal
Whether the equipped vehicle may receive dispatch information at a rail signal.
static bool checkOptions(OptionsCont &oc)
checks MSDevice_Routing-options
bool mayRerouteRailSignal() const
return whether the equipped vehicle may receive dispatch information at a rail signal
MSDevice_Routing(const MSDevice_Routing &)
Invalidated copy constructor.
MSDevice_Routing & operator=(const MSDevice_Routing &)
Invalidated assignment operator.
MSDevice_Routing(SUMOVehicle &holder, const std::string &id, SUMOTime period, SUMOTime preInsertionPeriod)
Constructor.
WrappingCommand< MSDevice_Routing > * myRerouteCommand
The (optional) command responsible for rerouting.
void skipRouting(const SUMOTime currentTime)
Labels the current time step as "unroutable".
~MSDevice_Routing()
Destructor.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
SUMOTime myLastLaneEntryTime
the previous time that a vehicle entered a lane
SUMOTime myLastRouting
The last time a routing took place.
void notifyStopEnded()
called to do the rerouting we missed whuile stopping
bool myRerouteAfterStop
Whether the equipped vehicle missed a reroute while stopping and should do so after the stop has ende...
void setParameter(const std::string &key, const std::string &value)
try to set the given parameter for this device. Throw exception for unsupported key
SUMOTime preInsertionReroute(const SUMOTime currentTime)
Performs rerouting before insertion into the network.
Representation of a lane in the micro simulation.
Definition: MSLane.h:84
Notification
Definition of a vehicle state.
Abstract in-vehicle device.
A storage for options typed value containers)
Definition: OptionsCont.h:89
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:61
Encapsulated SAX-Attributes.
Representation of a vehicle, person, or container.
Representation of a vehicle.
Definition: SUMOVehicle.h:60