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: 2025-12-06 15:35:27 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        48812 : SystemFrame::addConfigurationOptions(OptionsCont& oc) {
      39        48812 :     oc.addOptionSubTopic("Configuration");
      40              : 
      41        48812 :     oc.doRegister("configuration-file", 'c', new Option_FileName());
      42        97624 :     oc.addSynonyme("configuration-file", "configuration");
      43        97624 :     oc.addDescription("configuration-file", "Configuration", TL("Loads the named config on startup"));
      44        97624 :     oc.addXMLDefault("configuration-file");
      45              : 
      46        48812 :     oc.doRegister("save-configuration", 'C', new Option_FileName());
      47        97624 :     oc.addSynonyme("save-config", "save-configuration");
      48        97624 :     oc.addDescription("save-configuration", "Configuration", TL("Saves current configuration into FILE"));
      49              : 
      50        48812 :     oc.doRegister("save-configuration.relative", new Option_Bool(false));
      51        97624 :     oc.addSynonyme("save-config.relative", "save-configuration.relative");
      52        97624 :     oc.addDescription("save-configuration.relative", "Configuration", TL("Enforce relative paths when saving the configuration"));
      53              : 
      54        48812 :     oc.doRegister("save-template", new Option_FileName());
      55        97624 :     oc.addDescription("save-template", "Configuration", TL("Saves a configuration template (empty) into FILE"));
      56              : 
      57        48812 :     oc.doRegister("save-schema", new Option_FileName());
      58        97624 :     oc.addDescription("save-schema", "Configuration", TL("Saves the configuration schema into FILE"));
      59              : 
      60        48812 :     oc.doRegister("save-commented", new Option_Bool(false));
      61        97624 :     oc.addSynonyme("save-commented", "save-template.commented");
      62        97624 :     oc.addDescription("save-commented", "Configuration", TL("Adds comments to saved template, configuration, or schema"));
      63        48812 : }
      64              : 
      65              : 
      66              : void
      67        48812 : SystemFrame::addReportOptions(OptionsCont& oc) {
      68        48812 :     oc.addOptionSubTopic("Report");
      69              : 
      70        48812 :     oc.doRegister("verbose", 'v', new Option_Bool(false));
      71        97624 :     oc.addDescription("verbose", "Report", TL("Switches to verbose output"));
      72              : 
      73        48812 :     oc.doRegister("print-options", new Option_Bool(false));
      74        97624 :     oc.addDescription("print-options", "Report", TL("Prints option values before processing"));
      75              : 
      76        48812 :     oc.doRegister("help", '?', new Option_BoolExtended(false));
      77        97624 :     oc.addDescription("help", "Report", TL("Prints this screen or selected topics"));
      78              : 
      79        48812 :     oc.doRegister("version", 'V', new Option_Bool(false));
      80        97624 :     oc.addDescription("version", "Report", TL("Prints the current version"));
      81              : 
      82        97624 :     oc.doRegister("xml-validation", 'X', new Option_String("local"));
      83        97624 :     oc.addDescription("xml-validation", "Report", "Set schema validation scheme of XML inputs (\"never\", \"local\", \"auto\" or \"always\")");
      84              : 
      85        97624 :     if (oc.exists("net-file")) {
      86        93168 :         oc.doRegister("xml-validation.net", new Option_String("never"));
      87        93168 :         oc.addDescription("xml-validation.net", "Report", "Set schema validation scheme of SUMO network inputs (\"never\", \"local\", \"auto\" or \"always\")");
      88              :     }
      89              : 
      90        97624 :     if (oc.exists("route-files")) {
      91        88064 :         oc.doRegister("xml-validation.routes", new Option_String("local"));
      92        88064 :         oc.addDescription("xml-validation.routes", "Report", "Set schema validation scheme of SUMO route inputs (\"never\", \"local\", \"auto\" or \"always\")");
      93              :     }
      94              : 
      95        48812 :     oc.doRegister("no-warnings", 'W', new Option_Bool(false));
      96        97624 :     oc.addSynonyme("no-warnings", "suppress-warnings", true);
      97        97624 :     oc.addDescription("no-warnings", "Report", TL("Disables output of warnings"));
      98              : 
      99        48812 :     oc.doRegister("aggregate-warnings", new Option_Integer(-1));
     100        97624 :     oc.addDescription("aggregate-warnings", "Report", TL("Aggregate warnings of the same type whenever more than INT occur"));
     101              : 
     102        48812 :     oc.doRegister("log", 'l', new Option_FileName());
     103        97624 :     oc.addSynonyme("log", "log-file");
     104        97624 :     oc.addDescription("log", "Report", TL("Writes all messages to FILE (implies verbose)"));
     105              : 
     106        48812 :     oc.doRegister("message-log", new Option_FileName());
     107        97624 :     oc.addDescription("message-log", "Report", TL("Writes all non-error messages to FILE (implies verbose)"));
     108              : 
     109        48812 :     oc.doRegister("error-log", new Option_FileName());
     110        97624 :     oc.addDescription("error-log", "Report", TL("Writes all warnings and errors to FILE"));
     111              : 
     112        48812 :     oc.doRegister("log.timestamps", new Option_Bool(false));
     113        97624 :     oc.addDescription("log.timestamps", "Report", TL("Writes timestamps in front of all messages"));
     114              : 
     115        48812 :     oc.doRegister("log.processid", new Option_Bool(false));
     116        97624 :     oc.addDescription("log.processid", "Report", TL("Writes process ID in front of all messages"));
     117              : 
     118        97624 :     oc.doRegister("language", new Option_String(gLanguage));
     119        97624 :     oc.addDescription("language", "Report", TL("Language to use in messages"));
     120              : 
     121        48812 :     oc.doRegister("write-license", new Option_Bool(false));
     122        97624 :     oc.addDescription("write-license", "Output", TL("Include license info into every output file"));
     123              : 
     124        48812 :     oc.doRegister("write-metadata", new Option_Bool(false));
     125        97624 :     oc.addDescription("write-metadata", "Output", TL("Write parsable metadata (configuration etc.) instead of comments"));
     126              : 
     127        48812 :     oc.doRegister("output-prefix", new Option_String());
     128        97624 :     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        48812 :     oc.doRegister("output-suffix", new Option_String());
     131        97624 :     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        48812 :     oc.doRegister("precision", new Option_Integer(2));
     134        97624 :     oc.addDescription("precision", "Output", TL("Defines the number of digits after the comma for floating point output"));
     135              : 
     136        48812 :     oc.doRegister("precision.geo", new Option_Integer(6));
     137        97624 :     oc.addDescription("precision.geo", "Output", TL("Defines the number of digits after the comma for lon,lat output"));
     138              : 
     139        48812 :     oc.doRegister("output.compression", new Option_String());
     140        97624 :     oc.addDescription("output.compression", "Output", TL("Defines the standard compression algorithm (currently only for parquet output)"));
     141              : 
     142        97624 :     oc.doRegister("output.format", new Option_String("xml"));
     143        97624 :     oc.addDescription("output.format", "Output", TL("Defines the standard output format if not derivable from the file name ('xml', 'csv', 'parquet')"));
     144              : 
     145        97624 :     oc.doRegister("output.column-header", new Option_String("tag"));
     146        97624 :     oc.addDescription("output.column-header", "Output", TL("How to derive column headers from attribute names ('none', 'tag', 'auto', 'plain')"));
     147              : 
     148        97624 :     oc.doRegister("output.column-separator", new Option_String(";"));
     149        97624 :     oc.addDescription("output.column-separator", "Output", TL("Separator in CSV output"));
     150              : 
     151        48812 :     oc.doRegister("human-readable-time", 'H', new Option_Bool(false));
     152        97624 :     oc.addDescription("human-readable-time", "Output", TL("Write time values as hour:minute:second or day:hour:minute:second rather than seconds"));
     153        48812 : }
     154              : 
     155              : 
     156              : bool
     157        77500 : SystemFrame::checkOptions(OptionsCont& oc) {
     158        77500 :     gPrecision = oc.getInt("precision");
     159       155000 :     if (oc.exists("emission-output.precision")) {
     160        70866 :         gPrecisionEmissions = oc.getInt("emission-output.precision");
     161              :     }
     162        77500 :     gPrecisionGeo = oc.getInt("precision.geo");
     163        77500 :     gHumanReadableTime = oc.getBool("human-readable-time");
     164       155000 :     if (oc.exists("weights.random-factor")) {
     165        74256 :         gWeightsRandomFactor = oc.getFloat("weights.random-factor");
     166              :     }
     167       155000 :     if (oc.exists("persontrip.walk-opposite-factor")) {
     168        74256 :         gWeightsWalkOppositeFactor = oc.getFloat("persontrip.walk-opposite-factor");
     169              :     }
     170       254866 :     if (oc.exists("xml-validation.routes") && oc.isDefault("xml-validation.routes") && !oc.isDefault("xml-validation")) {
     171       140427 :         oc.setDefault("xml-validation.routes", oc.getString("xml-validation"));
     172              :     }
     173        83575 :     if ((oc.exists("ignore-errors") && oc.getBool("ignore-errors")) || gSimulation) {
     174        71315 :         gIgnoreUnknownVClass = true;
     175              :     }
     176        77500 :     std::cout << std::setprecision(gPrecision);
     177        77500 :     return true;
     178              : }
     179              : 
     180              : 
     181              : void
     182        49156 : SystemFrame::close() {
     183              :     // flush aggregated warnings
     184        49156 :     MsgHandler::getWarningInstance()->clear();
     185              :     // close all output devices
     186        49156 :     OutputDevice::closeAll();
     187              :     // close the xml-subsystem
     188        49156 :     XMLSubSys::close();
     189              :     // delete build program options
     190        49156 :     OptionsCont::getOptions().clear();
     191              :     // delete messages
     192        49156 :     MsgHandler::cleanupOnEnd();
     193        49156 : }
     194              : 
     195              : 
     196              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1