SUMO - Simulation of Urban MObility
MSInsertionControl.h
Go to the documentation of this file.
1 /****************************************************************************/
10 // Inserts vehicles into the network when their departure time is reached
11 /****************************************************************************/
12 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
13 // Copyright (C) 2001-2016 DLR (http://www.dlr.de/) and contributors
14 /****************************************************************************/
15 //
16 // This file is part of SUMO.
17 // SUMO is free software: you can redistribute it and/or modify
18 // it under the terms of the GNU General Public License as published by
19 // the Free Software Foundation, either version 3 of the License, or
20 // (at your option) any later version.
21 //
22 /****************************************************************************/
23 #ifndef MSInsertionControl_h
24 #define MSInsertionControl_h
25 
26 
27 // ===========================================================================
28 // included modules
29 // ===========================================================================
30 #ifdef _MSC_VER
31 #include <windows_config.h>
32 #else
33 #include <config.h>
34 #endif
35 
36 #include "MSVehicleContainer.h"
37 #include <vector>
38 #include <map>
39 #include <string>
40 
41 
42 // ===========================================================================
43 // class declarations
44 // ===========================================================================
45 class MSVehicle;
46 class MSVehicleControl;
47 
48 
49 // ===========================================================================
50 // class definitions
51 // ===========================================================================
68 public:
76  MSInsertionControl(MSVehicleControl& vc, SUMOTime maxDepartDelay, bool checkEdgesOnce, int maxVehicleNumber);
77 
78 
81 
82 
99  int emitVehicles(SUMOTime time);
100 
101 
108  void add(SUMOVehicle* veh);
109 
110 
116  bool add(SUMOVehicleParameter* const pars);
117 
118 
126  int getWaitingVehicleNo() const;
127 
128 
133  int getPendingFlowCount() const;
134 
136  void alreadyDeparted(SUMOVehicle* veh);
137 
139  void descheduleDeparture(SUMOVehicle* veh);
140 
141 
143  void clearPendingVehicles(std::string& route);
144 
145 
150  void determineCandidates(SUMOTime time);
151 
153  int getPendingEmits(const MSLane* lane);
154 
155 private:
170  int tryInsert(SUMOTime time, SUMOVehicle* veh,
171  MSVehicleContainer::VehicleVector& refusedEmits);
172 
173 
178  void checkFlowWait(SUMOVehicle* veh);
179 
180 
186  void checkCandidates(SUMOTime time, const bool preCheck);
187 
188 
189 private:
192 
195 
198 
200  std::set<SUMOVehicle*> myEmitCandidates;
201 
203  std::set<SUMOVehicle*> myAbortedEmits;
204 
208  struct Flow {
216  int index;
217  };
218 
220  std::vector<Flow> myFlows;
221 
223  std::set<std::string> myFlowIDs;
224 
227 
230 
233 
236 
238  std::map<const MSLane*, int> myPendingEmitsForLane;
239 
240 
241 private:
244 
247 
248 
249 };
250 
251 
252 #endif
253 
254 /****************************************************************************/
255 
std::map< const MSLane *, int > myPendingEmitsForLane
the number of pending emits for each edge in the current time step
int getPendingFlowCount() const
Returns the number of flows that are still active.
void checkFlowWait(SUMOVehicle *veh)
Checks whether any flow is blocked due to this vehicle and clears the block.
Representation of a vehicle in the micro simulation.
Definition: MSVehicle.h:81
long long int SUMOTime
Definition: SUMOTime.h:43
void descheduleDeparture(SUMOVehicle *veh)
stops trying to emit the given vehicle (and delete it)
std::set< SUMOVehicle * > myAbortedEmits
Set of vehicles which shall not be inserted anymore.
void checkCandidates(SUMOTime time, const bool preCheck)
Adds all vehicles that should have been emitted earlier to the refuse container.
SUMOVehicle * vehicle
The last created vehicle.
MSVehicleContainer myAllVeh
All loaded vehicles sorted by their departure time.
int getWaitingVehicleNo() const
Returns the number of waiting vehicles.
~MSInsertionControl()
Destructor.
std::vector< SUMOVehicle * > VehicleVector
definition of a list of vehicles which have the same departure time
MSInsertionControl(MSVehicleControl &vc, SUMOTime maxDepartDelay, bool checkEdgesOnce, int maxVehicleNumber)
Constructor.
Representation of a vehicle.
Definition: SUMOVehicle.h:66
int emitVehicles(SUMOTime time)
Emits vehicles that want to depart at the given time.
bool myCheckEdgesOnce
Whether an edge on which a vehicle could not depart should be ignored in the same step...
MSVehicleContainer::VehicleVector myPendingEmits
Buffers for vehicles that could not be inserted.
int tryInsert(SUMOTime time, SUMOVehicle *veh, MSVehicleContainer::VehicleVector &refusedEmits)
Tries to emit the vehicle.
SUMOTime myMaxDepartDelay
The maximum waiting time; vehicles waiting longer are deleted (-1: no deletion)
void clearPendingVehicles(std::string &route)
clears out all pending vehicles from a route, "" for all routes
std::set< SUMOVehicle * > myEmitCandidates
Buffer for vehicles that may be inserted in the current step.
SUMOTime myPendingEmitsUpdateTime
Last time at which pending emits for each edge where counted.
bool isVolatile
whether it has route or vehicle type distribution
Inserts vehicles into the network when their departure time is reached.
std::vector< Flow > myFlows
Container for periodical vehicle parameters.
void alreadyDeparted(SUMOVehicle *veh)
stops trying to emit the given vehicle (because it already departed)
int myMaxVehicleNumber
Storage for maximum vehicle number.
Structure representing possible vehicle parameter.
MSVehicleControl & myVehicleControl
The assigned vehicle control (needed for vehicle re-insertion and deletion)
The class responsible for building and deletion of vehicles.
int index
the running index
SUMOVehicleParameter * pars
The paramters.
MSInsertionControl & operator=(const MSInsertionControl &)
Invalidated assignment operator.
void add(SUMOVehicle *veh)
Adds a single vehicle for departure.
Representation of a lane in the micro simulation.
Definition: MSLane.h:79
std::set< std::string > myFlowIDs
Cache for periodical vehicle ids for quicker checking.
int getPendingEmits(const MSLane *lane)
return the number of pending emits for the given lane
void determineCandidates(SUMOTime time)
Checks for all vehicles whether they can be emitted.