Branch data Line data Source code
1 : : /**\file CGMFileOptions.hpp
2 : : *\copied from MOAB
3 : : *\date 2009-06-11
4 : : */
5 : :
6 : : #ifndef CGM_FILE_OPTIONS_HPP
7 : : #define CGM_FILE_OPTIONS_HPP
8 : :
9 : : #include <string>
10 : : #include <vector>
11 : : #include "CubitDefines.h"
12 : :
13 : : /* file option type */
14 : : enum CGMFOErrorCode
15 : : {
16 : : FO_SUCCESS = 0,
17 : : FO_TYPE_OUT_OF_RANGE,
18 : : FO_ENTITY_NOT_FOUND,
19 : : FO_FAILURE
20 : : };
21 : :
22 : : /**\brief Parse options string passed to file IO routines
23 : : *
24 : : * This is a utility class used by file-IO-related code to
25 : : * parse the options string passed to ParallelMeshTool::load_file
26 : : */
27 : : class CGMFileOptions {
28 : : public:
29 : :
30 : : /*\param options_string The concatenation of a list of
31 : : * options, separated either by the default separator
32 : : * (semicolon) with a custom separator specified at
33 : : * the beginning of the string (semicolon followed by
34 : : * destired separator character.)
35 : : */
36 : : CGMFileOptions( const char* option_string );
37 : :
38 : : CGMFileOptions( const CGMFileOptions& copy );
39 : : CGMFileOptions& operator=( const CGMFileOptions& copy );
40 : :
41 : : ~CGMFileOptions();
42 : :
43 : : /**\brief Check for option with no value
44 : : *
45 : : * Check for an option w/out a value.
46 : : *\param name The option name
47 : : *\return - CUBIT_SUCCESS if option is found
48 : : * - CUBIT_TYPE_OUT_OF_RANGE if options is found, but has value
49 : : * - CUBIT_ENTITY_NOT_FOUND if option is not found.
50 : : */
51 : : CGMFOErrorCode get_null_option( const char* name ) const;
52 : :
53 : : /**\brief Check for option with an integer value.
54 : : *
55 : : * Check for an option with an integer value
56 : : *\param name The option name
57 : : *\param value Output. The value.
58 : : *\return - CUBIT_SUCCESS if option is found
59 : : * - CUBIT_TYPE_OUT_OF_RANGE if options is found, but does not have an integer value
60 : : * - CUBIT_ENTITY_NOT_FOUND if option is not found.
61 : : */
62 : : CGMFOErrorCode get_int_option( const char* name, int& value ) const;
63 : :
64 : : /**\brief Check for option with a double value.
65 : : *
66 : : * Check for an option with a double value
67 : : *\param name The option name
68 : : *\param value Output. The value.
69 : : *\return - CUBIT_SUCCESS if option is found
70 : : * - CUBIT_TYPE_OUT_OF_RANGE if options is found, but does not have a double value
71 : : * - CUBIT_ENTITY_NOT_FOUND if option is not found.
72 : : */
73 : : CGMFOErrorCode get_real_option( const char* name, double& value ) const;
74 : :
75 : : /**\brief Check for option with any value.
76 : : *
77 : : * Check for an option with any value.
78 : : *\param name The option name
79 : : *\param value Output. The value.
80 : : *\return - CUBIT_SUCCESS if option is found
81 : : * - CUBIT_TYPE_OUT_OF_RANGE if options is found, but does not have a value
82 : : * - CUBIT_ENTITY_NOT_FOUND if option is not found.
83 : : */
84 : : CGMFOErrorCode get_str_option( const char* name, std::string& value ) const;
85 : :
86 : : /**\brief Check for option
87 : : *
88 : : * Check for an option
89 : : *\param name The option name
90 : : *\param value The option value, or an empty string if no value.
91 : : *\return CUBIT_SUCCESS or CUBIT_ENTITY_NOT_FOUND
92 : : */
93 : : CGMFOErrorCode get_option( const char* name, std::string& value ) const;
94 : :
95 : : /**\brief Check the string value of an option
96 : : *
97 : : * Check which of a list of possible values a string option contains.
98 : : *\param name The option name
99 : : *\param values A NULL-terminated array of C-style strings enumerating
100 : : * the possible option values.
101 : : *\param index Output: The index into <code>values</code> for the
102 : : * option value.
103 : : *\return CUBIT_SUCCESS if matched name and value.
104 : : * CUBIT_ENTITY_NOT_FOUND if the option was not specified
105 : : * CUBIT_FAILURE if the option value is not in the input <code>values</code> array.
106 : : */
107 : : CGMFOErrorCode match_option( const char* name, const char* const* values, int& index ) const;
108 : :
109 : : /**\brief Check if an option matches a string value
110 : : *
111 : : * Check if the value for an option is the passed string.
112 : : *\param name The option name
113 : : *\param value The expected value.
114 : : *\return CUBIT_SUCCESS if matched name and value.
115 : : * CUBIT_ENTITY_NOT_FOUND if the option was not specified
116 : : * CUBIT_FAILURE if the option value doesn't match the passed string/
117 : : */
118 : : CGMFOErrorCode match_option( const char* name, const char* value ) const;
119 : :
120 : : /**\brief Check for option for which the value is a list of ints
121 : : *
122 : : * Check for an option which is an int list. The value is expected to
123 : : * be a comma-separated list of int ranges, where an int range can be
124 : : * either a single integer value or a range of integer values separated
125 : : * by a dash ('-').
126 : : *
127 : : *\param name The option name
128 : : *\param values Output. The list of integer values.
129 : : *\return - CUBIT_SUCCESS if option is found
130 : : * - CUBIT_TYPE_OUT_OF_RANGE if options is found, but does not contain an ID list
131 : : * - CUBIT_ENTITY_NOT_FOUND if option is not found.
132 : : */
133 : : CGMFOErrorCode get_ints_option( const char* name, std::vector<int>& values) const;
134 : :
135 : : /** number of options */
136 : 110 : inline unsigned size() const
137 : 110 : { return mOptions.size(); }
138 : :
139 : : /** true if no options */
140 : 44 : inline bool empty() const
141 : 44 : { return mOptions.empty(); }
142 : :
143 : : /** Get list of options */
144 : : void get_options( std::vector<std::string>& list ) const;
145 : :
146 : : private:
147 : :
148 : : /**\brief Check for option
149 : : *
150 : : * Check for an option
151 : : *\param name The option name
152 : : *\param value The option value, or an empty string if no value.
153 : : *\return CUBIT_SUCCESS or CUBIT_ENTITY_NOT_FOUND
154 : : */
155 : : CGMFOErrorCode get_option( const char* name, const char*& value) const;
156 : :
157 : : char* mData;
158 : : std::vector<const char*> mOptions;
159 : :
160 : : /** Case-insensitive compare of name with option value. */
161 : : static bool compare( const char* name, const char* option );
162 : : };
163 : :
164 : : #endif
165 : :
|