![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 /*
00002 * MOAB, a Mesh-Oriented datABase, is a software component for creating,
00003 * storing and accessing finite element mesh data.
00004 *
00005 * Copyright 2004 Sandia Corporation. Under the terms of Contract
00006 * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
00007 * retains certain rights in this software.
00008 *
00009 * This library is free software; you can redistribute it and/or
00010 * modify it under the terms of the GNU Lesser General Public
00011 * License as published by the Free Software Foundation; either
00012 * version 2.1 of the License, or (at your option) any later version.
00013 *
00014 */
00015
00016 /**\file FileOptions.hpp
00017 *\author Jason Kraftcheck (kraftche@cae.wisc.edu)
00018 *\date 2007-08-21
00019 */
00020
00021 #ifndef FILE_OPTIONS_HPP
00022 #define FILE_OPTIONS_HPP
00023
00024 #include
00025 #include
00026 #include "moab/Types.hpp"
00027
00028 namespace moab
00029 {
00030
00031 /**\brief Parse options string passed to file IO routines
00032 *
00033 * This is a utility class used by file-IO-related code to
00034 * parse the options string passed to Core::load_file and
00035 * Core::write_file
00036 */
00037 class MOAB_EXPORT FileOptions
00038 {
00039 public:
00040 /*\param options_string The concatenation of a list of
00041 * options, separated either by the default separator
00042 * (semicolon) with a custom separator specified at
00043 * the beginning of the string (semicolon followed by
00044 * destired separator character.)
00045 */
00046 FileOptions( const char* option_string );
00047
00048 FileOptions( const FileOptions& copy );
00049 FileOptions& operator=( const FileOptions& copy );
00050
00051 ~FileOptions();
00052
00053 /**\brief Check for option with no value
00054 *
00055 * Check for an option w/out a value.
00056 *\param name The option name
00057 *\return - MB_SUCCESS if option is found
00058 * - MB_TYPE_OUT_OF_RANGE if options is found, but has value
00059 * - MB_ENTITY_NOT_FOUND if option is not found.
00060 */
00061 ErrorCode get_null_option( const char* name ) const;
00062
00063 /**\brief Check for option with boolean (true/false, yes/no) value.
00064 *
00065 * Check for an option with a true/false value. Allowable values
00066 * are "true", "false", "yes", "no", "1", "0", "on", "off".
00067 *\param name The option name
00068 *\param default_value The value to return if the option is not specified.
00069 *\param value The resulting value. This argument is set to the passed
00070 * default value if the option is not found.
00071 *\return - MB_TYPE_OUT_OF_RANGE if options is found, but has an invalid value
00072 * - MB_SUCCESS otherwise
00073 */
00074 ErrorCode get_toggle_option( const char* name, bool default_value, bool& value ) const;
00075
00076 /**\brief Check for option with an integer value.
00077 *
00078 * Check for an option with an integer value
00079 *\param name The option name
00080 *\param value Output. The value.
00081 *\return - MB_SUCCESS if option is found
00082 * - MB_TYPE_OUT_OF_RANGE if options is found, but does not have an integer value
00083 * - MB_ENTITY_NOT_FOUND if option is not found.
00084 */
00085 ErrorCode get_int_option( const char* name, int& value ) const;
00086
00087 /**\brief Check for option with an integer value. Accept option with no value.
00088 *
00089 * Check for an option with an integer value.
00090 * If the option is found but has no value specified, then
00091 * pass back the user-specified default value.
00092 *
00093 *\NOTE: This function will not pass back the default_val, but will instead
00094 * return MB_ENTITY_NOT_FOUND if the option is not specified at all.
00095 * The default value is returned only when the option is specified,
00096 * but is specified w/out a value.
00097 *
00098 *\param name The option name
00099 *\param default_val The default value for the option.
00100 *\param value Output. The value.
00101 *\return - MB_SUCCESS if option is found
00102 * - MB_TYPE_OUT_OF_RANGE if options is found but has a value that cannot be parsed as an
00103 *int
00104 * - MB_ENTITY_NOT_FOUND if option is not found.
00105 */
00106 ErrorCode get_int_option( const char* name, int default_val, int& value ) const;
00107
00108 /**\brief Check for option with a double value.
00109 *
00110 * Check for an option with a double value
00111 *\param name The option name
00112 *\param value Output. The value.
00113 *\return - MB_SUCCESS if option is found
00114 * - MB_TYPE_OUT_OF_RANGE if options is found, but does not have a double value
00115 * - MB_ENTITY_NOT_FOUND if option is not found.
00116 */
00117 ErrorCode get_real_option( const char* name, double& value ) const;
00118
00119 /**\brief Check for option with any value.
00120 *
00121 * Check for an option with any value.
00122 *\param name The option name
00123 *\param value Output. The value.
00124 *\return - MB_SUCCESS if option is found
00125 * - MB_TYPE_OUT_OF_RANGE if options is found, but does not have a value
00126 * - MB_ENTITY_NOT_FOUND if option is not found.
00127 */
00128 ErrorCode get_str_option( const char* name, std::string& value ) const;
00129
00130 /**\brief Check for option
00131 *
00132 * Check for an option
00133 *\param name The option name
00134 *\param value The option value, or an empty string if no value.
00135 *\return MB_SUCCESS or MB_ENTITY_NOT_FOUND
00136 */
00137 ErrorCode get_option( const char* name, std::string& value ) const;
00138
00139 /**\brief Check the string value of an option
00140 *
00141 * Check which of a list of possible values a string option contains.
00142 *\param name The option name
00143 *\param values A NULL-terminated array of C-style strings enumerating
00144 * the possible option values.
00145 *\param index Output: The index into values
for the
00146 * option value.
00147 *\return MB_SUCCESS if matched name and value.
00148 * MB_ENTITY_NOT_FOUND if the option was not specified
00149 * MB_FAILURE if the option value is not in the input values
array.
00150 */
00151 ErrorCode match_option( const char* name, const char* const* values, int& index ) const;
00152
00153 /**\brief Check if an option matches a string value
00154 *
00155 * Check if the value for an option is the passed string.
00156 *\param name The option name
00157 *\param value The expected value.
00158 *\return MB_SUCCESS if matched name and value.
00159 * MB_ENTITY_NOT_FOUND if the option was not specified
00160 * MB_FAILURE if the option value doesn't match the passed string/
00161 */
00162 ErrorCode match_option( const char* name, const char* value ) const;
00163
00164 /**\brief Check for option for which the value is a list of ints
00165 *
00166 * Check for an option which is an int list. The value is expected to
00167 * be a comma-separated list of int ranges, where an int range can be
00168 * either a single integer value or a range of integer values separated
00169 * by a dash ('-').
00170 *
00171 *\param name The option name
00172 *\param values Output. The list of integer values.
00173 *\return - MB_SUCCESS if option is found
00174 * - MB_TYPE_OUT_OF_RANGE if options is found, but does not contain an ID list
00175 * - MB_ENTITY_NOT_FOUND if option is not found.
00176 */
00177 ErrorCode get_ints_option( const char* name, std::vector< int >& values ) const;
00178
00179 /**\brief Check for option for which the value is a list of doubles
00180 *
00181 * Check for an option which is a double list. The value is expected to
00182 * be a comma-separated list of double values
00183 *
00184 *\param name The option name
00185 *\param values Output. The list of double values.
00186 *\return - MB_SUCCESS if option is found
00187 * - MB_TYPE_OUT_OF_RANGE if options is found, but does not contain an ID list
00188 * - MB_ENTITY_NOT_FOUND if option is not found.
00189 */
00190 ErrorCode get_reals_option( const char* name, std::vector< double >& values ) const;
00191
00192 /**\brief Check for option for which the value is a list of strings
00193 *
00194 * Check for an option which is a string list. The value is expected to
00195 * be a comma-separated list of string values, with no embedded spaces or commas.
00196 *
00197 *\param name The option name
00198 *\param values Output. The list of string values.
00199 *\return - MB_SUCCESS if option is found
00200 * - MB_TYPE_OUT_OF_RANGE if options is found, but does not contain a string list
00201 * - MB_ENTITY_NOT_FOUND if option is not found.
00202 */
00203 ErrorCode get_strs_option( const char* name, std::vector< std::string >& values ) const;
00204
00205 /** number of options */
00206 inline unsigned size() const
00207 {
00208 return mOptions.size();
00209 }
00210
00211 /** true if no options */
00212 inline bool empty() const
00213 {
00214 return mOptions.empty();
00215 }
00216
00217 /** Get list of options */
00218 void get_options( std::vector< std::string >& list ) const;
00219
00220 /** Check if all options have been looked at */
00221 bool all_seen() const;
00222
00223 /** Mark all options as seen. USed for non-root procs during bcast-delete read */
00224 void mark_all_seen() const;
00225
00226 /** Get first unseen option */
00227 ErrorCode get_unseen_option( std::string& value ) const;
00228
00229 private:
00230 /**\brief Check for option
00231 *
00232 * Check for an option
00233 *\param name The option name
00234 *\param value The option value, or an empty string if no value.
00235 *\return MB_SUCCESS or MB_ENTITY_NOT_FOUND
00236 */
00237 ErrorCode get_option( const char* name, const char*& value ) const;
00238
00239 char* mData;
00240 std::vector< const char* > mOptions;
00241 mutable std::vector< bool > mSeen;
00242
00243 /** Case-insensitive compare of name with option value. */
00244 static bool compare( const char* name, const char* option );
00245 };
00246
00247 } // namespace moab
00248
00249 #endif