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;
168 template <
typename T> std::vector<T>
getValue(
const std::string& key, std::string& section,
186 template <
typename T>
void getValue(
const std::string& key,
187 std::vector<T>& vecT,
190 getValue(key,
"GENERAL", vecT, opt);
204 template <
typename T>
void getValue(std::string key, std::string section,
212 IOUtils::getValueForKey<T>(properties, section +
"::" + key, vecT, opt);
213 }
catch(
const std::exception&){
232 const ConfigProxy
get(
const std::string& key,
const std::string& section)
const;
248 template <
typename T> T
get(
const std::string& key,
const std::string& section,
const T& dflt)
const;
266 std::string
get(
const std::string& key,
const std::string& section,
const std::string& dflt)
const;
267 std::string
get(
const std::string& key,
const std::string& section,
const char dflt[])
const;
268 double get(
const std::string& key,
const std::string& section,
const double& dflt)
const;
269 bool get(
const std::string& key,
const std::string& section,
const bool& dflt)
const;
290 template <
typename T>
void getValue(std::string key, std::string section, T& t,
297 IOUtils::getValueForKey<T>(properties, section +
"::" + key, t, opt);
298 }
catch(
const std::exception&){
311 void getValue(std::string key, std::string section,
Date& t,
const double& time_zone,
320 IOUtils::getValueForKey<std::string>(properties, section +
"::" + key, tmp, opt);
321 }
catch(
const std::exception&){
325 bool parse_ok =
false;
328 }
catch(
const std::exception&){
344 template <
typename T>
void getValues(std::string keymatch, std::string section, std::vector<T>& vecT)
const
349 const std::vector< std::string > vecKeys(
getKeys(keymatch, section) );
351 for (
const std::string& key : vecKeys) {
352 const std::string full_key( section +
"::" + key );
356 }
catch(
const std::exception&){
359 vecT.push_back( tmp );
363 template <
typename T>
void getValues(std::string keymatch, std::string section, std::vector<T>& vecT, std::vector<std::string>& vecKeys)
const
368 vecKeys =
getKeys(keymatch, section);
370 for (
const std::string& key : vecKeys) {
371 const std::string full_key = section +
"::" + key;
375 }
catch(
const std::exception&){
378 vecT.push_back( tmp );
393 std::vector< std::pair<std::string, std::string> >
getValues(std::string keymatch, std::string section,
const bool& anywhere=
false)
const;
395 std::vector< std::pair<std::string, std::string> >
getValuesRegex(
const std::string& regex_str, std::string section)
const;
408 std::vector<std::string>
getKeys(std::string keymatch, std::string section,
const bool& anywhere=
false)
const;
409 std::vector<std::string>
getKeysRegex(
const std::string& regex_str, std::string section)
const;
422 void moveSection(std::string org, std::string dest,
const bool& overwrite);
436 static unsigned int getCommandNr(
const std::string& section,
const std::string& cmd_pattern,
const std::string& cmd_key);
453 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;
463 std::vector< std::pair<std::string, std::string> >
getArgumentsForAlgorithm(
const std::string& parname,
const std::string& algorithm,
464 const std::string& section =
"Interpolations1d")
const;
469 std::map<std::string, std::string> properties;
470 std::set<std::string> sections;
471 std::string sourcename;
472 std::string configRootDir;
477 const Config& proxycfg;
478 const std::string& key;
479 const std::string& section;
481 ConfigProxy(
const Config& i_cfg,
const std::string& i_key,
482 const std::string& i_section)
483 : proxycfg(i_cfg), key(i_key),section(i_section) { }
485 template<
typename T>
operator T()
const {
494 ConfigParser(
const std::string& filename, std::map<std::string, std::string> &i_properties, std::set<std::string> &i_sections);
498 void parseFile(
const std::string& filename);
499 void parseLine(
const unsigned int& linenr, std::vector<std::string> &import_after,
bool &accept_import_before, std::string &line, std::string §ion);
500 static bool onlyOneEqual(
const std::string& str);
501 static void processEnvVars(std::string& value);
502 static void processExpr(std::string& value);
503 bool processVars(std::string& value,
const std::string& section);
504 bool processSectionHeader(
const std::string& line, std::string §ion,
const unsigned int& linenr);
505 std::string clean_import_path(
const std::string& in_path)
const;
506 bool processImports(
const std::string& key,
const std::string& value, std::vector<std::string> &import_after,
const bool &accept_import_before);
507 void handleNonKeyValue(
const std::string& line_backup,
const std::string& section,
const unsigned int& linenr,
bool &accept_import_before);
509 std::map<std::string, std::string> properties;
510 std::set<std::string> imported;
511 std::set<std::string> sections;
512 std::set<std::string> deferred_vars;
513 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:565
static std::string extract_section(std::string key)
Definition: Config.cc:870
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:278
void getValues(std::string keymatch, std::string section, std::vector< T > &vecT, std::vector< std::string > &vecKeys) const
Definition: Config.h:363
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:344
friend std::ostream & operator<<(std::ostream &os, const Config &cfg)
Definition: Config.cc:433
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:422
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:367
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:512
std::set< std::string > getSections() const
Returns all the sections that are present in the config object.
Definition: Config.h:414
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:186
std::vector< std::string > getKeysRegex(const std::string ®ex_str, std::string section) const
Definition: Config.cc:355
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:311
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:530
friend std::istream & operator>>(std::istream &is, Config &cfg)
Definition: Config.cc:468
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:381
bool keyExists(std::string key, std::string section) const
Return if a given key exists in a given section.
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:168
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:290
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:204
bool sectionExists(std::string section) const
Return if a given section exists in the Config object.
Definition: Config.cc:165
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:177
std::vector< std::pair< std::string, std::string > > getValuesRegex(const std::string ®ex_str, std::string section) const
Definition: Config.cc:216
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:546
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:654
void toUpper(std::string &str)
Definition: IOUtils.cc:286
ThrowOptions
Definition: IOUtils.h:74
@ dothrow
Definition: IOUtils.h:74