LCOV - code coverage report
Current view: top level - src/utils/options - OptionsIO.h (source / functions) Hit Total Coverage
Test: lcov.info Lines: 1 1 100.0 %
Date: 2024-05-01 15:34:42 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    OptionsIO.h
      15             : /// @author  Daniel Krajzewicz
      16             : /// @author  Michael Behrisch
      17             : /// @date    Mon, 17 Dec 2001
      18             : ///
      19             : // Helper for parsing command line arguments and reading configuration files
      20             : /****************************************************************************/
      21             : #pragma once
      22             : #include <config.h>
      23             : 
      24             : #include <vector>
      25             : #include <string>
      26             : #include <chrono>
      27             : 
      28             : 
      29             : // ===========================================================================
      30             : // class declarations
      31             : // ===========================================================================
      32             : class OptionsCont;
      33             : 
      34             : 
      35             : // ===========================================================================
      36             : // class definitions
      37             : // ===========================================================================
      38             : /**
      39             :  * @class OptionsIO
      40             :  *
      41             :  * Helping methods for parsing of command line arguments and reading a
      42             :  *  configuration file.
      43             :  * Any errors are reported by throwing a ProcessError exception which
      44             :  *  contains a description about the failure.
      45             :  */
      46             : class OptionsIO {
      47             : public:
      48             :     /** @brief Stores the command line arguments for later parsing
      49             :      *
      50             :      * @param[in] argc number of arguments given at the command line
      51             :      * @param[in] argv arguments given at the command line
      52             :      */
      53             :     static void setArgs(int argc, char** argv);
      54             : 
      55             :     /** @brief Stores faked command line arguments for later parsing
      56             :     *
      57             :     * @param[in] args arguments given as substitute for the command line
      58             :     */
      59             :     static void setArgs(const std::vector<std::string>& args);
      60             : 
      61             :     /** @brief Return the number of command line arguments
      62             :      */
      63             :     static int getArgC() {
      64       29009 :         return (int)myArgs.size();
      65             :     }
      66             : 
      67             : 
      68             :     /** @brief Parses the command line arguments and loads the configuration
      69             :      *
      70             :      * Command line arguments are parsed, first, throwing a ProcessError
      71             :      *  if something fails. Then options are reset to being writeable and the
      72             :      *  configuration is loaded using "loadConfiguration". After this,
      73             :      *  the options are reset again and the command line arguments are
      74             :      *  reparsed.
      75             :      *
      76             :      * This workflow allows to read the name of a configuration file from
      77             :      *  command line arguments, first, then to load values from this configuration
      78             :      *  file and reset them by other values from the command line.
      79             :      */
      80             :     static void getOptions(const bool commandLineOnly = false);
      81             : 
      82             : 
      83             :     /** @brief Loads and parses the configuration
      84             :      *
      85             :      * The name of the configuration file is extracted from the global
      86             :      *  OptionsCont ("configuration-file" is used as the name of the option to get
      87             :      *  the name of the configuration).
      88             :      */
      89             :     static void loadConfiguration();
      90             : 
      91             : 
      92             :     /** @brief Retrieves the XML root element of a supposed configuration or net
      93             :      *
      94             :      * @param[in] filename the XML file to parse
      95             :      * @return the root element if any
      96             :      */
      97             :     static std::string getRoot(const std::string& filename);
      98             : 
      99             :     /** @brief Return the time stamp of the last init
     100             :      */
     101             :     static const std::chrono::time_point<std::chrono::system_clock>& getLoadTime() {
     102             :         return myLoadTime;
     103             :     }
     104             : 
     105             : 
     106             : private:
     107             :     static std::vector<std::string> myArgs;
     108             :     static std::chrono::time_point<std::chrono::system_clock> myLoadTime;
     109             : 
     110             : };

Generated by: LCOV version 1.14