28 #ifndef CConfigFileBase_H
29 #define CConfigFileBase_H
52 virtual void writeString(
const std::string §ion,
const std::string &name,
const std::string &str) = 0;
57 virtual std::string readString(
58 const std::string §ion,
59 const std::string &name,
60 const std::string &defaultStr,
61 bool failIfNotFound =
false)
const = 0;
72 virtual void getAllSections(
vector_string §ions )
const = 0 ;
76 virtual void getAllKeys(
const std::string section,
vector_string &keys )
const = 0;
79 bool sectionExists(
const std::string §ion_name)
const;
83 void write(
const std::string §ion,
const std::string &name,
double value);
87 void write(
const std::string §ion,
const std::string &name,
float value);
91 void write(
const std::string §ion,
const std::string &name,
int value);
95 void write(
const std::string §ion,
const std::string &name,
unsigned int value);
100 void write(
const std::string §ion,
const std::string &name,
size_t value);
105 void write(
const std::string §ion,
const std::string &name,
const std::string &value);
109 void write(
const std::string §ion,
const std::string &name,
const std::vector<int> &value);
113 void write(
const std::string §ion,
const std::string &name,
const std::vector<unsigned int> &value);
117 void write(
const std::string §ion,
const std::string &name,
const std::vector<float> &value);
121 void write(
const std::string §ion,
const std::string &name,
const std::vector<double> &value);
125 void write(
const std::string §ion,
const std::string &name,
const std::vector<bool> &value);
130 double read_double(
const std::string §ion,
const std::string &name,
double defaultValue,
bool failIfNotFound =
false)
const;
135 float read_float(
const std::string §ion,
const std::string &name,
float defaultValue,
bool failIfNotFound =
false)
const;
140 bool read_bool(
const std::string §ion,
const std::string &name,
bool defaultValue,
bool failIfNotFound =
false)
const;
145 int read_int(
const std::string §ion,
const std::string &name,
int defaultValue,
bool failIfNotFound =
false)
const;
150 uint64_t read_uint64_t(
const std::string §ion,
const std::string &name, uint64_t defaultValue,
bool failIfNotFound =
false )
const;
155 std::string read_string(
const std::string §ion,
const std::string &name,
const std::string &defaultValue,
bool failIfNotFound =
false)
const;
160 std::string read_string_first_word(
const std::string §ion,
const std::string &name,
const std::string &defaultValue,
bool failIfNotFound =
false)
const;
165 template <
class VECTOR_TYPE>
167 const std::string & section,
168 const std::string & name,
169 const VECTOR_TYPE & defaultValue,
170 VECTOR_TYPE & outValues,
171 bool failIfNotFound =
false)
const
173 std::string aux ( readString(section, name,
"",failIfNotFound ) );
175 std::vector<std::string> tokens;
178 if (tokens.size()==0)
180 outValues = defaultValue;
185 const size_t N = tokens.size();
186 outValues.resize( N );
187 for (
size_t i=0;i<N;i++)
189 std::stringstream ss(tokens[i]);
200 template <
class MATRIX_TYPE>
202 const std::string §ion,
203 const std::string &name,
204 MATRIX_TYPE &outMatrix,
205 const MATRIX_TYPE &defaultMatrix = MATRIX_TYPE(),
206 bool failIfNotFound =
false )
const
208 std::string aux = readString(section, name,
"",failIfNotFound );
210 outMatrix = defaultMatrix;
214 if (!outMatrix.fromMatlabStringFormat(aux))
237 template <typename ENUMTYPE>
238 ENUMTYPE read_enum(
const std::string §ion,
const std::string &name,
const ENUMTYPE &defaultValue,
bool failIfNotFound =
false)
const
241 const std::string sVal = read_string_first_word(section,name,
"",failIfNotFound);
242 if (sVal.empty())
return defaultValue;
244 if (::isdigit(sVal[0]))
246 return static_cast<ENUMTYPE
>(::atoi(&sVal[0]));
252 }
catch (std::exception &)
254 THROW_EXCEPTION(
format(
"Invalid value '%s' for enum type while reading key='%s'.",sVal.c_str(),name.c_str()))
266 #define MRPT_LOAD_CONFIG_VAR(variableName,variableType,configFileObject,sectionNameStr) \
267 { variableName = configFileObject.read_##variableType(sectionNameStr,#variableName,variableName); }
271 #define MRPT_LOAD_CONFIG_VAR_DEGREES(variableName,configFileObject,sectionNameStr) \
272 { variableName = DEG2RAD( configFileObject.read_float(sectionNameStr,#variableName, RAD2DEG(variableName)) ); }
274 #define MRPT_LOAD_CONFIG_VAR_CAST(variableName,variableType,variableTypeCast,configFileObject,sectionNameStr) \
275 { variableName = static_cast<variableTypeCast>(configFileObject.read_##variableType(sectionNameStr,#variableName,variableName)); }
278 #define MRPT_LOAD_HERE_CONFIG_VAR(variableName,variableType,targetVariable,configFileObject,sectionNameStr) \
279 targetVariable = configFileObject.read_##variableType(sectionNameStr,#variableName,targetVariable,false);
281 #define MRPT_LOAD_HERE_CONFIG_VAR_NO_DEFAULT(variableName,variableType,targetVariable,configFileObject,sectionNameStr) \
283 targetVariable = configFileObject.read_##variableType(sectionNameStr,#variableName,targetVariable,true); \
284 } catch (std::exception &) \
286 THROW_EXCEPTION( format( "Value for '%s' not found in config file", static_cast<const char*>(#variableName ) )); \
290 #define MRPT_LOAD_CONFIG_VAR_NO_DEFAULT(variableName,variableType,configFileObject,sectionNameStr) \
292 variableName = configFileObject.read_##variableType(sectionNameStr,#variableName,variableName,true); \
293 } catch (std::exception &) \
295 THROW_EXCEPTION( format( "Value for '%s' not found in config file", static_cast<const char*>(#variableName ) )); \
298 #define MRPT_LOAD_CONFIG_VAR_CAST_NO_DEFAULT(variableName,variableType,variableTypeCast,configFileObject,sectionNameStr) \
300 variableName = static_cast<variableTypeCast>(configFileObject.read_##variableType(sectionNameStr,#variableName,variableName,true)); \
301 } catch (std::exception &) \
303 THROW_EXCEPTION( format( "Value for '%s' not found in config file", static_cast<const char*>(#variableName ) )); \
307 #define MRPT_LOAD_HERE_CONFIG_VAR_CAST(variableName,variableType,variableTypeCast,targetVariable,configFileObject,sectionNameStr) \
308 targetVariable = static_cast<variableTypeCast>(configFileObject.read_##variableType(sectionNameStr,#variableName,targetVariable));
310 #define MRPT_LOAD_HERE_CONFIG_VAR_CAST_NO_DEFAULT(variableName,variableType,variableTypeCast,targetVariable,configFileObject,sectionNameStr) \
312 targetVariable = static_cast<variableTypeCast>(configFileObject.read_##variableType(sectionNameStr,#variableName,targetVariable,true)); \
313 } catch (std::exception &) \
315 THROW_EXCEPTION( format( "Value for '%s' not found in config file", static_cast<const char*>(#variableName ) )); \
319 #define MRPT_SAVE_CONFIG_VAR(variableName,configFileObject,sectionNameStr) \
320 { configFileObject.write(sectionNameStr,#variableName,variableName); }
322 #define MRPT_SAVE_CONFIG_VAR_DEGREES(variableName,configFileObject,sectionNameStr) \
323 { configFileObject.write(sectionNameStr,#variableName, RAD2DEG(variableName)); }