Eclipse SUMO - Simulation of Urban MObility
MSTransportableControl.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 // Copyright (C) 2001-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 /****************************************************************************/
21 // Stores all persons or containers in the net and handles their waiting for cars.
22 /****************************************************************************/
23 #pragma once
24 #include <config.h>
25 
26 #include <vector>
27 #include <map>
28 #include <microsim/MSVehicle.h>
31 
32 
33 // ===========================================================================
34 // class declarations
35 // ===========================================================================
36 class MSNet;
37 class MSPModel;
38 
39 
40 // ===========================================================================
41 // class definitions
42 // ===========================================================================
52 public:
54  typedef std::vector<MSTransportable*> TransportableVector;
55 
57  typedef std::map<std::string, MSTransportable*>::const_iterator constVehIt;
58 
59 
60 public:
62  MSTransportableControl(const bool isPerson);
63 
64 
66  virtual ~MSTransportableControl();
67 
68 
73  bool add(MSTransportable* transportable);
74 
75 
80  MSTransportable* get(const std::string& id) const;
81 
82 
84  virtual void erase(MSTransportable* transportable);
85 
87  void setWaitEnd(SUMOTime time, MSTransportable* transportable);
88 
90  void checkWaiting(MSNet* net, const SUMOTime time);
91 
93  void addWaiting(const MSEdge* edge, MSTransportable* person);
94 
96  void forceDeparture();
97 
99  bool hasAnyWaiting(const MSEdge* edge, SUMOVehicle* vehicle) const;
100 
110  bool loadAnyWaiting(const MSEdge* edge, SUMOVehicle* vehicle, SUMOTime& timeToLoadNext, SUMOTime& stopDuration, MSTransportable* const force = nullptr);
111 
113  bool hasTransportables() const;
114 
116  bool hasNonWaiting() const;
117 
119  int getActiveCount();
120 
123 
126 
128  void abortWaiting(MSTransportable* t);
129 
137  SumoRNG* rng) const;
138 
145 
150  return myTransportables.begin();
151  }
152 
153 
158  return myTransportables.end();
159  }
160 
161 
165  int size() const {
166  return (int)myTransportables.size();
167  }
168 
170  void registerJammed() {
171  myJammedNumber++;
172  }
173 
177  }
178 
182  }
183 
185  void fixLoadCount(const MSTransportable* transportable);
186 
189 
193  int getLoadedNumber() const {
194  return myLoadedNumber;
195  }
196 
197  int getDepartedNumber() const;
198 
202  int getRunningNumber() const {
203  return myRunningNumber;
204  }
205 
209  int getJammedNumber() const {
210  return myJammedNumber;
211  }
212 
217  }
218 
222  int getWaitingUntilNumber() const {
223  return myWaitingUntilNumber;
224  }
225 
228  int getMovingNumber() const;
229 
232  int getRidingNumber() const;
233 
236  int getEndedNumber() const {
237  return myEndedNumber;
238  }
239 
243  int getArrivedNumber() const {
244  return myArrivedNumber;
245  }
246 
248  int getTeleportsAbortWait() const {
249  return myTeleportsAbortWait;
250  }
251 
253  int getTeleportsWrongDest() const {
254  return myTeleportsWrongDest;
255  }
256 
258  int getTeleportCount() const {
260  }
261 
263 
268  return myMovementModel;
269  }
270 
275  return myNonInteractingModel;
276  }
277 
278  void addArrived() {
279  myArrivedNumber++;
280  }
281 
282  void addDiscarded() {
283  myLoadedNumber++;
285  }
286 
287  void startedAccess() {
288  myAccessNumber++;
289  }
290 
291  void endedAccess() {
292  myAccessNumber--;
293  }
294 
297  void saveState(OutputDevice& out);
298 
301  void loadState(const std::string& state);
302 
304  void clearState();
305 
307  return myRouteInfos;
308  }
309 
310 protected:
312  std::map<std::string, MSTransportable*> myTransportables;
313 
315  std::map<SUMOTime, TransportableVector> myWaiting4Departure;
316 
318  std::map<SUMOTime, TransportableVector> myWaitingUntil;
319 
321  std::map<const MSEdge*, TransportableVector, ComparatorNumericalIdLess> myWaiting4Vehicle;
322 
325 
328 
331 
334 
337 
340 
343 
346 
349 
352 
355 
358 
361 
364 
365 private:
367 
369 
372 
375 
376 private:
379 };
long long int SUMOTime
Definition: GUI.h:35
A road/street connecting two junctions.
Definition: MSEdge.h:77
The simulated network and simulation perfomer.
Definition: MSNet.h:89
The pedestrian (and also sometimes container) movement model.
Definition: MSPModel.h:51
void loadState(const std::string &state)
Reconstruct the current state.
MSPModel * getMovementModel()
Returns the default movement model for this kind of transportables.
int getRunningNumber() const
Returns the number of build and inserted, but not yet deleted transportables.
void setWaitEnd(SUMOTime time, MSTransportable *transportable)
sets the arrival time for a waiting transportable
bool hasTransportables() const
checks whether any transportable waits to finish her plan
int myAccessNumber
The number of transportables currently in an access stage.
std::map< std::string, MSTransportable * >::const_iterator constVehIt
Definition of the internal transportables map iterator.
constVehIt loadedBegin() const
Returns the begin of the internal transportables map.
int myWaitingForDepartureNumber
The number of transportables waiting for departure.
int getWaitingForVehicleNumber() const
Returns the number of transportables waiting for a ride.
int getEndedNumber() const
Returns the number of transportables that exited the simulation.
void forceDeparture()
register forced (traci) departure
void fixLoadCount(const MSTransportable *transportable)
decrement counter to avoid double counting transportables loaded from state
void checkWaiting(MSNet *net, const SUMOTime time)
checks whether any transportables waiting time is over
int size() const
Returns the number of known transportables.
MSPModel * getNonInteractingModel()
Returns the non interacting movement model (for tranship and "beaming")
int getArrivedNumber() const
Returns the number of transportables that arrived at their destination.
void registerTeleportAbortWait()
register a teleport after aborting a long wait
void saveState(OutputDevice &out)
Saves the current state into the given stream.
MSTransportableControl(const bool isPerson)
Constructor.
int getTeleportCount() const
Returns the number of teleports transportables did.
int getLoadedNumber() const
Returns the number of build transportables.
bool hasAnyWaiting(const MSEdge *edge, SUMOVehicle *vehicle) const
check whether any transportables are waiting for the given vehicle
int getWaitingUntilNumber() const
Returns the number of transportables waiting for a specified amount of time.
MSTransportableControl & operator=(const MSTransportableControl &src)=delete
invalidated assignment operator
int myLoadedNumber
The number of build transportables.
int getTeleportsWrongDest() const
return the number of teleports of transportables riding to the wrong destination
int myTeleportsAbortWait
The number of teleports due to long waits for a ride.
constVehIt loadedEnd() const
Returns the end of the internal transportables map.
std::map< std::string, MSTransportable * > myTransportables
all currently created transportables by id
void abortWaiting(MSTransportable *t)
aborts waiting stage of transportable
void abortWaitingForVehicle(MSTransportable *t)
let the given transportable abort waiting for a vehicle (when removing stage via TraCI)
void registerTeleportWrongDest()
register a teleport to the final destination
void abortAnyWaitingForVehicle()
aborts the plan for any transportable that is still waiting for a ride
bool hasNonWaiting() const
checks whether any transportable is still engaged in walking / stopping
virtual MSTransportable * buildContainer(const SUMOVehicleParameter *pars, MSVehicleType *vtype, MSTransportable::MSTransportablePlan *plan) const
Builds a new container.
int myArrivedNumber
The number of transportables that arrived at their destination.
virtual MSTransportable * buildPerson(const SUMOVehicleParameter *pars, MSVehicleType *vtype, MSTransportable::MSTransportablePlan *plan, SumoRNG *rng) const
Builds a new person.
std::map< const MSEdge *, TransportableVector, ComparatorNumericalIdLess > myWaiting4Vehicle
the lists of waiting transportables
int getMovingNumber() const
Returns the number of transportables moving by themselvs (i.e. walking)
void addWaiting(const MSEdge *edge, MSTransportable *person)
adds a transportable to the list of transportables waiting for a vehicle on the specified edge
SUMOTime myAbortWaitingTimeout
The time until waiting for a ride is aborted.
int myEndedNumber
The number of transportables that exited the simulation.
int getJammedNumber() const
Returns the number of times a transportables was jammed.
int myWaitingUntilNumber
The number of transportables waiting for a specified time.
void clearState()
Resets transportables when quick-loading state.
virtual void erase(MSTransportable *transportable)
removes a single transportable
int myDiscardedNumber
The number of discarded transportables.
std::map< SUMOTime, TransportableVector > myWaitingUntil
the lists of walking / stopping transportables
bool add(MSTransportable *transportable)
Adds a single transportable, returns false if an id clash occurred.
bool myHaveNewWaiting
whether a new transportable waiting for a vehicle has been added in the last step
virtual ~MSTransportableControl()
Destructor.
int myJammedNumber
The number of jammed transportables.
int myTeleportsWrongDest
The number of teleports due to wrong destination.
int myMaxTransportableNumber
maximum transportable count
std::map< SUMOTime, TransportableVector > myWaiting4Departure
Transportables waiting for departure.
const MSDevice_Vehroutes::SortedRouteInfo & getRouteInfo()
void registerJammed()
register a jammed transportable
bool loadAnyWaiting(const MSEdge *edge, SUMOVehicle *vehicle, SUMOTime &timeToLoadNext, SUMOTime &stopDuration, MSTransportable *const force=nullptr)
load any applicable transportables Loads any person / container that is waiting on that edge for the ...
std::vector< MSTransportable * > TransportableVector
Definition of a list of transportables.
int myRunningNumber
The number of transportables within the network (build and inserted but not removed)
int myWaitingForVehicleNumber
The number of transportables waiting for vehicles.
int getTeleportsAbortWait() const
return the number of teleports due to excessive waiting for a ride
MSTransportable * get(const std::string &id) const
Returns the named transportable, if existing.
MSDevice_Vehroutes::SortedRouteInfo myRouteInfos
Information needed to sort transportable output by departure time.
int getActiveCount()
return the number of active transportable objects
int getRidingNumber() const
Returns the number of transportables riding a vehicle.
std::vector< MSStage * > MSTransportablePlan
the structure holding the plan of a transportable
The car-following model and parameter.
Definition: MSVehicleType.h:63
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:61
Representation of a vehicle.
Definition: SUMOVehicle.h:60
Structure representing possible vehicle parameter.
Information needed to sort vehicle / transportable output by departure time.