SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MSTrafficLightLogic.h
Go to the documentation of this file.
1 /****************************************************************************/
11 // The parent class for traffic light logics
12 /****************************************************************************/
13 // SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
14 // Copyright (C) 2001-2013 DLR (http://www.dlr.de/) and contributors
15 /****************************************************************************/
16 //
17 // This file is part of SUMO.
18 // SUMO is free software: you can redistribute it and/or modify
19 // it under the terms of the GNU General Public License as published by
20 // the Free Software Foundation, either version 3 of the License, or
21 // (at your option) any later version.
22 //
23 /****************************************************************************/
24 #ifndef MSTrafficLightLogic_h
25 #define MSTrafficLightLogic_h
26 
27 
28 // ===========================================================================
29 // included modules
30 // ===========================================================================
31 #ifdef _MSC_VER
32 #include <windows_config.h>
33 #else
34 #include <config.h>
35 #endif
36 
37 #include <map>
38 #include <string>
39 #include <bitset>
40 #include <utils/common/Command.h>
43 #include <microsim/MSLink.h>
44 #include "MSPhaseDefinition.h"
45 
46 
47 // ===========================================================================
48 // class declarations
49 // ===========================================================================
50 class MSNet;
51 class MSLink;
52 class MSTLLogicControl;
53 class NLDetectorBuilder;
54 
55 
56 // ===========================================================================
57 // class definitions
58 // ===========================================================================
63 class MSTrafficLightLogic : public Named, public Parameterised {
64 public:
67 
69  typedef std::vector<MSPhaseDefinition*> Phases;
70 
72  typedef std::vector<MSLink*> LinkVector;
73 
75  typedef std::vector<LinkVector> LinkVectorVector;
76 
78  typedef std::vector<MSLane*> LaneVector;
79 
81  typedef std::vector<LaneVector> LaneVectorVector;
83 
84 
85 public:
93  const std::string& id,
94  const std::string& programID,
95  SUMOTime delay,
96  const std::map<std::string, std::string>& parameters);
97 
98 
104  virtual void init(NLDetectorBuilder& nb);
105 
106 
108  virtual ~MSTrafficLightLogic();
109 
110 
111 
114 
120  void addLink(MSLink* link, MSLane* lane, unsigned int pos);
121 
122 
130  virtual void adaptLinkInformationFrom(const MSTrafficLightLogic& logic);
131 
132 
136  std::map<MSLink*, LinkState> collectLinkStates() const;
137 
138 
142  void resetLinkStates(const std::map<MSLink*, LinkState>& vals) const;
144 
145 
146 
149 
154  virtual SUMOTime trySwitch(bool isActive) = 0;
155 
156 
163  bool setTrafficLightSignals(SUMOTime t) const;
165 
166 
167 
170 
174  const std::string& getProgramID() const {
175  return myProgramID;
176  }
177 
178 
182  const LaneVectorVector& getLanes() const {
183  return myLanes;
184  }
185 
186 
191  const LaneVector& getLanesAt(unsigned int i) const {
192  return myLanes[i];
193  }
194 
195 
199  const LinkVectorVector& getLinks() const {
200  return myLinks;
201  }
202 
203 
208  const LinkVector& getLinksAt(unsigned int i) const {
209  return myLinks[i];
210  }
211 
212 
217  int getLinkIndex(const MSLink* const link) const;
218 
219 
223  virtual unsigned int getPhaseNumber() const = 0;
224 
225 
229  virtual const Phases& getPhases() const = 0;
230 
231 
236  virtual const MSPhaseDefinition& getPhase(unsigned int givenstep) const = 0;
238 
239 
240 
243 
247  virtual unsigned int getCurrentPhaseIndex() const = 0;
248 
249 
253  virtual const MSPhaseDefinition& getCurrentPhaseDef() const = 0;
254 
255 
260  return myDefaultCycleTime;
261  }
262 
263 
269  SUMOTime getNextSwitchTime() const;
271 
272 
273 
276 
280  virtual SUMOTime getPhaseIndexAtTime(SUMOTime simStep) const = 0;
281 
282 
287  virtual SUMOTime getOffsetFromIndex(unsigned int index) const = 0;
288 
289 
294  virtual unsigned int getIndexFromOffset(SUMOTime offset) const = 0;
296 
297 
298 
301 
305  void addOverridingDuration(SUMOTime duration);
306 
307 
312 
313 
320  virtual void changeStepAndDuration(MSTLLogicControl& tlcontrol,
321  SUMOTime simStep, unsigned int step, SUMOTime stepDuration) = 0;
322 
324 
325 
326 protected:
331  class SwitchCommand : public Command {
332  public:
338  SwitchCommand(MSTLLogicControl& tlcontrol,
339  MSTrafficLightLogic* tlLogic,
340  SUMOTime nextSwitch);
341 
343  ~SwitchCommand();
344 
349  SUMOTime execute(SUMOTime currentTime);
350 
351 
355  void deschedule(MSTrafficLightLogic* tlLogic);
356 
357 
362  return myAssumedNextSwitch;
363  }
364 
365 
366  private:
369 
372 
375 
377  bool myAmValid;
378 
379  private:
382 
385 
386  };
387 
388 protected:
390  std::string myProgramID;
391 
394 
397 
399  std::vector<SUMOTime> myOverridingTimes;
400 
403 
406 
409 
410 
411 private:
414 
417 
418 };
419 
420 
421 #endif
422 
423 /****************************************************************************/
424 
SUMOTime myCurrentDurationIncrement
A value for enlarge the current duration.
void resetLinkStates(const std::map< MSLink *, LinkState > &vals) const
Resets the states of controlled links.
virtual const MSPhaseDefinition & getCurrentPhaseDef() const =0
Returns the definition of the current phase.
Builds detectors for microsim.
bool setTrafficLightSignals(SUMOTime t) const
Applies the current signal states to controlled links.
virtual unsigned int getCurrentPhaseIndex() const =0
Returns the current index within the program.
MSTLLogicControl & myTLControl
The responsible traffic lights control.
std::vector< SUMOTime > myOverridingTimes
A list of duration overrides.
int getLinkIndex(const MSLink *const link) const
Returns the index of the given link.
SwitchCommand(MSTLLogicControl &tlcontrol, MSTrafficLightLogic *tlLogic, SUMOTime nextSwitch)
Constructor.
std::string myProgramID
The id of the logic.
SUMOTime myAssumedNextSwitch
Assumed switch time (may change in case of adaptive traffic lights)
virtual SUMOTime getPhaseIndexAtTime(SUMOTime simStep) const =0
Returns the index of the logic at the given simulation step.
virtual const MSPhaseDefinition & getPhase(unsigned int givenstep) const =0
Returns the definition of the phase from the given position within the plan.
virtual SUMOTime getOffsetFromIndex(unsigned int index) const =0
Returns the position (start of a phase during a cycle) from of a given step.
MSTrafficLightLogic(MSTLLogicControl &tlcontrol, const std::string &id, const std::string &programID, SUMOTime delay, const std::map< std::string, std::string > &parameters)
Constructor.
Base (microsim) event class.
Definition: Command.h:61
The simulated network and simulation perfomer.
Definition: MSNet.h:87
LaneVectorVector myLanes
The list of links which do participate in this traffic light.
virtual void changeStepAndDuration(MSTLLogicControl &tlcontrol, SUMOTime simStep, unsigned int step, SUMOTime stepDuration)=0
Changes the current phase and her duration.
virtual ~MSTrafficLightLogic()
Destructor.
SUMOTime getNextSwitchTime() const
Returns the assumed next switch time.
A class that stores and controls tls and switching of their programs.
void deschedule(MSTrafficLightLogic *tlLogic)
Marks this swicth as invalid (if the phase duration has changed, f.e.)
Class realising the switch between the traffic light phases.
MSTrafficLightLogic & operator=(const MSTrafficLightLogic &s)
invalidated assignment operator
std::vector< LinkVector > LinkVectorVector
Definition of a list that holds lists of links that do have the same attribute.
virtual unsigned int getIndexFromOffset(SUMOTime offset) const =0
Returns the step (the phasenumber) of a given position of the cycle.
SUMOTime myDefaultCycleTime
The cycle time (without changes)
MSTrafficLightLogic * myTLLogic
The logic to be executed on a switch.
virtual void init(NLDetectorBuilder &nb)
Initialises the tls with information about incoming lanes.
const LaneVector & getLanesAt(unsigned int i) const
Returns the list of lanes that are controlled by the signals at the given position.
const LinkVector & getLinksAt(unsigned int i) const
Returns the list of links that are controlled by the signals at the given position.
const LinkVectorVector & getLinks() const
Returns the list of lists of all affected links.
virtual void adaptLinkInformationFrom(const MSTrafficLightLogic &logic)
Applies information about controlled links and lanes from the given logic.
An upper class for objects with additional parameters.
Definition: Parameterised.h:46
virtual SUMOTime trySwitch(bool isActive)=0
Switches to the next phase.
void setCurrentDurationIncrement(SUMOTime delay)
Delays current phase by the given delay.
Base class for objects which have an id.
Definition: Named.h:45
std::vector< MSLink * > LinkVector
Definition of the list of links that participate in this tl-light.
SwitchCommand & operator=(const SwitchCommand &)
Invalidated assignment operator.
SUMOTime getNextSwitchTime() const
Returns the assumed next switch time.
std::vector< MSPhaseDefinition * > Phases
Definition of a list of phases, being the junction logic.
virtual const Phases & getPhases() const =0
Returns the phases of this tls program.
void addOverridingDuration(SUMOTime duration)
Changes the duration of the next phase.
const LaneVectorVector & getLanes() const
Returns the list of lists of all lanes controlled by this tls.
LinkVectorVector myLinks
The list of links which do participate in this traffic light.
std::vector< MSLane * > LaneVector
Definition of the list of links that participate in this tl-light.
std::vector< LaneVector > LaneVectorVector
Definition of a list that holds lists of links that do have the same attribute.
virtual unsigned int getPhaseNumber() const =0
Returns the number of phases.
int SUMOTime
Definition: SUMOTime.h:43
SwitchCommand * mySwitchCommand
The current switch command.
The parent class for traffic light logics.
const std::string & getProgramID() const
Returns this tl-logic&#39;s id.
void addLink(MSLink *link, MSLane *lane, unsigned int pos)
Adds a link on building.
bool myAmValid
Information whether this switch command is still valid.
The definition of a single phase of a tls logic.
Representation of a lane in the micro simulation.
Definition: MSLane.h:73
std::map< MSLink *, LinkState > collectLinkStates() const
Returns the (uncontrolled) states of the controlled links.
SUMOTime getDefaultCycleTime() const
Returns the cycle time (in ms)
SUMOTime execute(SUMOTime currentTime)
Executes the regarded junction&#39;s &quot;trySwitch&quot;- method.