LCOV - code coverage report
Current view: top level - src/microsim/actions - Command_SaveTLSProgram.cpp (source / functions) Hit Total Coverage
Test: lcov.info Lines: 37 37 100.0 %
Date: 2024-05-19 15:37:39 Functions: 5 5 100.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    Command_SaveTLSProgram.cpp
      15             : /// @author  Jakob Erdmann
      16             : /// @date    18.09.2019
      17             : ///
      18             : // Writes the switch times of a tls into a file when the tls switches
      19             : /****************************************************************************/
      20             : #include <config.h>
      21             : 
      22             : #include "Command_SaveTLSProgram.h"
      23             : #include <microsim/traffic_lights/MSTrafficLightLogic.h>
      24             : #include <microsim/MSEventControl.h>
      25             : #include <microsim/MSNet.h>
      26             : #include <utils/common/UtilExceptions.h>
      27             : #include <utils/common/MsgHandler.h>
      28             : #include <utils/iodevices/OutputDevice.h>
      29             : 
      30             : 
      31             : // ===========================================================================
      32             : // method definitions
      33             : // ===========================================================================
      34          23 : Command_SaveTLSProgram::Command_SaveTLSProgram(const MSTLLogicControl::TLSLogicVariants& logics, OutputDevice& od):
      35          23 :     myOutputDevice(od),
      36          23 :     myLogics(logics) {
      37          23 :     MSNet::getInstance()->getEndOfTimestepEvents()->addEvent(this);
      38          69 :     myOutputDevice.writeXMLHeader("additional", "additional_file.xsd");
      39          23 : }
      40             : 
      41             : 
      42          44 : Command_SaveTLSProgram::~Command_SaveTLSProgram() {
      43          22 :     writeCurrent();
      44          44 : }
      45             : 
      46             : 
      47             : SUMOTime
      48       14522 : Command_SaveTLSProgram::execute(SUMOTime /*currentTime*/) {
      49       14522 :     const std::string& state = myLogics.getActive()->getCurrentPhaseDef().getState();
      50       14522 :     const std::string& name = myLogics.getActive()->getCurrentPhaseDef().getName();
      51       14522 :     if (myLogics.getActive()->getProgramID() != myPreviousProgramID) {
      52          22 :         writeCurrent();
      53          22 :         myPreviousProgramID = myLogics.getActive()->getProgramID();
      54          22 :         myTLSID = myLogics.getActive()->getID();
      55             :     }
      56       14522 :     if (myPreviousStates.size() == 0 || myPreviousStates.back().getState() != state) {
      57        3792 :         myPreviousStates.push_back(MSPhaseDefinition(0, state, name));
      58             :     }
      59       14522 :     myPreviousStates.back().duration += DELTA_T;
      60       14522 :     return DELTA_T;
      61             : }
      62             : 
      63             : void
      64          44 : Command_SaveTLSProgram::writeCurrent() {
      65          44 :     if (myPreviousStates.size() > 0) {
      66          22 :         myOutputDevice.openTag(SUMO_TAG_TLLOGIC);
      67          22 :         myOutputDevice.writeAttr(SUMO_ATTR_ID, myTLSID);
      68          22 :         myOutputDevice.writeAttr(SUMO_ATTR_TYPE, "static");
      69          22 :         myOutputDevice.writeAttr(SUMO_ATTR_PROGRAMID, myPreviousProgramID);
      70             :         // write the phases
      71        1918 :         for (const MSPhaseDefinition& p : myPreviousStates) {
      72        1896 :             myOutputDevice.openTag(SUMO_TAG_PHASE);
      73        1896 :             myOutputDevice.writeAttr(SUMO_ATTR_DURATION, STEPS2TIME(p.duration));
      74        1896 :             if (p.duration < TIME2STEPS(10)) {
      75        3296 :                 myOutputDevice.writePadding(" ");
      76             :             }
      77        1896 :             myOutputDevice.writeAttr(SUMO_ATTR_STATE, p.getState());
      78        1896 :             if (p.getName() != "") {
      79         622 :                 myOutputDevice.writeAttr(SUMO_ATTR_NAME, p.getName());
      80             :             }
      81        3792 :             myOutputDevice.closeTag();
      82             :         }
      83             :         // write params
      84          44 :         myOutputDevice.closeTag();
      85             :         myPreviousStates.clear();
      86             :     }
      87          44 : }
      88             : 
      89             : 
      90             : /****************************************************************************/

Generated by: LCOV version 1.14