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-2014 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 
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:91
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:47
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
const LaneVectorVector & getLaneVectors() const
Returns the list of lists of all lanes controlled by this tls.
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.
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'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:77
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's "trySwitch"- method.