// ESAF : Euso Simulation and Analysis Framework // $Id: ConfigFileParser.hh,v 1.8 2005/05/19 15:23:57 thea Exp $ // Daniel De Marco created Jan, 28 2002 #ifndef __CONFIGFILEPARSER_HH__ #define __CONFIGFILEPARSER_HH__ #include "EsafMsgSource.hh" #include #include #include #include #include #include #include "euso.hh" #include "utils.hh" class ConfigFileParser : public EsafMsgSource { public: ConfigFileParser( const string &fn); ConfigFileParser( const string &type, const string &cname, const string &fn="" ); virtual ~ConfigFileParser(); // config file has changed, reread it void ReRead(); // write to the file "name" the actual parameters void Write(const string &name) const; // check if one parameter is defined bool IsDefined( const string &key); // get fNumbers or strings from config file Double_t GetNum(const string &key); string GetStr(const string &key); Bool_t GetBool(const string &key); // fNumbers or strings has been changed, update them void ReplaceStr(const string &key, const string& val); void ReplaceNum(const string &key, const Double_t val); // evaluates expr and replace the string/number. Expr must be identifier=value void Replace(const string &expr, Bool_t add = kFALSE); // change config directory static void ChangeConfigDir(const string& newdir) {fCfgDir=newdir;} // get config dir static inline const string& GetCfgDir() { return fCfgDir; } // get path inline const string& GetPath() const { return fPath; } // name and type inline const string& GetType() const { return fBasicType; } inline const string& GetName() const { return fBasicName; } protected: string fPath; // this config file name static string fCfgDir; // config files directory map fNumbers; // table of fNumbers map fChars; // table of strings void CheckId(const string &s); void ParseConfigFile(); void ParseLine( string ); string fBasicType; string fBasicName; friend class Config; ClassDef(ConfigFileParser,0) }; // // inline functions // inline ConfigFileParser::ConfigFileParser(const string &fn): fPath(fn) { ParseConfigFile(); } inline ConfigFileParser::~ConfigFileParser() {} inline void ConfigFileParser::ReRead() { ParseConfigFile(); } inline Double_t ConfigFileParser::GetNum(const string &s) { if (fNumbers.count(s)==0) FatalError("Inexistent value "+s+" in file "+fCfgDir+"/"+fPath); return fNumbers[s]; } inline string ConfigFileParser::GetStr(const string &s) { if (fChars.count(s)==0) FatalError("Inexistent value "+s+" in file "+fCfgDir+"/"+fPath); return fChars[s]; } inline Bool_t ConfigFileParser::GetBool(const string &s) { if (fChars.count(s)==0) FatalError("Inexistent value "+s+" in file "+fCfgDir+"/"+fPath); if ( fChars[s] == "yes" ) return kTRUE; else if ( fChars[s] == "no" ) return kFALSE; else FatalError("Value "+s+" must be yes or no"); return kFALSE; } inline bool ConfigFileParser::IsDefined(const string &s) { if ( fChars.count(s) == 0 ) return kFALSE; return kTRUE; } #endif /* __CONFIGFILEPARSER_HH__ */