Eclipse SUMO - Simulation of Urban MObility
MSMoveReminder.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 // Copyright (C) 2003-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 /****************************************************************************/
22 // Something on a lane to be noticed about vehicle movement
23 /****************************************************************************/
24 #pragma once
25 #include <config.h>
26 
27 #include <iostream>
28 #include <map>
29 #include <utils/common/SUMOTime.h>
30 #include <utils/common/StdDefs.h>
31 #ifdef HAVE_FOX
33 #endif
34 
35 
36 // ===========================================================================
37 // class declarations
38 // ===========================================================================
39 class SUMOTrafficObject;
40 class MSLane;
41 
42 
43 // ===========================================================================
44 // class definitions
45 // ===========================================================================
65 public:
71  MSMoveReminder(const std::string& description, MSLane* const lane = 0, const bool doAdd = true);
72 
73 
76  virtual ~MSMoveReminder() {}
77 
78 
83  const MSLane* getLane() const {
84  return myLane;
85  }
86 
87 
89  enum Notification {
100  /* All notifications below must result in the vehicle not being on the net
101  * (onLeaveLane sets amOnNet=false if reason>=NOTIFICATION_TELEPORT) */
111  NOTIFICATION_ARRIVED, // arrived and everything after is treated as permanent deletion from the net
126  };
127 
128 
131 
142  virtual bool notifyEnter(SUMOTrafficObject& veh, Notification reason, const MSLane* enteredLane) {
143  UNUSED_PARAMETER(reason);
144  UNUSED_PARAMETER(&veh);
145  UNUSED_PARAMETER(&enteredLane);
146  return true;
147  }
148 
149 
163  virtual bool notifyMove(SUMOTrafficObject& veh,
164  double oldPos,
165  double newPos,
166  double newSpeed) {
167  UNUSED_PARAMETER(oldPos);
168  UNUSED_PARAMETER(newPos);
169  UNUSED_PARAMETER(newSpeed);
170  UNUSED_PARAMETER(&veh);
171  return true;
172  }
173 
183  virtual bool notifyIdle(SUMOTrafficObject& veh) {
184  UNUSED_PARAMETER(&veh);
185  return true;
186  }
187 
189  virtual void notifyParking() {}
190 
192  virtual void notifyStopEnded() {}
193 
207  virtual bool notifyLeave(SUMOTrafficObject& veh, double lastPos, Notification reason, const MSLane* enteredLane = 0) {
208  UNUSED_PARAMETER(&veh);
209  UNUSED_PARAMETER(lastPos);
210  UNUSED_PARAMETER(reason);
211  UNUSED_PARAMETER(enteredLane);
212  return true;
213  }
214 
215 
216  // TODO: Documentation
217  void updateDetector(SUMOTrafficObject& veh, double entryPos, double leavePos,
218  SUMOTime entryTime, SUMOTime currentTime, SUMOTime leaveTime,
219  bool cleanUp);
220 
222 
239  virtual void notifyMoveInternal(const SUMOTrafficObject& veh,
240  const double frontOnLane,
241  const double timeOnLane,
242  const double meanSpeedFrontOnLane,
243  const double meanSpeedVehicleOnLane,
244  const double travelledDistanceFrontOnLane,
245  const double travelledDistanceVehicleOnLane,
246  const double meanLengthOnLane) {
247  UNUSED_PARAMETER(&veh);
248  UNUSED_PARAMETER(frontOnLane);
249  UNUSED_PARAMETER(timeOnLane);
250  UNUSED_PARAMETER(meanSpeedFrontOnLane);
251  UNUSED_PARAMETER(meanSpeedVehicleOnLane);
252  UNUSED_PARAMETER(travelledDistanceFrontOnLane);
253  UNUSED_PARAMETER(travelledDistanceVehicleOnLane);
254  UNUSED_PARAMETER(meanLengthOnLane);
255  }
256 
257  void setDescription(const std::string& description) {
258  myDescription = description;
259  }
260 
261  const std::string& getDescription() const {
262  return myDescription;
263  }
264 
265  // @brief return whether this moveReminder triggers parking reroute
266  virtual bool isParkingRerouter() const {
267  return false;
268  }
269 
270 protected:
272 
273 protected:
274 
276  MSLane* const myLane;
278  std::string myDescription;
279 
280 #ifdef HAVE_FOX
282  mutable FXMutex myNotificationMutex;
283 #endif
284 
285 private:
286  std::map<SUMOTrafficObject*, std::pair<SUMOTime, double> > myLastVehicleUpdateValues;
287 
288 
289 private:
290  MSMoveReminder& operator=(const MSMoveReminder&); // just to avoid a compiler warning
291 
292 };
long long int SUMOTime
Definition: GUI.h:35
#define UNUSED_PARAMETER(x)
Definition: StdDefs.h:30
Representation of a lane in the micro simulation.
Definition: MSLane.h:84
Something on a lane to be noticed about vehicle movement.
virtual bool notifyMove(SUMOTrafficObject &veh, double oldPos, double newPos, double newSpeed)
Checks whether the reminder still has to be notified about the vehicle moves.
MSLane *const myLane
Lane on which the reminder works.
virtual void notifyMoveInternal(const SUMOTrafficObject &veh, const double frontOnLane, const double timeOnLane, const double meanSpeedFrontOnLane, const double meanSpeedVehicleOnLane, const double travelledDistanceFrontOnLane, const double travelledDistanceVehicleOnLane, const double meanLengthOnLane)
Internal notification about the vehicle moves.
virtual bool notifyLeave(SUMOTrafficObject &veh, double lastPos, Notification reason, const MSLane *enteredLane=0)
Called if the vehicle leaves the reminder's lane.
const MSLane * getLane() const
Returns the lane the reminder works on.
void setDescription(const std::string &description)
std::map< SUMOTrafficObject *, std::pair< SUMOTime, double > > myLastVehicleUpdateValues
virtual bool notifyEnter(SUMOTrafficObject &veh, Notification reason, const MSLane *enteredLane)
Checks whether the reminder is activated by a vehicle entering the lane.
MSMoveReminder & operator=(const MSMoveReminder &)
virtual void notifyStopEnded()
called to update state for stopped vehicles
Notification
Definition of a vehicle state.
@ NOTIFICATION_VAPORIZED_TRACI
The vehicle got removed via TraCI.
@ NOTIFICATION_ARRIVED
The vehicle arrived at its destination (is deleted)
@ NOTIFICATION_TELEPORT_ARRIVED
The vehicle was teleported out of the net.
@ NOTIFICATION_PARKING_REROUTE
The vehicle needs another parking area.
@ NOTIFICATION_VAPORIZED_CALIBRATOR
The vehicle got removed by a calibrator.
@ NOTIFICATION_VAPORIZED_GUI
The vehicle got removed via the GUI.
@ NOTIFICATION_DEPARTED
The vehicle has departed (was inserted into the network)
@ NOTIFICATION_SEGMENT
The vehicle changes the segment (meso only)
@ NOTIFICATION_LANE_CHANGE
The vehicle changes lanes (micro only)
@ NOTIFICATION_VAPORIZED_VAPORIZER
The vehicle got vaporized with a vaporizer.
@ NOTIFICATION_JUNCTION
The vehicle arrived at a junction.
@ NOTIFICATION_VAPORIZED_BREAKDOWN
The vehicle got removed via stationfinder device.
@ NOTIFICATION_PARKING
The vehicle starts or ends parking.
@ NOTIFICATION_VAPORIZED_COLLISION
The vehicle got removed by a collision.
@ NOTIFICATION_LOAD_STATE
The vehicle has been loaded from a state file.
@ NOTIFICATION_TELEPORT
The vehicle is being teleported.
@ NOTIFICATION_TELEPORT_CONTINUATION
The vehicle continues being teleported past an edge.
virtual ~MSMoveReminder()
Destructor.
MSMoveReminder(const std::string &description, MSLane *const lane=0, const bool doAdd=true)
Constructor.
virtual bool isParkingRerouter() const
std::string myDescription
a description of this moveReminder
virtual void notifyParking()
called to update state for parking vehicles
const std::string & getDescription() const
void removeFromVehicleUpdateValues(SUMOTrafficObject &veh)
virtual bool notifyIdle(SUMOTrafficObject &veh)
Computes idling emission values and adds them to the emission sums.
void updateDetector(SUMOTrafficObject &veh, double entryPos, double leavePos, SUMOTime entryTime, SUMOTime currentTime, SUMOTime leaveTime, bool cleanUp)
Representation of a vehicle, person, or container.