9 #ifndef CConfigFileBase_H 10 #define CConfigFileBase_H 33 virtual void writeString(
const std::string §ion,
const std::string &name,
const std::string &str) = 0;
36 void writeString(
const std::string §ion,
const std::string &name,
const std::string &str,
const int name_padding_width,
const int value_padding_width,
const std::string &comment);
41 virtual std::string readString(
42 const std::string §ion,
43 const std::string &name,
44 const std::string &defaultStr,
45 bool failIfNotFound =
false)
const = 0;
56 virtual void getAllSections(
vector_string §ions )
const = 0 ;
60 virtual void getAllKeys(
const std::string section,
vector_string &keys )
const = 0;
63 bool sectionExists(
const std::string §ion_name)
const;
67 void write(
const std::string §ion,
const std::string &name,
double value,
const int name_padding_width=-1,
const int value_padding_width=-1,
const std::string &comment = std::string() );
68 void write(
const std::string §ion,
const std::string &name,
float value ,
const int name_padding_width=-1,
const int value_padding_width=-1,
const std::string &comment = std::string() );
69 void write(
const std::string §ion,
const std::string &name,
int value ,
const int name_padding_width=-1,
const int value_padding_width=-1,
const std::string &comment = std::string() );
70 void write(
const std::string §ion,
const std::string &name, uint32_t value ,
const int name_padding_width=-1,
const int value_padding_width=-1,
const std::string &comment = std::string() );
71 void write(
const std::string §ion,
const std::string &name, uint64_t value,
const int name_padding_width=-1,
const int value_padding_width=-1,
const std::string &comment = std::string() );
72 void write(
const std::string §ion,
const std::string &name,
const std::string &value ,
const int name_padding_width=-1,
const int value_padding_width=-1,
const std::string &comment = std::string() );
73 void write(
const std::string §ion,
const std::string &name,
const std::vector<int> &value ,
const int name_padding_width=-1,
const int value_padding_width=-1,
const std::string &comment = std::string() );
74 void write(
const std::string §ion,
const std::string &name,
const std::vector<unsigned int> &value,
const int name_padding_width=-1,
const int value_padding_width=-1,
const std::string &comment = std::string() );
75 void write(
const std::string §ion,
const std::string &name,
const std::vector<float> &value ,
const int name_padding_width=-1,
const int value_padding_width=-1,
const std::string &comment = std::string() );
76 void write(
const std::string §ion,
const std::string &name,
const std::vector<double> &value,
const int name_padding_width=-1,
const int value_padding_width=-1,
const std::string &comment = std::string() );
77 void write(
const std::string §ion,
const std::string &name,
const std::vector<bool> &value ,
const int name_padding_width=-1,
const int value_padding_width=-1,
const std::string &comment = std::string() );
83 double read_double(
const std::string §ion,
const std::string &name,
double defaultValue,
bool failIfNotFound =
false)
const;
88 float read_float(
const std::string §ion,
const std::string &name,
float defaultValue,
bool failIfNotFound =
false)
const;
93 bool read_bool(
const std::string §ion,
const std::string &name,
bool defaultValue,
bool failIfNotFound =
false)
const;
98 int read_int(
const std::string §ion,
const std::string &name,
int defaultValue,
bool failIfNotFound =
false)
const;
103 uint64_t read_uint64_t(
const std::string §ion,
const std::string &name, uint64_t defaultValue,
bool failIfNotFound =
false )
const;
108 std::string read_string(
const std::string §ion,
const std::string &name,
const std::string &defaultValue,
bool failIfNotFound =
false)
const;
113 std::string read_string_first_word(
const std::string §ion,
const std::string &name,
const std::string &defaultValue,
bool failIfNotFound =
false)
const;
118 template <
class VECTOR_TYPE>
120 const std::string & section,
121 const std::string & name,
122 const VECTOR_TYPE & defaultValue,
123 VECTOR_TYPE & outValues,
124 bool failIfNotFound =
false)
const 126 std::string aux ( readString(section, name,
"",failIfNotFound ) );
128 std::vector<std::string> tokens;
131 if (tokens.size()==0)
133 outValues = defaultValue;
138 const size_t N = tokens.size();
139 outValues.resize( N );
140 for (
size_t i=0;i<N;i++)
142 std::stringstream ss(tokens[i]);
153 template <
class MATRIX_TYPE>
155 const std::string §ion,
156 const std::string &name,
157 MATRIX_TYPE &outMatrix,
158 const MATRIX_TYPE &defaultMatrix = MATRIX_TYPE(),
159 bool failIfNotFound =
false )
const 161 std::string aux = readString(section, name,
"",failIfNotFound );
163 outMatrix = defaultMatrix;
167 if (!outMatrix.fromMatlabStringFormat(aux))
190 template <
typename ENUMTYPE>
191 ENUMTYPE
read_enum(
const std::string §ion,
const std::string &name,
const ENUMTYPE &defaultValue,
bool failIfNotFound =
false)
const 194 const std::string sVal = read_string_first_word(section,name,
"",failIfNotFound);
195 if (sVal.empty())
return defaultValue;
197 if (::isdigit(sVal[0]))
199 return static_cast<ENUMTYPE
>(::atoi(&sVal[0]));
205 }
catch (std::exception &)
207 THROW_EXCEPTION(
format(
"Invalid value '%s' for enum type while reading key='%s'.",sVal.c_str(),name.c_str()))
219 #define MRPT_LOAD_CONFIG_VAR(variableName,variableType,configFileObject,sectionNameStr) \ 220 { variableName = configFileObject.read_##variableType(sectionNameStr,#variableName,variableName); } 224 #define MRPT_LOAD_CONFIG_VAR_DEGREES(variableName,configFileObject,sectionNameStr) \ 225 { variableName = DEG2RAD( configFileObject.read_float(sectionNameStr,#variableName, RAD2DEG(variableName)) ); } 227 #define MRPT_LOAD_CONFIG_VAR_CAST(variableName,variableType,variableTypeCast,configFileObject,sectionNameStr) \ 228 { variableName = static_cast<variableTypeCast>(configFileObject.read_##variableType(sectionNameStr,#variableName,variableName)); } 231 #define MRPT_LOAD_HERE_CONFIG_VAR(variableName,variableType,targetVariable,configFileObject,sectionNameStr) \ 232 targetVariable = configFileObject.read_##variableType(sectionNameStr,#variableName,targetVariable,false); 234 #define MRPT_LOAD_HERE_CONFIG_VAR_NO_DEFAULT(variableName,variableType,targetVariable,configFileObject,sectionNameStr) \ 236 targetVariable = configFileObject.read_##variableType(sectionNameStr,#variableName,targetVariable,true); \ 237 } catch (std::exception &) \ 239 THROW_EXCEPTION( format( "Value for '%s' not found in config file", static_cast<const char*>(#variableName ) )); \ 243 #define MRPT_LOAD_CONFIG_VAR_NO_DEFAULT(variableName,variableType,configFileObject,sectionNameStr) \ 245 variableName = configFileObject.read_##variableType(sectionNameStr,#variableName,variableName,true); \ 246 } catch (std::exception &) \ 248 THROW_EXCEPTION( format( "Value for '%s' not found in config file", static_cast<const char*>(#variableName ) )); \ 251 #define MRPT_LOAD_CONFIG_VAR_CAST_NO_DEFAULT(variableName,variableType,variableTypeCast,configFileObject,sectionNameStr) \ 253 variableName = static_cast<variableTypeCast>(configFileObject.read_##variableType(sectionNameStr,#variableName,variableName,true)); \ 254 } catch (std::exception &) \ 256 THROW_EXCEPTION( format( "Value for '%s' not found in config file", static_cast<const char*>(#variableName ) )); \ 260 #define MRPT_LOAD_HERE_CONFIG_VAR_CAST(variableName,variableType,variableTypeCast,targetVariable,configFileObject,sectionNameStr) \ 261 targetVariable = static_cast<variableTypeCast>(configFileObject.read_##variableType(sectionNameStr,#variableName,targetVariable)); 263 #define MRPT_LOAD_HERE_CONFIG_VAR_CAST_NO_DEFAULT(variableName,variableType,variableTypeCast,targetVariable,configFileObject,sectionNameStr) \ 265 targetVariable = static_cast<variableTypeCast>(configFileObject.read_##variableType(sectionNameStr,#variableName,targetVariable,true)); \ 266 } catch (std::exception &) \ 268 THROW_EXCEPTION( format( "Value for '%s' not found in config file", static_cast<const char*>(#variableName ) )); \ 272 #define MRPT_SAVE_CONFIG_VAR(variableName,configFileObject,sectionNameStr) \ 273 { configFileObject.write(sectionNameStr,#variableName,variableName); } 275 #define MRPT_SAVE_CONFIG_VAR_DEGREES(variableName,configFileObject,sectionNameStr) \ 276 { configFileObject.write(sectionNameStr,#variableName, RAD2DEG(variableName)); } static ENUMTYPE name2value(const std::string &name)
Gives the numerical name for a given enum text name.
std::string BASE_IMPEXP format(const char *fmt,...) MRPT_printf_format_check(1
A std::string version of C sprintf.
#define THROW_EXCEPTION(msg)
std::vector< std::string > vector_string
A type for passing a vector of strings.
This class allows loading and storing values and vectors of different types from a configuration text...
virtual ~CConfigFileBase()
Virtual destructor...
void read_matrix(const std::string §ion, const std::string &name, MATRIX_TYPE &outMatrix, const MATRIX_TYPE &defaultMatrix=MATRIX_TYPE(), bool failIfNotFound=false) const
Reads a configuration parameter as a matrix written in a matlab-like format - for example: "[2 3 4 ; ...
void read_vector(const std::string §ion, const std::string &name, const VECTOR_TYPE &defaultValue, VECTOR_TYPE &outValues, bool failIfNotFound=false) const
Reads a configuration parameter of type vector, stored in the file as a string: "[v1 v2 v3 ...
ENUMTYPE read_enum(const std::string §ion, const std::string &name, const ENUMTYPE &defaultValue, bool failIfNotFound=false) const
Reads an "enum" value, where the value in the config file can be either a numerical value or the symb...
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
void BASE_IMPEXP tokenize(const std::string &inString, const std::string &inDelimiters, std::deque< std::string > &outTokens) MRPT_NO_THROWS
Tokenizes a string according to a set of delimiting characters.
#define THROW_EXCEPTION_CUSTOM_MSG1(msg, param1)