90 Config(
const std::string& filename_in);
96 void write(
const std::string& filename)
const;
102 void addFile(
const std::string& filename_in);
111 void addKey(std::string key, std::string section,
const std::string& value);
118 void deleteKey(std::string key, std::string section);
130 void deleteKeys(std::string keymatch, std::string section,
const bool& anywhere=
false);
150 bool keyExists(std::string key, std::string section)
const;
151 bool keyExistsRegex(std::string key_pattern, std::string section)
const;
169 template <
typename T> std::vector<T>
getValue(
const std::string& key, std::string& section,
187 template <
typename T>
void getValue(
const std::string& key,
188 std::vector<T>& vecT,
191 getValue(key,
"GENERAL", vecT, opt);
205 template <
typename T>
void getValue(std::string key, std::string section,
213 IOUtils::getValueForKey<T>(properties, section +
"::" + key, vecT, opt);
214 }
catch(
const std::exception&){
233 const ConfigProxy
get(
const std::string& key,
const std::string& section)
const;
249 template <
typename T> T
get(
const std::string& key,
const std::string& section,
const T& dflt)
const;
267 std::string
get(
const std::string& key,
const std::string& section,
const std::string& dflt)
const;
268 std::string
get(
const std::string& key,
const std::string& section,
const char dflt[])
const;
269 double get(
const std::string& key,
const std::string& section,
const double& dflt)
const;
270 bool get(
const std::string& key,
const std::string& section,
const bool& dflt)
const;
291 template <
typename T>
void getValue(std::string key, std::string section, T& t,
298 IOUtils::getValueForKey<T>(properties, section +
"::" + key, t, opt);
299 }
catch(
const std::exception&){
312 void getValue(std::string key, std::string section,
Date& t,
const double& time_zone,
321 IOUtils::getValueForKey<std::string>(properties, section +
"::" + key, tmp, opt);
322 }
catch(
const std::exception&){
326 bool parse_ok =
false;
329 }
catch(
const std::exception&){
345 template <
typename T>
void getValues(std::string keymatch, std::string section, std::vector<T>& vecT)
const
350 const std::vector< std::string > vecKeys(
getKeys(keymatch, section) );
352 for (
const std::string& key : vecKeys) {
353 const std::string full_key( section +
"::" + key );
357 }
catch(
const std::exception&){
360 vecT.push_back( tmp );
364 template <
typename T>
void getValues(std::string keymatch, std::string section, std::vector<T>& vecT, std::vector<std::string>& vecKeys)
const
369 vecKeys =
getKeys(keymatch, section);
371 for (
const std::string& key : vecKeys) {
372 const std::string full_key = section +
"::" + key;
376 }
catch(
const std::exception&){
379 vecT.push_back( tmp );
394 std::vector< std::pair<std::string, std::string> >
getValues(std::string keymatch, std::string section,
const bool& anywhere=
false)
const;
396 std::vector< std::pair<std::string, std::string> >
getValuesRegex(
const std::string& regex_str, std::string section)
const;
409 std::vector<std::string>
getKeys(std::string keymatch, std::string section,
const bool& anywhere=
false)
const;
410 std::vector<std::string>
getKeysRegex(
const std::string& regex_str, std::string section)
const;
423 void moveSection(std::string org, std::string dest,
const bool& overwrite);
437 static unsigned int getCommandNr(
const std::string& section,
const std::string& cmd_pattern,
const std::string& cmd_key);
454 std::vector< std::pair<std::string, std::string> >
parseArgs(
const std::string& section,
const std::string& cmd_id,
const unsigned int& cmd_nr,
const std::string& arg_pattern)
const;
464 std::vector< std::pair<std::string, std::string> >
getArgumentsForAlgorithm(
const std::string& parname,
const std::string& algorithm,
465 const std::string& section =
"Interpolations1d")
const;
467 std::vector< std::pair<std::string, std::string> >
getArgumentsForAlgorithm(
const std::string& parname,
const std::string& algorithm,
const size_t& algo_index,
468 const std::string& section =
"Interpolations1d")
const;
473 std::map<std::string, std::string> properties;
474 std::set<std::string> sections;
475 std::string sourcename;
476 std::string configRootDir;
481 const Config& proxycfg;
482 const std::string& key;
483 const std::string& section;
485 ConfigProxy(
const Config& i_cfg,
const std::string& i_key,
486 const std::string& i_section)
487 : proxycfg(i_cfg), key(i_key),section(i_section) { }
489 template<
typename T>
operator T()
const {
498 ConfigParser(
const std::string& filename, std::map<std::string, std::string> &i_properties, std::set<std::string> &i_sections);
502 void parseFile(
const std::string& filename);
503 void parseLine(
const unsigned int& linenr, std::vector<std::string> &import_after,
bool &accept_import_before, std::string &line, std::string §ion);
504 static bool onlyOneEqual(
const std::string& str);
505 static void processEnvVars(std::string& value);
506 static void processExpr(std::string& value);
507 bool processVars(std::string& value,
const std::string& section);
508 bool processSectionHeader(
const std::string& line, std::string §ion,
const unsigned int& linenr);
509 std::string clean_import_path(
const std::string& in_path)
const;
510 bool processImports(
const std::string& key,
const std::string& value, std::vector<std::string> &import_after,
const bool &accept_import_before);
511 void handleNonKeyValue(
const std::string& line_backup,
const std::string& section,
const unsigned int& linenr,
bool &accept_import_before);
513 std::map<std::string, std::string> properties;
514 std::set<std::string> imported;
515 std::set<std::string> sections;
516 std::set<std::string> deferred_vars;
517 std::string sourcename;
#define AT
Definition: IOExceptions.h:28
ConfigParser(const std::string &filename, std::map< std::string, std::string > &i_properties, std::set< std::string > &i_sections)
Definition: Config.cc:584
static std::string extract_section(std::string key)
Definition: Config.cc:889
A class that reads a key/value file. These files (typically named *.ini) follow the INI file format s...
Definition: Config.h:79
std::string getSourceName() const
Returns the filename that the Config object was constructed with.
Definition: Config.h:136
void getValue(const std::string &key, T &t, const IOUtils::ThrowOptions &opt=IOUtils::dothrow) const
Template function to retrieve a value of class T for a certain key.
Definition: Config.h:279
void getValues(std::string keymatch, std::string section, std::vector< T > &vecT, std::vector< std::string > &vecKeys) const
Definition: Config.h:364
void getValues(std::string keymatch, std::string section, std::vector< T > &vecT) const
Template function to retrieve a vector of values of class T for a certain key pattern.
Definition: Config.h:345
friend std::ostream & operator<<(std::ostream &os, const Config &cfg)
Definition: Config.cc:445
void deleteKey(std::string key, std::string section)
Delete a specific key/value pair from the internal map object, key/section are case insensitive.
Definition: Config.cc:119
const ConfigProxy get(const std::string &key, const std::string §ion) const
A function that allows to retrieve a value for a key as return parameter (vectors of values too).
Definition: Config.cc:44
const std::string toString() const
Print the content of the Config object (useful for debugging) The Config is bound by "<Config>" and "...
Definition: Config.cc:434
Config()
Empty constructor. The user MUST later one fill the internal key/value map object.
Definition: Config.cc:37
std::vector< std::string > getKeys(std::string keymatch, std::string section, const bool &anywhere=false) const
Function that searches for a given string within the keys of a given section (default: GENERAL) it re...
Definition: Config.cc:379
static unsigned int getCommandNr(const std::string §ion, const std::string &cmd_pattern, const std::string &cmd_key)
Extract the command number from a given command string, given the command pattern.
Definition: Config.cc:524
std::set< std::string > getSections() const
Returns all the sections that are present in the config object.
Definition: Config.h:415
void getValue(const std::string &key, std::vector< T > &vecT, const IOUtils::ThrowOptions &opt=IOUtils::dothrow) const
Template function to retrieve a vector of values of class T for a certain key.
Definition: Config.h:187
std::vector< std::string > getKeysRegex(const std::string ®ex_str, std::string section) const
Definition: Config.cc:367
void addFile(const std::string &filename_in)
Add the content of a file to the internal key/value map object.
Definition: Config.cc:105
void getValue(std::string key, std::string section, Date &t, const double &time_zone, const IOUtils::ThrowOptions &opt=IOUtils::dothrow) const
Function to retrieve a Date value for a certain key.
Definition: Config.h:312
std::vector< std::pair< std::string, std::string > > parseArgs(const std::string §ion, const std::string &cmd_id, const unsigned int &cmd_nr, const std::string &arg_pattern) const
Extract the arguments for a given command and store them into a vector of key / value pairs.
Definition: Config.cc:542
friend std::istream & operator>>(std::istream &is, Config &cfg)
Definition: Config.cc:480
void addKey(std::string key, std::string section, const std::string &value)
Add a specific key/value pair to the internal key/value map object. key and section are case insensit...
Definition: Config.cc:112
void write(const std::string &filename) const
Write the Config object to a file.
Definition: Config.cc:393
bool keyExists(std::string key, std::string section) const
Return if a given key exists in a given section (matching is case insensitive)
Definition: Config.cc:156
std::vector< T > getValue(const std::string &key, std::string §ion, const IOUtils::ThrowOptions &opt=IOUtils::dothrow) const
Definition: Config.h:169
void getValue(std::string key, std::string section, T &t, const IOUtils::ThrowOptions &opt=IOUtils::dothrow) const
Template function to retrieve a value of class T for a certain key.
Definition: Config.h:291
void getValue(std::string key, std::string section, std::vector< T > &vecT, const IOUtils::ThrowOptions &opt=IOUtils::dothrow) const
Template function to retrieve a vector of values of class T for a certain key.
Definition: Config.h:205
bool sectionExists(std::string section) const
Return if a given section exists in the Config object.
Definition: Config.cc:177
bool keyExistsRegex(std::string key_pattern, std::string section) const
Definition: Config.cc:166
std::string getConfigRootDir() const
Returns the directory where the root configuration file is (needed to resolv relative paths).
Definition: Config.h:142
void moveSection(std::string org, std::string dest, const bool &overwrite)
Move all keys of the org section to the dest section.
Definition: Config.cc:189
std::vector< std::pair< std::string, std::string > > getValuesRegex(const std::string ®ex_str, std::string section) const
Definition: Config.cc:228
std::vector< std::pair< std::string, std::string > > getArgumentsForAlgorithm(const std::string &parname, const std::string &algorithm, const std::string §ion="Interpolations1d") const
retrieve the resampling algorithm to be used for the 1D interpolation of meteo parameters....
Definition: Config.cc:558
void deleteKeys(std::string keymatch, std::string section, const bool &anywhere=false)
Delete keys matching a specific pattern from the internal map object, key/section are case insensitiv...
Definition: Config.cc:126
A class to handle timestamps. This class handles conversion between different time display formats (I...
Definition: Date.h:87
void setUndef(const bool &flag=true)
Definition: Date.cc:192
thrown when encountered an unexpected value (e.g. unknown name or key)
Definition: IOExceptions.h:142
bool convertString(Date &t, std::string str, const double &time_zone, std::ios_base &(*f)(std::ios_base &))
Convert a string to a date (template specialization of convertString)
Definition: IOUtils.cc:653
void toUpper(std::string &str)
Definition: IOUtils.cc:285
ThrowOptions
Definition: IOUtils.h:74
@ dothrow
Definition: IOUtils.h:74