11 #ifndef ROOT_TMVA_OptionMap
12 #define ROOT_TMVA_OptionMap
39 std::map<TString,TString> fOptMap;
40 TMVA::MsgLogger fLogger;
44 std::map<TString,TString> &fInternalMap;
47 Binding(std::map<TString,TString> &fmap,TString key):fInternalMap(fmap),fInternalKey(key){}
48 Binding(
const Binding &obj):fInternalMap(obj.fInternalMap)
50 fInternalKey = obj.fInternalKey;
53 void SetKey(TString key){fInternalKey=key;}
54 TString GetKey(){
return fInternalKey;}
55 Binding &operator=(
const Binding &obj)
57 fInternalMap = obj.fInternalMap;
58 fInternalKey = obj.fInternalKey;
62 template<
class T> Binding& operator=(
const T &value)
64 ParseValue(fInternalMap[fInternalKey],*const_cast<T*>(&value));
68 template<
class T>
operator T()
72 template<
class T> T GetValue()
75 ParseValue(fInternalMap[fInternalKey],result,kFALSE);
79 template<
class T>
void ParseValue(TString &str,T &value,Bool_t input=kTRUE)
81 std::stringstream fStringStream;
85 str=fStringStream.str();
87 fStringStream<<str.Data();
97 OptionMap(
const TString options=
"",
const TString name=
"Option"):fName(name),fLogger(name.Data()),fBinder(fOptMap,
""){
101 OptionMap(
const Char_t *options,
const TString name=
"Option"):fName(name),fLogger(name.Data()),fBinder(fOptMap,
""){
102 ParseOption(options);
105 virtual ~OptionMap(){}
107 Bool_t IsEmpty(){
return fOptMap.empty();}
109 Bool_t HasKey(TString key)
111 return fOptMap.count( key )==1;
114 Binding& operator[](TString key)
120 OptionMap& operator=(TString options)
122 ParseOption(options);
128 MsgLogger Log(fLogger);
129 for(
auto &item:fOptMap)
131 Log<<kINFO<<item.first.Data()<<
": "<<item.second.Data()<<Endl;
135 template<
class T> T GetValue(
const TString & key)
138 fBinder.ParseValue(fOptMap[key],result,kFALSE);
143 template<
class T> T GetValue(
const TString & key)
const
146 std::stringstream oss;
147 oss<<fOptMap.at(key);
151 void ParseOption(TString options)
153 options.ReplaceAll(
" ",
"");
154 auto opts=options.Tokenize(
":");
157 TObjString *objstr=(TObjString*)opt;
159 if(objstr->GetString().Contains(
"="))
161 auto pair=objstr->String().Tokenize(
"=");
162 TObjString *key = (TObjString *)pair->At(0);
163 TObjString *value = (TObjString *)pair->At(1);
165 fOptMap[key->GetString()] = value->GetString();
167 if(objstr->GetString().BeginsWith(
"!"))
169 objstr->String().ReplaceAll(
"!",
"");
170 fOptMap[objstr->GetString()]=TString(
"0");
172 fOptMap[objstr->GetString()]=TString(
"1");
178 ClassDef(OptionMap,1);