LCOV - code coverage report
Current view: top level - src/netbuild - NBLoadedTLDef.h (source / functions) Coverage Total Hit
Test: lcov.info Lines: 100.0 % 1 1
Test Date: 2024-12-21 15:45:41 Functions: - 0 0

            Line data    Source code
       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              : /****************************************************************************/
      14              : /// @file    NBLoadedTLDef.h
      15              : /// @author  Daniel Krajzewicz
      16              : /// @author  Sascha Krieg
      17              : /// @date    Fri, 29.04.2005
      18              : ///
      19              : // A loaded (complete) traffic light logic
      20              : /****************************************************************************/
      21              : #pragma once
      22              : #include <config.h>
      23              : 
      24              : #include <vector>
      25              : #include <string>
      26              : #include <set>
      27              : #include "NBTrafficLightDefinition.h"
      28              : #include "NBNode.h"
      29              : #include <utils/common/SUMOTime.h>
      30              : 
      31              : 
      32              : // ===========================================================================
      33              : // class definitions
      34              : // ===========================================================================
      35              : /**
      36              :  * @class NBLoadedTLDef
      37              :  * @brief A loaded (complete) traffic light logic
      38              :  */
      39              : class NBLoadedTLDef : public NBTrafficLightDefinition {
      40              : public:
      41              :     /** @class SignalGroup
      42              :      * @brief A single signal group, may control several connections
      43              :      */
      44              :     class SignalGroup : public Named {
      45              :     public:
      46              :         /** @brief Constructor
      47              :          * @param[in] id The id of the signal group
      48              :          */
      49              :         SignalGroup(const std::string& id);
      50              : 
      51              :         /// @brief Destructor
      52              :         ~SignalGroup();
      53              : 
      54              :         /** @brief Inserts a controlled connection
      55              :          * @param[in] c The connection to be controlled by this signal group
      56              :          */
      57              :         void addConnection(const NBConnection& c);
      58              : 
      59              :         /** @brief Sets the begin of a phase
      60              :          * @param[in] time The time at which the phase starts
      61              :          * @param[in] color The color of this signal starting at the given time
      62              :          */
      63              :         void addPhaseBegin(SUMOTime time, TLColor color);
      64              : 
      65              :         /** @brief Sets the times for redyellow and yellow
      66              :          * @param[in] tRedYellowe The duration of the redyellow phase
      67              :          * @param[in] tYellow The duration of the yellow phase
      68              :          */
      69              :         void setYellowTimes(SUMOTime tRedYellowe, SUMOTime tYellow);
      70              : 
      71              :         /** @brief Returns the times at which the signal switches
      72              :          * @param[in] cycleDuration The duration of the complete cycle
      73              :          * @return The switch times of this signal
      74              :          */
      75              :         std::vector<SUMOTime> getTimes(SUMOTime cycleDuration) const;
      76              : 
      77              :         /** @brief Sorts the phases */
      78              :         void sortPhases();
      79              : 
      80              :         /** @brief Returns the number of links (connection) controlled by this signal
      81              :          * @return The number of links controlled by this signal
      82              :          */
      83              :         int getLinkNo() const;
      84              : 
      85              :         /** @brief Returns whether vehicles on controlled links may drive at the given time
      86              :          * @param[in] time The regarded time
      87              :          * @return Whether vehicles may drive at this time
      88              :          */
      89              :         bool mayDrive(SUMOTime time) const;
      90              : 
      91              :         /** @brief Returns whether controlled links have yellow at the given time
      92              :          * @param[in] time The regarded time
      93              :          * @return Whether controlled links are yellow at this time
      94              :          */
      95              :         bool hasYellow(SUMOTime time) const;
      96              : 
      97              :         /** @brief Returns whether this signal controls the given edge
      98              :          * @param[in] from The incoming edge
      99              :          * @return Whether this edge is controlled by this signal
     100              :          */
     101              :         bool containsIncoming(NBEdge* from) const;
     102              : 
     103              :         /** @brief Replaces the given incoming edge by the others given
     104              :          * @param[in] which The edge to replace
     105              :          * @param[in] by The replacements
     106              :          */
     107              :         void remapIncoming(NBEdge* which, const EdgeVector& by);
     108              : 
     109              :         /** @brief Returns whether this signal controls a connection where the given edge is the destination
     110              :          * @param[in] from The outgoing edge
     111              :          * @return Whether this edge's predecessing edge is controlled by this signal
     112              :          */
     113              :         bool containsOutgoing(NBEdge* to) const;
     114              : 
     115              :         /** @brief Replaces the given outgoing edge by the others given
     116              :          * @param[in] which The edge to replace
     117              :          * @param[in] by The replacements
     118              :          */
     119              :         void remapOutgoing(NBEdge* which, const EdgeVector& by);
     120              : 
     121              :         /** @brief Returns the connection at the given index
     122              :          * @param[in] pos The position within this signal
     123              :          * @return The connection at the given index
     124              :          */
     125              :         const NBConnection& getConnection(int pos) const;
     126              : 
     127              :         /** @brief Sets the yellow time
     128              :          * @param[in] tyellow The yellow time to set in seconds
     129              :          * @param[in] forced Whether resetting tyellow was forced by the user by setting "tls.yellow.patch-small"
     130              :          */
     131              :         void patchTYellow(SUMOTime tyellow, bool forced);
     132              : 
     133              :         /** @brief Replaces a removed edge/lane
     134              :          * @param[in] removed The edge to replace
     135              :          * @param[in] removedLane The lane of this edge to replace
     136              :          * @param[in] by The edge to insert instead
     137              :          * @param[in] byLane This edge's lane to insert instead
     138              :          */
     139              :         void remap(NBEdge* removed, int removedLane, NBEdge* by, int byLane);
     140              : 
     141              :         /** @class PhaseDef
     142              :          * @brief Definition of a single, loaded phase
     143              :          */
     144              :         class PhaseDef {
     145              :         public:
     146              :             /** @brief Constructor
     147              :              * @param[in] time The begin time of this phase
     148              :              * @param[in] color A signal's color from this time
     149              :              */
     150              :             PhaseDef(SUMOTime time, TLColor color)
     151          301 :                 : myTime(time), myColor(color) { }
     152              : 
     153              :             /// @brief The begin time of this phase
     154              :             SUMOTime myTime;
     155              :             /// @brief A signal's color from this time
     156              :             TLColor myColor;
     157              :         };
     158              : 
     159              :     private:
     160              :         /// @brief Connections controlled by this signal
     161              :         NBConnectionVector myConnections;
     162              :         /// @brief The phases of this signal
     163              :         std::vector<PhaseDef> myPhases;
     164              :         /// @brief The times of redyellow and yellow
     165              :         SUMOTime myTRedYellow, myTYellow;
     166              :     };
     167              : 
     168              : 
     169              : 
     170              :     /// @brief Definition of the container for signal groups
     171              :     typedef std::map<std::string, SignalGroup*> SignalGroupCont;
     172              : 
     173              : 
     174              :     /** @brief Constructor
     175              :      * @param[in] id The id of the tls
     176              :      * @param[in] junctions Junctions controlled by this tls
     177              :      * @param[in] offset The offset of the plan
     178              :      * @param[in] type The algorithm type for the computed traffic light
     179              :      */
     180              :     NBLoadedTLDef(const NBEdgeCont& ec, const std::string& id,
     181              :                   const std::vector<NBNode*>& junctions, SUMOTime offset,
     182              :                   TrafficLightType type);
     183              : 
     184              : 
     185              :     /** @brief Constructor
     186              :      * @param[in] id The id of the tls
     187              :      * @param[in] junction The junction controlled by this tls
     188              :      * @param[in] offset The offset of the plan
     189              :      * @param[in] type The algorithm type for the computed traffic light
     190              :      */
     191              :     NBLoadedTLDef(const NBEdgeCont& ec, const std::string& id, NBNode* junction, SUMOTime offset,
     192              :                   TrafficLightType type);
     193              : 
     194              : 
     195              :     /** @brief Constructor
     196              :      * @param[in] id The id of the tls
     197              :      * @param[in] offset The offset of the plan
     198              :      * @param[in] type The algorithm type for the computed traffic light
     199              :      */
     200              :     NBLoadedTLDef(const NBEdgeCont& ec, const std::string& id, SUMOTime offset,
     201              :                   TrafficLightType type);
     202              : 
     203              : 
     204              :     /// @brief Destructor
     205              :     ~NBLoadedTLDef();
     206              : 
     207              : 
     208              :     /** @brief Sets the duration of a cycle
     209              :      * @param[in] cycleDur The duration of the cycle
     210              :      */
     211              :     void setCycleDuration(SUMOTime cycleDur);
     212              : 
     213              : 
     214              :     /** @brief Adds a signal group
     215              :      * @param[in] id The id of the signal group
     216              :      */
     217              :     void addSignalGroup(const std::string& id);
     218              : 
     219              : 
     220              :     /** @brief Adds a connection to a signal group
     221              :      * @param[in] groupid The id of the signal group to add the connection to
     222              :      * @param[in] connection The connection to add
     223              :      */
     224              :     bool addToSignalGroup(const std::string& groupid,
     225              :                           const NBConnection& connection);
     226              : 
     227              : 
     228              :     /** @brief Adds a list of connections to a signal group
     229              :      * @param[in] groupid The id of the signal group to add the connections to
     230              :      * @param[in] connections The connections to add
     231              :      */
     232              :     bool addToSignalGroup(const std::string& groupid,
     233              :                           const NBConnectionVector& connections);
     234              : 
     235              : 
     236              :     /** @brief Sets the information about the begin of a phase
     237              :      * @param[in] groupid The id of the signal group to add the phase to
     238              :      * @param[in] time The time the phase starts at
     239              :      * @param[in] color The color of the signal during this phase
     240              :      */
     241              :     void addSignalGroupPhaseBegin(const std::string& groupid,
     242              :                                   SUMOTime time, TLColor color);
     243              : 
     244              : 
     245              :     /** @brief Sets the times the light is yellow or red/yellow
     246              :      * @param[in] groupid The id of the signal group to add the phase to
     247              :      * @param[in] tRedYellow The duration of redyellow
     248              :      * @param[in] tYellow The duration of yellow
     249              :      */
     250              :     void setSignalYellowTimes(const std::string& groupid,
     251              :                               SUMOTime tRedYellow, SUMOTime tYellow);
     252              : 
     253              : 
     254              :     /// @name Public methods from NBTrafficLightDefinition-interface
     255              :     /// @{
     256              : 
     257              :     /** @brief Informs edges about being controlled by a tls
     258              :      * @param[in] ec The container of edges
     259              :      * @see NBTrafficLightDefinition::setTLControllingInformation
     260              :      */
     261              :     void setTLControllingInformation() const;
     262              : 
     263              : 
     264              :     /** @brief Replaces occurrences of the removed edge in incoming/outgoing edges of all definitions
     265              :      * @param[in] removed The removed edge
     266              :      * @param[in] incoming The edges to use instead if an incoming edge was removed
     267              :      * @param[in] outgoing The edges to use instead if an outgoing edge was removed
     268              :      * @see NBTrafficLightDefinition::remapRemoved
     269              :      */
     270              :     void remapRemoved(NBEdge* removed,
     271              :                       const EdgeVector& incoming, const EdgeVector& outgoing);
     272              : 
     273              :     /* initialize myNeedsContRelation and set myNeedsContRelationReady to true */
     274              :     void initNeedsContRelation() const;
     275              : 
     276              :     ///@brief Returns the maximum index controlled by this traffic light
     277              :     int getMaxIndex();
     278              : 
     279              :     /// @}
     280              : 
     281              : 
     282              : protected:
     283              :     /// @name Protected methods from NBTrafficLightDefinition-interface
     284              :     /// @{
     285              : 
     286              :     /** @brief Computes the traffic light logic finally in dependence to the type
     287              :      * @param[in] brakingTime Duration a vehicle needs for braking in front of the tls in seconds
     288              :      * @return The computed logic
     289              :      * @see NBTrafficLightDefinition::myCompute
     290              :      */
     291              :     NBTrafficLightLogic* myCompute(int brakingTimeSeconds);
     292              : 
     293              :     /** @brief Builds the list of participating nodes/edges/links
     294              :      * @see NBTrafficLightDefinition::setParticipantsInformation
     295              :      */
     296              :     void setParticipantsInformation();
     297              : 
     298              : 
     299              :     /** @brief Collects the nodes participating in this traffic light
     300              :      * @see NBTrafficLightDefinition::collectNodes
     301              :      */
     302              :     void collectNodes();
     303              : 
     304              : 
     305              :     /** @brief Collects the links participating in this traffic light
     306              :      * @exception ProcessError If a link could not be found
     307              :      * @see NBTrafficLightDefinition::collectLinks
     308              :      */
     309              :     void collectLinks();
     310              : 
     311              : 
     312              :     /** @brief Returns the information whether a connection must brake, given a phase
     313              :      * @param[in] possProhibited The connection to investigate
     314              :      * @param[in] state The state
     315              :      * @param[in] strmpos The index of this connection within the masks
     316              :      * @return Whether the given connection must brake
     317              :      */
     318              :     bool mustBrake(const NBConnection& possProhibited,
     319              :                    const std::string& state,
     320              :                    int strmpos) const;
     321              : 
     322              : 
     323              :     /** @brief Replaces a removed edge/lane
     324              :      * @param[in] removed The edge to replace
     325              :      * @param[in] removedLane The lane of this edge to replace
     326              :      * @param[in] by The edge to insert instead
     327              :      * @param[in] byLane This edge's lane to insert instead
     328              :      * @see NBTrafficLightDefinition::replaceRemoved
     329              :      */
     330              :     void replaceRemoved(NBEdge* removed, int removedLane,
     331              :                         NBEdge* by, int byLane, bool incoming);
     332              :     /// @}
     333              : 
     334              : private:
     335              :     /** @brief Builds the phase for a given time
     336              :      * @param[in] ec The edge control to use
     337              :      * @param[in] time The time to build the phase for
     338              :      * @return The phase of this tls for the given time
     339              :      */
     340              :     std::string buildPhaseState(const SUMOTime time) const;
     341              : 
     342              :     // pointer to the NBEdgeCont for checking edges
     343              :     const NBEdgeCont* myEdgeCont;
     344              : 
     345              : 
     346              : private:
     347              :     /// @brief Controlled signal groups
     348              :     SignalGroupCont mySignalGroups;
     349              : 
     350              :     /// @brief The duration of a single cycle
     351              :     SUMOTime myCycleDuration;
     352              : 
     353              : 
     354              : };
        

Generated by: LCOV version 2.0-1