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.org/sumo
3// Copyright (C) 2003-2023 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>
31#ifdef HAVE_FOX
33#endif
34
35
36// ===========================================================================
37// class declarations
38// ===========================================================================
40class MSLane;
41
42
43// ===========================================================================
44// class definitions
45// ===========================================================================
65public:
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
100 /* All notifications below must result in the vehicle not being on the net
101 * (onLeaveLane sets amOnNet=false if reason>=NOTIFICATION_TELEPORT) */
109 NOTIFICATION_ARRIVED, // arrived and everything after is treated as permanent deletion from the net
122 };
123
124
127
138 virtual bool notifyEnter(SUMOTrafficObject& veh, Notification reason, const MSLane* enteredLane) {
139 UNUSED_PARAMETER(reason);
140 UNUSED_PARAMETER(&veh);
141 UNUSED_PARAMETER(&enteredLane);
142 return true;
143 }
144
145
159 virtual bool notifyMove(SUMOTrafficObject& veh,
160 double oldPos,
161 double newPos,
162 double newSpeed) {
163 UNUSED_PARAMETER(oldPos);
164 UNUSED_PARAMETER(newPos);
165 UNUSED_PARAMETER(newSpeed);
166 UNUSED_PARAMETER(&veh);
167 return true;
168 }
169
179 virtual bool notifyIdle(SUMOTrafficObject& veh) {
180 UNUSED_PARAMETER(&veh);
181 return true;
182 }
183
185 virtual void notifyParking() {}
186
188 virtual void notifyStopEnded() {}
189
203 virtual bool notifyLeave(SUMOTrafficObject& veh, double lastPos, Notification reason, const MSLane* enteredLane = 0) {
204 UNUSED_PARAMETER(&veh);
205 UNUSED_PARAMETER(lastPos);
206 UNUSED_PARAMETER(reason);
207 UNUSED_PARAMETER(enteredLane);
208 return true;
209 }
210
211
212 // TODO: Documentation
213 void updateDetector(SUMOTrafficObject& veh, double entryPos, double leavePos,
214 SUMOTime entryTime, SUMOTime currentTime, SUMOTime leaveTime,
215 bool cleanUp);
216
218
235 virtual void notifyMoveInternal(const SUMOTrafficObject& veh,
236 const double frontOnLane,
237 const double timeOnLane,
238 const double meanSpeedFrontOnLane,
239 const double meanSpeedVehicleOnLane,
240 const double travelledDistanceFrontOnLane,
241 const double travelledDistanceVehicleOnLane,
242 const double meanLengthOnLane) {
243 UNUSED_PARAMETER(&veh);
244 UNUSED_PARAMETER(frontOnLane);
245 UNUSED_PARAMETER(timeOnLane);
246 UNUSED_PARAMETER(meanSpeedFrontOnLane);
247 UNUSED_PARAMETER(meanSpeedVehicleOnLane);
248 UNUSED_PARAMETER(travelledDistanceFrontOnLane);
249 UNUSED_PARAMETER(travelledDistanceVehicleOnLane);
250 UNUSED_PARAMETER(meanLengthOnLane);
251 }
252
253 void setDescription(const std::string& description) {
254 myDescription = description;
255 }
256
257 const std::string& getDescription() const {
258 return myDescription;
259 }
260
261protected:
263
264protected:
265
269 std::string myDescription;
270
271#ifdef HAVE_FOX
273 mutable FXMutex myNotificationMutex;
274#endif
275
276private:
277 std::map<SUMOTrafficObject*, std::pair<SUMOTime, double> > myLastVehicleUpdateValues;
278
279
280private:
281 MSMoveReminder& operator=(const MSMoveReminder&); // just to avoid a compiler warning
282
283};
long long int SUMOTime
Definition: GUI.h:36
#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.
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.
const std::string & getDescription() const
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_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.
MSMoveReminder & operator=(const MSMoveReminder &)
virtual ~MSMoveReminder()
Destructor.
MSMoveReminder(const std::string &description, MSLane *const lane=0, const bool doAdd=true)
Constructor.
std::string myDescription
a description of this moveReminder
virtual void notifyParking()
called to update state for parking vehicles
void removeFromVehicleUpdateValues(SUMOTrafficObject &veh)
const MSLane * getLane() const
Returns the lane the reminder works on.
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.