LCOV - code coverage report
Current view: top level - src/utils/common - SystemFrame.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 100.0 % 102 102
Test Date: 2026-01-01 15:49:29 Functions: 100.0 % 4 4

            Line data    Source code
       1              : /****************************************************************************/
       2              : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3              : // Copyright (C) 2001-2025 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    SystemFrame.cpp
      15              : /// @author  Daniel Krajzewicz
      16              : /// @author  Jakob Erdmann
      17              : /// @author  Michael Behrisch
      18              : /// @date    Mon, 23.06.2003
      19              : ///
      20              : // A set of actions common to all applications
      21              : /****************************************************************************/
      22              : #include <config.h>
      23              : 
      24              : #include <string>
      25              : #include <utils/xml/XMLSubSys.h>
      26              : #include <utils/common/StdDefs.h>
      27              : #include <utils/common/MsgHandler.h>
      28              : #include <utils/options/OptionsCont.h>
      29              : #include <utils/iodevices/OutputDevice.h>
      30              : #include "RandHelper.h"
      31              : #include "SystemFrame.h"
      32              : 
      33              : 
      34              : // ===========================================================================
      35              : // method definitions
      36              : // ===========================================================================
      37              : void
      38        50525 : SystemFrame::addConfigurationOptions(OptionsCont& oc) {
      39        50525 :     oc.addOptionSubTopic("Configuration");
      40              : 
      41        50525 :     oc.doRegister("configuration-file", 'c', new Option_FileName());
      42       101050 :     oc.addSynonyme("configuration-file", "configuration");
      43       101050 :     oc.addDescription("configuration-file", "Configuration", TL("Loads the named config on startup"));
      44       101050 :     oc.addXMLDefault("configuration-file");
      45              : 
      46        50525 :     oc.doRegister("save-configuration", 'C', new Option_FileName());
      47       101050 :     oc.addSynonyme("save-config", "save-configuration");
      48       101050 :     oc.addDescription("save-configuration", "Configuration", TL("Saves current configuration into FILE"));
      49              : 
      50        50525 :     oc.doRegister("save-configuration.relative", new Option_Bool(false));
      51       101050 :     oc.addSynonyme("save-config.relative", "save-configuration.relative");
      52       101050 :     oc.addDescription("save-configuration.relative", "Configuration", TL("Enforce relative paths when saving the configuration"));
      53              : 
      54        50525 :     oc.doRegister("save-template", new Option_FileName());
      55       101050 :     oc.addDescription("save-template", "Configuration", TL("Saves a configuration template (empty) into FILE"));
      56              : 
      57        50525 :     oc.doRegister("save-schema", new Option_FileName());
      58       101050 :     oc.addDescription("save-schema", "Configuration", TL("Saves the configuration schema into FILE"));
      59              : 
      60        50525 :     oc.doRegister("save-commented", new Option_Bool(false));
      61       101050 :     oc.addSynonyme("save-commented", "save-template.commented");
      62       101050 :     oc.addDescription("save-commented", "Configuration", TL("Adds comments to saved template, configuration, or schema"));
      63        50525 : }
      64              : 
      65              : 
      66              : void
      67        50525 : SystemFrame::addReportOptions(OptionsCont& oc) {
      68        50525 :     oc.addOptionSubTopic("Report");
      69              : 
      70        50525 :     oc.doRegister("verbose", 'v', new Option_Bool(false));
      71       101050 :     oc.addDescription("verbose", "Report", TL("Switches to verbose output"));
      72              : 
      73        50525 :     oc.doRegister("print-options", new Option_Bool(false));
      74       101050 :     oc.addDescription("print-options", "Report", TL("Prints option values before processing"));
      75              : 
      76        50525 :     oc.doRegister("help", '?', new Option_BoolExtended(false));
      77       101050 :     oc.addDescription("help", "Report", TL("Prints this screen or selected topics"));
      78              : 
      79        50525 :     oc.doRegister("version", 'V', new Option_Bool(false));
      80       101050 :     oc.addDescription("version", "Report", TL("Prints the current version"));
      81              : 
      82       101050 :     oc.doRegister("xml-validation", 'X', new Option_String("local"));
      83       101050 :     oc.addDescription("xml-validation", "Report", "Set schema validation scheme of XML inputs (\"never\", \"local\", \"auto\" or \"always\")");
      84              : 
      85       101050 :     if (oc.exists("net-file")) {
      86        96594 :         oc.doRegister("xml-validation.net", new Option_String("never"));
      87        96594 :         oc.addDescription("xml-validation.net", "Report", "Set schema validation scheme of SUMO network inputs (\"never\", \"local\", \"auto\" or \"always\")");
      88              :     }
      89              : 
      90       101050 :     if (oc.exists("route-files")) {
      91        91488 :         oc.doRegister("xml-validation.routes", new Option_String("local"));
      92        91488 :         oc.addDescription("xml-validation.routes", "Report", "Set schema validation scheme of SUMO route inputs (\"never\", \"local\", \"auto\" or \"always\")");
      93              :     }
      94              : 
      95        50525 :     oc.doRegister("no-warnings", 'W', new Option_Bool(false));
      96       101050 :     oc.addSynonyme("no-warnings", "suppress-warnings", true);
      97       101050 :     oc.addDescription("no-warnings", "Report", TL("Disables output of warnings"));
      98              : 
      99        50525 :     oc.doRegister("aggregate-warnings", new Option_Integer(-1));
     100       101050 :     oc.addDescription("aggregate-warnings", "Report", TL("Aggregate warnings of the same type whenever more than INT occur"));
     101              : 
     102        50525 :     oc.doRegister("log", 'l', new Option_FileName());
     103       101050 :     oc.addSynonyme("log", "log-file");
     104       101050 :     oc.addDescription("log", "Report", TL("Writes all messages to FILE (implies verbose)"));
     105              : 
     106        50525 :     oc.doRegister("message-log", new Option_FileName());
     107       101050 :     oc.addDescription("message-log", "Report", TL("Writes all non-error messages to FILE (implies verbose)"));
     108              : 
     109        50525 :     oc.doRegister("error-log", new Option_FileName());
     110       101050 :     oc.addDescription("error-log", "Report", TL("Writes all warnings and errors to FILE"));
     111              : 
     112        50525 :     oc.doRegister("log.timestamps", new Option_Bool(false));
     113       101050 :     oc.addDescription("log.timestamps", "Report", TL("Writes timestamps in front of all messages"));
     114              : 
     115        50525 :     oc.doRegister("log.processid", new Option_Bool(false));
     116       101050 :     oc.addDescription("log.processid", "Report", TL("Writes process ID in front of all messages"));
     117              : 
     118       101050 :     oc.doRegister("language", new Option_String(gLanguage));
     119       101050 :     oc.addDescription("language", "Report", TL("Language to use in messages"));
     120              : 
     121        50525 :     oc.doRegister("write-license", new Option_Bool(false));
     122       101050 :     oc.addDescription("write-license", "Output", TL("Include license info into every output file"));
     123              : 
     124        50525 :     oc.doRegister("write-metadata", new Option_Bool(false));
     125       101050 :     oc.addDescription("write-metadata", "Output", TL("Write parsable metadata (configuration etc.) instead of comments"));
     126              : 
     127        50525 :     oc.doRegister("output-prefix", new Option_String());
     128       101050 :     oc.addDescription("output-prefix", "Output", TL("Prefix which is applied to all output files. The special string 'TIME' is replaced by the current time."));
     129              : 
     130        50525 :     oc.doRegister("output-suffix", new Option_String());
     131       101050 :     oc.addDescription("output-suffix", "Output", TL("Suffix which is applied to all output files. The special string 'TIME' is replaced by the current time."));
     132              : 
     133        50525 :     oc.doRegister("precision", new Option_Integer(2));
     134       101050 :     oc.addDescription("precision", "Output", TL("Defines the number of digits after the comma for floating point output"));
     135              : 
     136        50525 :     oc.doRegister("precision.geo", new Option_Integer(6));
     137       101050 :     oc.addDescription("precision.geo", "Output", TL("Defines the number of digits after the comma for lon,lat output"));
     138              : 
     139        50525 :     oc.doRegister("output.compression", new Option_String());
     140       101050 :     oc.addDescription("output.compression", "Output", TL("Defines the standard compression algorithm (currently only for parquet output)"));
     141              : 
     142       101050 :     oc.doRegister("output.format", new Option_String("xml"));
     143       101050 :     oc.addDescription("output.format", "Output", TL("Defines the standard output format if not derivable from the file name ('xml', 'csv', 'parquet')"));
     144              : 
     145       101050 :     oc.doRegister("output.column-header", new Option_String("tag"));
     146       101050 :     oc.addDescription("output.column-header", "Output", TL("How to derive column headers from attribute names ('none', 'tag', 'auto', 'plain')"));
     147              : 
     148       101050 :     oc.doRegister("output.column-separator", new Option_String(";"));
     149       101050 :     oc.addDescription("output.column-separator", "Output", TL("Separator in CSV output"));
     150              : 
     151        50525 :     oc.doRegister("human-readable-time", 'H', new Option_Bool(false));
     152       101050 :     oc.addDescription("human-readable-time", "Output", TL("Write time values as hour:minute:second or day:hour:minute:second rather than seconds"));
     153        50525 : }
     154              : 
     155              : 
     156              : bool
     157        80040 : SystemFrame::checkOptions(OptionsCont& oc) {
     158        80040 :     gPrecision = oc.getInt("precision");
     159       160080 :     if (oc.exists("emission-output.precision")) {
     160        73385 :         gPrecisionEmissions = oc.getInt("emission-output.precision");
     161              :     }
     162        80040 :     gPrecisionGeo = oc.getInt("precision.geo");
     163        80040 :     gHumanReadableTime = oc.getBool("human-readable-time");
     164       160080 :     if (oc.exists("weights.random-factor")) {
     165        76796 :         gWeightsRandomFactor = oc.getFloat("weights.random-factor");
     166              :     }
     167       160080 :     if (oc.exists("persontrip.walk-opposite-factor")) {
     168        76796 :         gWeightsWalkOppositeFactor = oc.getFloat("persontrip.walk-opposite-factor");
     169              :     }
     170       264899 :     if (oc.exists("xml-validation.routes") && oc.isDefault("xml-validation.routes") && !oc.isDefault("xml-validation")) {
     171       140808 :         oc.setDefault("xml-validation.routes", oc.getString("xml-validation"));
     172              :     }
     173        86136 :     if ((oc.exists("ignore-errors") && oc.getBool("ignore-errors")) || gSimulation) {
     174        73839 :         gIgnoreUnknownVClass = true;
     175              :     }
     176        80040 :     std::cout << std::setprecision(gPrecision);
     177        80040 :     return true;
     178              : }
     179              : 
     180              : 
     181              : void
     182        50872 : SystemFrame::close() {
     183              :     // flush aggregated warnings
     184        50872 :     MsgHandler::getWarningInstance()->clear();
     185              :     // close all output devices
     186        50872 :     OutputDevice::closeAll();
     187              :     // close the xml-subsystem
     188        50872 :     XMLSubSys::close();
     189              :     // delete build program options
     190        50872 :     OptionsCont::getOptions().clear();
     191              :     // delete messages
     192        50872 :     MsgHandler::cleanupOnEnd();
     193        50872 : }
     194              : 
     195              : 
     196              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1