SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MSEdgeControl.h
Go to the documentation of this file.
1 /****************************************************************************/
12 // Stores edges and lanes, performs moving of vehicle
13 /****************************************************************************/
14 // SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
15 // Copyright (C) 2001-2014 DLR (http://www.dlr.de/) and contributors
16 /****************************************************************************/
17 //
18 // This file is part of SUMO.
19 // SUMO is free software: you can redistribute it and/or modify
20 // it under the terms of the GNU General Public License as published by
21 // the Free Software Foundation, either version 3 of the License, or
22 // (at your option) any later version.
23 //
24 /****************************************************************************/
25 #ifndef MSEdgeControl_h
26 #define MSEdgeControl_h
27 
28 
29 // ===========================================================================
30 // included modules
31 // ===========================================================================
32 #ifdef _MSC_VER
33 #include <windows_config.h>
34 #else
35 #include <config.h>
36 #endif
37 
38 #include <vector>
39 #include <map>
40 #include <string>
41 #include <iostream>
42 #include <list>
43 #include <set>
44 #include <utils/common/SUMOTime.h>
45 #include <utils/common/Named.h>
46 
47 
48 // ===========================================================================
49 // class declarations
50 // ===========================================================================
51 class MSEdge;
52 class MSLane;
53 class OutputDevice;
54 
55 
56 // ===========================================================================
57 // class definitions
58 // ===========================================================================
74 public:
76  typedef std::vector< MSEdge* > EdgeCont;
77 
78 public:
86  MSEdgeControl(const std::vector< MSEdge* >& edges);
87 
88 
91 
92 
99  void patchActiveLanes();
100 
101 
104 
112  void planMovements(SUMOTime t);
113 
114 
128  void executeMovements(SUMOTime t);
130 
131 
140  void changeLanes(SUMOTime t);
141 
142 
153  void detectCollisions(SUMOTime timestep, const std::string& stage);
154 
155 
161  const std::vector<MSEdge*>& getEdges() const {
162  return myEdges;
163  }
164 
165 
170  std::vector<std::string> getEdgeNames() const;
171 
172 
178  void gotActive(MSLane* l);
179 
180 
181 public:
193  struct LaneUsage {
197  std::vector<MSLane*>::const_iterator firstNeigh;
199  std::vector<MSLane*>::const_iterator lastNeigh;
201  bool amActive;
204  };
205 
206 private:
208  std::vector<MSEdge*> myEdges;
209 
211  typedef std::vector<LaneUsage> LaneUsageVector;
212 
215 
217  std::list<MSLane*> myActiveLanes;
218 
220  std::vector<MSLane*> myWithVehicles2Integrate;
221 
223  std::set<MSLane*, Named::ComparatorIdLess> myChangedStateLanes;
224 
226  std::vector<SUMOTime> myLastLaneChange;
227 
228 private:
231 
234 
235 };
236 
237 
238 #endif
239 
240 /****************************************************************************/
241 
std::list< MSLane * > myActiveLanes
The list of active (not empty) lanes.
~MSEdgeControl()
Destructor.
std::vector< std::string > getEdgeNames() const
Returns the list of names of all known edges.
void patchActiveLanes()
Resets information whether a lane is active for all lanes.
MSLane * lane
The described lane.
std::vector< LaneUsage > LaneUsageVector
Definition of a container about a lane's number of vehicles and neighbors.
std::set< MSLane *, Named::ComparatorIdLess > myChangedStateLanes
Lanes which changed the state without informing the control.
LaneUsageVector myLanes
Information about lanes' number of vehicles and neighbors.
MSEdgeControl & operator=(const MSEdgeControl &)
Assignment operator.
void changeLanes(SUMOTime t)
Moves (precomputes) critical vehicles.
std::vector< MSEdge * > myEdges
Loaded edges.
std::vector< MSLane * >::const_iterator firstNeigh
The lane left to the described lane (==lastNeigh if none)
bool amActive
Information whether this lane is active.
A structure holding some basic information about a simulated lane.
void gotActive(MSLane *l)
Informs the control that the given lane got active.
void detectCollisions(SUMOTime timestep, const std::string &stage)
Detect collisions.
A road/street connecting two junctions.
Definition: MSEdge.h:74
std::vector< SUMOTime > myLastLaneChange
The list of active (not empty) lanes.
Stores edges and lanes, performs moving of vehicle.
Definition: MSEdgeControl.h:73
std::vector< MSEdge * > EdgeCont
Container for edges.
Definition: MSEdgeControl.h:76
void planMovements(SUMOTime t)
Compute safe velocities for all vehicles based on positions and speeds from the last time step...
void executeMovements(SUMOTime t)
Executes planned vehicle movements with regards to right-of-way.
bool haveNeighbors
Information whether this lane belongs to a multi-lane edge.
std::vector< MSLane * > myWithVehicles2Integrate
A storage for lanes which shall be integrated because vehicles have moved onto them.
const std::vector< MSEdge * > & getEdges() const
Returns loaded edges.
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:71
std::vector< MSLane * >::const_iterator lastNeigh
The end of this lane's edge's lane container.
MSEdgeControl(const std::vector< MSEdge * > &edges)
Constructor.
Representation of a lane in the micro simulation.
Definition: MSLane.h:77