LCOV - code coverage report
Current view: top level - src/utils/options - OptionsIO.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    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        36247 :         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 2.0-1