Go to the documentation of this file.
15 #include <type_traits>
23 template <
typename ENUMTYPE>
29 class CConfigFilePrefixer;
52 const std::string& section,
const std::string& name,
53 const std::string& str) = 0;
58 const std::string& section,
const std::string& name,
59 const std::string& str,
const int name_padding_width,
60 const int value_padding_width,
const std::string& comment);
66 const std::string& section,
const std::string& name,
67 const std::string& defaultStr,
bool failIfNotFound =
false)
const = 0;
74 virtual void getAllSections(std::vector<std::string>& sections)
const = 0;
78 const std::string& section, std::vector<std::string>& keys)
const = 0;
86 bool keyExists(
const std::string& section,
const std::string& key)
const;
102 virtual void clear() = 0;
106 typename = std::enable_if_t<std::is_enum<enum_t>::value>>
108 const std::string& section,
const std::string& name, enum_t value,
109 const int name_padding_width = -1,
const int value_padding_width = -1,
110 const std::string& comment = std::string())
114 name_padding_width, value_padding_width, comment);
123 typename = std::enable_if_t<!std::is_enum<data_t>::value>>
125 const std::string& section,
const std::string& name,
126 const data_t& value,
const int name_padding_width = -1,
127 const int value_padding_width = -1,
128 const std::string& comment = std::string())
132 value_padding_width, comment);
134 template <
typename data_t>
136 const std::string& section,
const std::string& name,
137 const std::vector<data_t>& value,
const int name_padding_width = -1,
138 const int value_padding_width = -1,
139 const std::string& comment = std::string())
142 for (
typename std::vector<data_t>::const_iterator it = value.begin();
143 it != value.end(); ++it)
149 section, name, s, name_padding_width, value_padding_width, comment);
152 const std::string& section,
const std::string& name,
double value,
153 const int name_padding_width = -1,
const int value_padding_width = -1,
154 const std::string& comment = std::string());
156 const std::string& section,
const std::string& name,
float value,
157 const int name_padding_width = -1,
const int value_padding_width = -1,
158 const std::string& comment = std::string());
166 const std::string& section,
const std::string& name,
167 double defaultValue,
bool failIfNotFound =
false)
const;
169 const std::string& section,
const std::string& name,
float defaultValue,
170 bool failIfNotFound =
false)
const;
172 const std::string& section,
const std::string& name,
bool defaultValue,
173 bool failIfNotFound =
false)
const;
175 const std::string& section,
const std::string& name,
int defaultValue,
176 bool failIfNotFound =
false)
const;
178 const std::string& section,
const std::string& name,
179 uint64_t defaultValue,
bool failIfNotFound =
false)
const;
181 const std::string& section,
const std::string& name,
182 const std::string& defaultValue,
bool failIfNotFound =
false)
const;
187 const std::string& section,
const std::string& name,
188 const std::string& defaultValue,
bool failIfNotFound =
false)
const;
193 template <
class VECTOR_TYPE>
195 const std::string& section,
const std::string& name,
196 const VECTOR_TYPE& defaultValue, VECTOR_TYPE& outValues,
197 bool failIfNotFound =
false)
const
199 std::string aux(
readString(section, name,
"", failIfNotFound));
201 std::vector<std::string> tokens;
204 if (tokens.size() == 0)
206 outValues = defaultValue;
211 const size_t N = tokens.size();
213 for (
size_t i = 0; i < N; i++)
215 double val = std::stod(tokens[i]);
217 static_cast<typename VECTOR_TYPE::value_type
>(
val);
229 template <
class MATRIX_TYPE>
231 const std::string& section,
const std::string& name,
232 MATRIX_TYPE& outMatrix,
233 const MATRIX_TYPE& defaultMatrix = MATRIX_TYPE(),
234 bool failIfNotFound =
false)
const
236 std::string aux =
readString(section, name,
"", failIfNotFound);
238 outMatrix = defaultMatrix;
242 if (!outMatrix.fromMatlabStringFormat(aux))
268 template <
typename ENUMTYPE>
270 const std::string& section,
const std::string& name,
271 const ENUMTYPE& defaultValue,
bool failIfNotFound =
false)
const
274 const std::string sVal =
276 if (sVal.empty())
return defaultValue;
278 if (::isdigit(sVal[0]))
280 return static_cast<ENUMTYPE
>(::atoi(&sVal[0]));
288 catch (std::exception&)
291 "Invalid value '%s' for enum type while reading key='%s'.",
292 sVal.c_str(), name.c_str());
306 #define MRPT_LOAD_CONFIG_VAR( \
307 variableName, variableType, configFileObject, sectionNameStr) \
309 variableName = configFileObject.read_##variableType( \
310 sectionNameStr, #variableName, variableName); \
315 #define MRPT_LOAD_CONFIG_VAR_CS(variableName, variableType) \
316 MRPT_LOAD_CONFIG_VAR(variableName, variableType, c, s)
320 #define MRPT_LOAD_CONFIG_VAR_DEGREES( \
321 variableName, configFileObject, sectionNameStr) \
323 variableName = mrpt::DEG2RAD(configFileObject.read_double( \
324 sectionNameStr, #variableName, mrpt::RAD2DEG(variableName))); \
326 #define MRPT_LOAD_CONFIG_VAR_DEGREESf( \
327 variableName, configFileObject, sectionNameStr) \
329 variableName = mrpt::DEG2RAD(configFileObject.read_float( \
330 sectionNameStr, #variableName, mrpt::RAD2DEG(variableName))); \
335 #define MRPT_LOAD_CONFIG_VAR_DEGREES_NO_DEFAULT( \
336 variableName, configFileObject, sectionNameStr) \
338 variableName = mrpt::DEG2RAD(configFileObject.read_double( \
339 sectionNameStr, #variableName, mrpt::RAD2DEG(variableName), \
343 #define MRPT_LOAD_CONFIG_VAR_CAST( \
344 variableName, variableType, variableTypeCast, configFileObject, \
347 variableName = static_cast<variableTypeCast>( \
348 configFileObject.read_##variableType( \
349 sectionNameStr, #variableName, variableName)); \
352 #define MRPT_LOAD_HERE_CONFIG_VAR( \
353 variableName, variableType, targetVariable, configFileObject, \
355 targetVariable = configFileObject.read_##variableType( \
356 sectionNameStr, #variableName, targetVariable, false);
358 #define MRPT_LOAD_HERE_CONFIG_VAR_NO_DEFAULT( \
359 variableName, variableType, targetVariable, configFileObject, \
364 targetVariable = configFileObject.read_##variableType( \
365 sectionNameStr, #variableName, targetVariable, true); \
367 catch (std::exception&) \
369 THROW_EXCEPTION(mrpt::format( \
370 "Value for '%s' not found in config file in section '%s'", \
371 static_cast<const char*>(#variableName), \
372 std::string(sectionNameStr).c_str())); \
376 #define MRPT_LOAD_HERE_CONFIG_VAR_DEGREES( \
377 variableName, variableType, targetVariable, configFileObject, \
379 targetVariable = mrpt::DEG2RAD(configFileObject.read_##variableType( \
380 sectionNameStr, #variableName, mrpt::RAD2DEG(targetVariable), false));
382 #define MRPT_LOAD_HERE_CONFIG_VAR_DEGREES_NO_DEFAULT( \
383 variableName, variableType, targetVariable, configFileObject, \
389 mrpt::DEG2RAD(configFileObject.read_##variableType( \
390 sectionNameStr, #variableName, targetVariable, true)); \
392 catch (std::exception&) \
394 THROW_EXCEPTION(mrpt::format( \
395 "Value for '%s' not found in config file in section '%s'", \
396 static_cast<const char*>(#variableName), \
397 std::string(sectionNameStr).c_str())); \
401 #define MRPT_LOAD_CONFIG_VAR_NO_DEFAULT( \
402 variableName, variableType, configFileObject, sectionNameStr) \
406 variableName = configFileObject.read_##variableType( \
407 sectionNameStr, #variableName, variableName, true); \
409 catch (std::exception&) \
411 THROW_EXCEPTION(mrpt::format( \
412 "Value for '%s' not found in config file in section '%s'", \
413 static_cast<const char*>(#variableName), \
414 std::string(sectionNameStr).c_str())); \
420 #define MRPT_LOAD_CONFIG_VAR_REQUIRED_CS(variableName, variableType) \
421 MRPT_LOAD_CONFIG_VAR_NO_DEFAULT(variableName, variableType, c, s)
423 #define MRPT_LOAD_CONFIG_VAR_CAST_NO_DEFAULT( \
424 variableName, variableType, variableTypeCast, configFileObject, \
429 variableName = static_cast<variableTypeCast>( \
430 configFileObject.read_##variableType( \
431 sectionNameStr, #variableName, variableName, true)); \
433 catch (std::exception&) \
435 THROW_EXCEPTION(mrpt::format( \
436 "Value for '%s' not found in config file in section '%s'", \
437 static_cast<const char*>(#variableName), \
438 std::string(sectionNameStr).c_str())); \
442 #define MRPT_LOAD_HERE_CONFIG_VAR_CAST( \
443 variableName, variableType, variableTypeCast, targetVariable, \
444 configFileObject, sectionNameStr) \
446 static_cast<variableTypeCast>(configFileObject.read_##variableType( \
447 sectionNameStr, #variableName, targetVariable));
449 #define MRPT_LOAD_HERE_CONFIG_VAR_CAST_NO_DEFAULT( \
450 variableName, variableType, variableTypeCast, targetVariable, \
451 configFileObject, sectionNameStr) \
455 targetVariable = static_cast<variableTypeCast>( \
456 configFileObject.read_##variableType( \
457 sectionNameStr, #variableName, targetVariable, true)); \
459 catch (std::exception&) \
461 THROW_EXCEPTION(mrpt::format( \
462 "Value for '%s' not found in config file in section '%s'", \
463 static_cast<const char*>(#variableName), \
464 std::string(sectionNameStr).c_str())); \
468 #define MRPT_SAVE_CONFIG_VAR(variableName, configFileObject, sectionNameStr) \
470 configFileObject.write(sectionNameStr, #variableName, variableName); \
473 #define MRPT_SAVE_CONFIG_VAR_DEGREES( \
474 variableName, configFileObject, sectionNameStr) \
476 configFileObject.write( \
477 sectionNameStr, #variableName, mrpt::RAD2DEG(variableName)); \
480 #define MRPT_SAVE_CONFIG_VAR_COMMENT(variableName, __comment) \
483 s, #variableName, variableName, \
484 mrpt::config::MRPT_SAVE_NAME_PADDING(), \
485 mrpt::config::MRPT_SAVE_VALUE_PADDING(), __comment); \
487 #define MRPT_SAVE_CONFIG_VAR_DEGREES_COMMENT( \
488 __entryName, __variable, __comment) \
491 s, __entryName, mrpt::RAD2DEG(__variable), \
492 mrpt::config::MRPT_SAVE_NAME_PADDING(), \
493 mrpt::config::MRPT_SAVE_VALUE_PADDING(), __comment); \
void setContentFromYAML(const std::string &yaml_block)
Changes the contents of the virtual "config file" from a text block containing a YAML configuration t...
void write(const std::string §ion, const std::string &name, enum_t value, const int name_padding_width=-1, const int value_padding_width=-1, const std::string &comment=std::string())
bool keyExists(const std::string §ion, const std::string &key) const
Checks if a given key exists inside a section (case insensitive)
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 ; ...
virtual std::string readString(const std::string §ion, const std::string &name, const std::string &defaultStr, bool failIfNotFound=false) const =0
A virtual method to read a generic string.
double read_double(const std::string §ion, const std::string &name, double defaultValue, bool failIfNotFound=false) const
void write(const std::string §ion, const std::string &name, const data_t &value, const int name_padding_width=-1, const int value_padding_width=-1, const std::string &comment=std::string())
bool read_bool(const std::string §ion, const std::string &name, bool defaultValue, bool failIfNotFound=false) const
#define THROW_EXCEPTION_FMT(_FORMAT_STRING,...)
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
void tokenize(const std::string &inString, const std::string &inDelimiters, OUT_CONTAINER &outTokens, bool skipBlankTokens=true) noexcept
Tokenizes a string according to a set of delimiting characters.
std::string read_string(const std::string §ion, const std::string &name, const std::string &defaultValue, bool failIfNotFound=false) const
int read_int(const std::string §ion, const std::string &name, int defaultValue, bool failIfNotFound=false) const
virtual void writeString(const std::string §ion, const std::string &name, const std::string &str)=0
A virtual method to write a generic string.
This class allows loading and storing values and vectors of different types from a configuration text...
A wrapper for other CConfigFileBase-based objects that prefixes a given token to every key and/or sec...
virtual void clear()=0
Empties the "config file".
std::string to_string(T v)
Just like std::to_string(), but with an overloaded version for std::string arguments.
virtual void getAllSections(std::vector< std::string > §ions) const =0
Returns a list with all the section names.
uint64_t read_uint64_t(const std::string §ion, const std::string &name, uint64_t defaultValue, bool failIfNotFound=false) const
float read_float(const std::string §ion, const std::string &name, float defaultValue, bool failIfNotFound=false) const
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...
std::string getContentAsYAML() const
Returns a text block representing the contents of the config file in YAML format.
int MRPT_SAVE_VALUE_PADDING()
bool sectionExists(const std::string §ion_name) const
Checks if a given section exists (name is case insensitive)
virtual void getAllKeys(const std::string §ion, std::vector< std::string > &keys) const =0
Returs a list with all the keys into a section.
void write(const std::string §ion, const std::string &name, const std::vector< data_t > &value, const int name_padding_width=-1, const int value_padding_width=-1, const std::string &comment=std::string())
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 ....
int MRPT_SAVE_NAME_PADDING()
Default padding sizes for macros MRPT_SAVE_CONFIG_VAR_COMMENT(), etc.
std::string read_string_first_word(const std::string §ion, const std::string &name, const std::string &defaultValue, bool failIfNotFound=false) const
Reads a configuration parameter of type "string", and keeps only the first word (this can be used to ...
virtual ~CConfigFileBase()
dtor
Page generated by Doxygen 1.8.17 for MRPT 2.0.3 at Thu May 21 21:53:32 UTC 2020 | |