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);
500 static std::string
extract_section(
const std::string& key,
const bool& provide_default=
false);
511 typedef struct VARIABLE {
512 VARIABLE() : value(), children_idx(), children_not_ready(0), parent_idx(IOUtils::npos), pos_start(std::string::npos), pos_end(std::string::npos), type(REF), isExpanded(
false) {}
513 VARIABLE(
const size_t& i_pos_start,
const VarType& i_type) : value(), children_idx(), children_not_ready(0), parent_idx(IOUtils::npos), pos_start(i_pos_start), pos_end(std::string::npos), type(i_type), isExpanded(
false) {}
514 VARIABLE(
const std::string& i_value,
const size_t& i_pos_start,
const size_t& i_pos_end,
const VarType& i_type) : value(i_value), children_idx(), children_not_ready(0), parent_idx(IOUtils::npos), pos_start(i_pos_start), pos_end(i_pos_end), type(i_type), isExpanded(
false) {}
516 void finalize(
const std::string& i_value,
const size_t& i_pos_end) {value=i_value; pos_end=i_pos_end;}
517 void setParent(
const size_t& idx) {parent_idx=idx;}
518 void setChild(
const size_t& idx) {children_idx.insert(idx); children_not_ready++;}
520 std::string toString()
const {std::ostringstream os; os <<
"<Variable>" << (type==EXPR?
"expr":(type==ENV?
"env":
"ref")) <<
" @[" << pos_start <<
",";
if(pos_end!=IOUtils::npos) os << pos_end;
else os <<
"-"; os <<
"]" <<
" is '" << value <<
"'";
if(parent_idx!=IOUtils::npos) os <<
" parent: " << parent_idx;
if(!children_idx.empty()){ os <<
" children: ";
for(
const auto& val : children_idx) os << val <<
" ";}; os <<
" children_not_ready=" << children_not_ready <<
" "; os <<
"</variable>";
return os.str();}
523 std::set<size_t> children_idx;
524 size_t children_not_ready;
526 size_t pos_start, pos_end;
532 typedef struct FILE_PPT {
533 FILE_PPT() : original_name(), restrict_section(), clean_name() {}
534 FILE_PPT(
const std::string& filename,
const std::string& ini_sourcename);
536 std::string toString()
const {std::ostringstream os; os <<
"<INI file>" << original_name <<
", cleaned as " << clean_name;
if (!restrict_section.empty()) os <<
", restricted to [" << restrict_section <<
"]"; os <<
"</INI file>";
return os.str();}
538 bool operator<(
const FILE_PPT& a)
const {
539 if (original_name<a.original_name)
return true;
540 if (original_name>a.original_name)
return false;
541 if (clean_name<a.clean_name)
return true;
542 if (clean_name>a.clean_name)
return false;
543 return restrict_section < a.restrict_section;
546 return (original_name==a.original_name) && (restrict_section==a.restrict_section) && (clean_name==a.clean_name);
549 std::string original_name;
550 std::string restrict_section;
551 std::string clean_name;
554 static std::vector<ConfigParser::variable> parseVariable(
const std::string &value);
555 bool expandVar(
const variable& var,
const std::string& section, std::string &replacement)
const;
556 bool expandVarsForKey(std::vector<variable>& vecVars,
const std::string& section,
bool& hasSomeSuccesses);
558 void parseFile(
const fileProperties& iniFile);
559 void parseLine(
const unsigned int& linenr,
const std::string& restrict_section, std::vector< fileProperties > &import_after,
bool &accept_import_before, std::string line, std::string §ion);
561 static bool onlyOneEqual(
const std::string& str);
562 bool processSectionHeader(
const std::string& line, std::string §ion,
const unsigned int& linenr);
563 bool processImports(
const std::string& key,
const std::string& value, std::vector< fileProperties > &import_after,
const bool &accept_import_before);
564 void handleNonKeyValue(
const std::string& line_backup,
const std::string& section,
const unsigned int& linenr,
bool &accept_import_before);
566 std::map<std::string, std::string> properties;
567 std::set< fileProperties > imported;
568 std::set<std::string> sections;
569 std::map<std::string, std::vector<variable> > vars;
570 std::string sourcename;
#define AT
Definition IOExceptions.h:28
static std::string extract_section(const std::string &key, const bool &provide_default=false)
Definition Config.cc:816
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:450
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:127
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:52
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:439
Config()
Empty constructor. The user MUST later one fill the internal key/value map object.
Definition Config.cc:45
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:384
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:529
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:372
void addFile(const std::string &filename_in)
Add the content of a file to the internal key/value map object.
Definition Config.cc:113
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:547
friend std::istream & operator>>(std::istream &is, Config &cfg)
Definition Config.cc:485
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:120
void write(const std::string &filename) const
Write the Config object to a file.
Definition Config.cc:398
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:164
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:185
bool keyExistsRegex(std::string key_pattern, std::string section) const
Definition Config.cc:174
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:197
std::vector< std::pair< std::string, std::string > > getValuesRegex(const std::string ®ex_str, std::string section) const
Definition Config.cc:236
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:563
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:134
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:194
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:660
void toUpper(std::string &str)
Definition IOUtils.cc:285
ThrowOptions
Definition IOUtils.h:74
@ dothrow
Definition IOUtils.h:74
bool operator==(const geoLocation &lhs, const geoLocation &rhs)
Definition iCSVHelper.cc:633