LCOV - code coverage report
Current view: top level - src/moab - FileOptions.hpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 4 4 100.0 %
Date: 2020-12-16 07:07:30 Functions: 2 2 100.0 %
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :  * MOAB, a Mesh-Oriented datABase, is a software component for creating,
       3                 :            :  * storing and accessing finite element mesh data.
       4                 :            :  *
       5                 :            :  * Copyright 2004 Sandia Corporation.  Under the terms of Contract
       6                 :            :  * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
       7                 :            :  * retains certain rights in this software.
       8                 :            :  *
       9                 :            :  * This library is free software; you can redistribute it and/or
      10                 :            :  * modify it under the terms of the GNU Lesser General Public
      11                 :            :  * License as published by the Free Software Foundation; either
      12                 :            :  * version 2.1 of the License, or (at your option) any later version.
      13                 :            :  *
      14                 :            :  */
      15                 :            : 
      16                 :            : /**\file FileOptions.hpp
      17                 :            :  *\author Jason Kraftcheck ([email protected])
      18                 :            :  *\date 2007-08-21
      19                 :            :  */
      20                 :            : 
      21                 :            : #ifndef FILE_OPTIONS_HPP
      22                 :            : #define FILE_OPTIONS_HPP
      23                 :            : 
      24                 :            : #include <string>
      25                 :            : #include <vector>
      26                 :            : #include "moab/Types.hpp"
      27                 :            : 
      28                 :            : namespace moab
      29                 :            : {
      30                 :            : 
      31                 :            : /**\brief Parse options string passed to file IO routines
      32                 :            :  *
      33                 :            :  * This is a utility class used by file-IO-related code to
      34                 :            :  * parse the options string passed to Core::load_file and
      35                 :            :  * Core::write_file
      36                 :            :  */
      37                 :            : class FileOptions
      38                 :            : {
      39                 :            :   public:
      40                 :            :     /*\param options_string The concatenation of a list of
      41                 :            :      *          options, separated either by the default separator
      42                 :            :      *          (semicolon) with a custom separator specified at
      43                 :            :      *          the beginning of the string (semicolon followed by
      44                 :            :      *          destired separator character.)
      45                 :            :      */
      46                 :            :     FileOptions( const char* option_string );
      47                 :            : 
      48                 :            :     FileOptions( const FileOptions& copy );
      49                 :            :     FileOptions& operator=( const FileOptions& copy );
      50                 :            : 
      51                 :            :     ~FileOptions();
      52                 :            : 
      53                 :            :     /**\brief Check for option with no value
      54                 :            :      *
      55                 :            :      * Check for an option w/out a value.
      56                 :            :      *\param name The option name
      57                 :            :      *\return - MB_SUCCESS if option is found
      58                 :            :      *        - MB_TYPE_OUT_OF_RANGE if options is found, but has value
      59                 :            :      *        - MB_ENTITY_NOT_FOUND if option is not found.
      60                 :            :      */
      61                 :            :     ErrorCode get_null_option( const char* name ) const;
      62                 :            : 
      63                 :            :     /**\brief Check for option with boolean (true/false, yes/no) value.
      64                 :            :      *
      65                 :            :      * Check for an option with a true/false value.  Allowable values
      66                 :            :      * are "true", "false", "yes", "no", "1", "0", "on", "off".
      67                 :            :      *\param name The option name
      68                 :            :      *\param default_value The value to return if the option is not specified.
      69                 :            :      *\param value The resulting value.  This argument is set to the passed
      70                 :            :      *            default value if the option is not found.
      71                 :            :      *\return - MB_TYPE_OUT_OF_RANGE if options is found, but has an invalid value
      72                 :            :      *        - MB_SUCCESS otherwise
      73                 :            :      */
      74                 :            :     ErrorCode get_toggle_option( const char* name, bool default_value, bool& value ) const;
      75                 :            : 
      76                 :            :     /**\brief Check for option with an integer value.
      77                 :            :      *
      78                 :            :      * Check for an option with an integer value
      79                 :            :      *\param name The option name
      80                 :            :      *\param value Output. The value.
      81                 :            :      *\return - MB_SUCCESS if option is found
      82                 :            :      *        - MB_TYPE_OUT_OF_RANGE if options is found, but does not have an integer value
      83                 :            :      *        - MB_ENTITY_NOT_FOUND if option is not found.
      84                 :            :      */
      85                 :            :     ErrorCode get_int_option( const char* name, int& value ) const;
      86                 :            : 
      87                 :            :     /**\brief Check for option with an integer value.  Accept option with no value.
      88                 :            :      *
      89                 :            :      * Check for an option with an integer value.
      90                 :            :      * If the option is found but has no value specified, then
      91                 :            :      * pass back the user-specified default value.
      92                 :            :      *
      93                 :            :      *\NOTE:  This function will not pass back the default_val, but will instead
      94                 :            :      *        return MB_ENTITY_NOT_FOUND if the option is not specified at all.
      95                 :            :      *        The default value is returned only when the option is specified,
      96                 :            :      *        but is specified w/out a value.
      97                 :            :      *
      98                 :            :      *\param name The option name
      99                 :            :      *\param default_val The default value for the option.
     100                 :            :      *\param value Output. The value.
     101                 :            :      *\return - MB_SUCCESS if option is found
     102                 :            :      *        - MB_TYPE_OUT_OF_RANGE if options is found but has a value that cannot be parsed as an
     103                 :            :      *int
     104                 :            :      *        - MB_ENTITY_NOT_FOUND if option is not found.
     105                 :            :      */
     106                 :            :     ErrorCode get_int_option( const char* name, int default_val, int& value ) const;
     107                 :            : 
     108                 :            :     /**\brief Check for option with a double value.
     109                 :            :      *
     110                 :            :      * Check for an option with a double value
     111                 :            :      *\param name The option name
     112                 :            :      *\param value Output. The value.
     113                 :            :      *\return - MB_SUCCESS if option is found
     114                 :            :      *        - MB_TYPE_OUT_OF_RANGE if options is found, but does not have a double value
     115                 :            :      *        - MB_ENTITY_NOT_FOUND if option is not found.
     116                 :            :      */
     117                 :            :     ErrorCode get_real_option( const char* name, double& value ) const;
     118                 :            : 
     119                 :            :     /**\brief Check for option with any value.
     120                 :            :      *
     121                 :            :      * Check for an option with any value.
     122                 :            :      *\param name The option name
     123                 :            :      *\param value Output. The value.
     124                 :            :      *\return - MB_SUCCESS if option is found
     125                 :            :      *        - MB_TYPE_OUT_OF_RANGE if options is found, but does not have a value
     126                 :            :      *        - MB_ENTITY_NOT_FOUND if option is not found.
     127                 :            :      */
     128                 :            :     ErrorCode get_str_option( const char* name, std::string& value ) const;
     129                 :            : 
     130                 :            :     /**\brief Check for option
     131                 :            :      *
     132                 :            :      * Check for an option
     133                 :            :      *\param name The option name
     134                 :            :      *\param value The option value, or an empty string if no value.
     135                 :            :      *\return MB_SUCCESS or MB_ENTITY_NOT_FOUND
     136                 :            :      */
     137                 :            :     ErrorCode get_option( const char* name, std::string& value ) const;
     138                 :            : 
     139                 :            :     /**\brief Check the string value of an option
     140                 :            :      *
     141                 :            :      * Check which of a list of possible values a string option contains.
     142                 :            :      *\param name The option name
     143                 :            :      *\param values A NULL-terminated array of C-style strings enumerating
     144                 :            :      *              the possible option values.
     145                 :            :      *\param index  Output: The index into <code>values</code> for the
     146                 :            :      *              option value.
     147                 :            :      *\return MB_SUCCESS if matched name and value.
     148                 :            :      *        MB_ENTITY_NOT_FOUND if the option was not specified
     149                 :            :      *        MB_FAILURE if the option value is not in the input <code>values</code> array.
     150                 :            :      */
     151                 :            :     ErrorCode match_option( const char* name, const char* const* values, int& index ) const;
     152                 :            : 
     153                 :            :     /**\brief Check if an option matches a string value
     154                 :            :      *
     155                 :            :      * Check if the value for an option is the passed string.
     156                 :            :      *\param name The option name
     157                 :            :      *\param value The expected value.
     158                 :            :      *\return MB_SUCCESS if matched name and value.
     159                 :            :      *        MB_ENTITY_NOT_FOUND if the option was not specified
     160                 :            :      *        MB_FAILURE if the option value doesn't match the passed string/
     161                 :            :      */
     162                 :            :     ErrorCode match_option( const char* name, const char* value ) const;
     163                 :            : 
     164                 :            :     /**\brief Check for option for which the value is a list of ints
     165                 :            :      *
     166                 :            :      * Check for an option which is an int list.  The value is expected to
     167                 :            :      * be a comma-separated list of int ranges, where an int range can be
     168                 :            :      * either a single integer value or a range of integer values separated
     169                 :            :      * by a dash ('-').
     170                 :            :      *
     171                 :            :      *\param name The option name
     172                 :            :      *\param values Output. The list of integer values.
     173                 :            :      *\return - MB_SUCCESS if option is found
     174                 :            :      *        - MB_TYPE_OUT_OF_RANGE if options is found, but does not contain an ID list
     175                 :            :      *        - MB_ENTITY_NOT_FOUND if option is not found.
     176                 :            :      */
     177                 :            :     ErrorCode get_ints_option( const char* name, std::vector< int >& values ) const;
     178                 :            : 
     179                 :            :     /**\brief Check for option for which the value is a list of doubles
     180                 :            :      *
     181                 :            :      * Check for an option which is a double list.  The value is expected to
     182                 :            :      * be a comma-separated list of double values
     183                 :            :      *
     184                 :            :      *\param name The option name
     185                 :            :      *\param values Output. The list of double values.
     186                 :            :      *\return - MB_SUCCESS if option is found
     187                 :            :      *        - MB_TYPE_OUT_OF_RANGE if options is found, but does not contain an ID list
     188                 :            :      *        - MB_ENTITY_NOT_FOUND if option is not found.
     189                 :            :      */
     190                 :            :     ErrorCode get_reals_option( const char* name, std::vector< double >& values ) const;
     191                 :            : 
     192                 :            :     /**\brief Check for option for which the value is a list of strings
     193                 :            :      *
     194                 :            :      * Check for an option which is a string list.  The value is expected to
     195                 :            :      * be a comma-separated list of string values, with no embedded spaces or commas.
     196                 :            :      *
     197                 :            :      *\param name The option name
     198                 :            :      *\param values Output. The list of string values.
     199                 :            :      *\return - MB_SUCCESS if option is found
     200                 :            :      *        - MB_TYPE_OUT_OF_RANGE if options is found, but does not contain a string list
     201                 :            :      *        - MB_ENTITY_NOT_FOUND if option is not found.
     202                 :            :      */
     203                 :            :     ErrorCode get_strs_option( const char* name, std::vector< std::string >& values ) const;
     204                 :            : 
     205                 :            :     /** number of options */
     206                 :         10 :     inline unsigned size() const
     207                 :            :     {
     208                 :         10 :         return mOptions.size();
     209                 :            :     }
     210                 :            : 
     211                 :            :     /** true if no options */
     212                 :          4 :     inline bool empty() const
     213                 :            :     {
     214                 :          4 :         return mOptions.empty();
     215                 :            :     }
     216                 :            : 
     217                 :            :     /** Get list of options */
     218                 :            :     void get_options( std::vector< std::string >& list ) const;
     219                 :            : 
     220                 :            :     /** Check if all options have been looked at */
     221                 :            :     bool all_seen() const;
     222                 :            : 
     223                 :            :     /** Mark all options as seen.  USed for non-root procs during bcast-delete read */
     224                 :            :     void mark_all_seen() const;
     225                 :            : 
     226                 :            :     /** Get first unseen option */
     227                 :            :     ErrorCode get_unseen_option( std::string& value ) const;
     228                 :            : 
     229                 :            :   private:
     230                 :            :     /**\brief Check for option
     231                 :            :      *
     232                 :            :      * Check for an option
     233                 :            :      *\param name The option name
     234                 :            :      *\param value The option value, or an empty string if no value.
     235                 :            :      *\return MB_SUCCESS or MB_ENTITY_NOT_FOUND
     236                 :            :      */
     237                 :            :     ErrorCode get_option( const char* name, const char*& value ) const;
     238                 :            : 
     239                 :            :     char* mData;
     240                 :            :     std::vector< const char* > mOptions;
     241                 :            :     mutable std::vector< bool > mSeen;
     242                 :            : 
     243                 :            :     /** Case-insensitive compare of name with option value. */
     244                 :            :     static bool compare( const char* name, const char* option );
     245                 :            : };
     246                 :            : 
     247                 :            : }  // namespace moab
     248                 :            : 
     249                 :            : #endif

Generated by: LCOV version 1.11