identt
CfgFileOptions.hpp
Go to the documentation of this file.
1 
33 #ifndef _IDENTT_UTILS_CFGFILEOPTIONS_HPP_
34 #define _IDENTT_UTILS_CFGFILEOPTIONS_HPP_
35 
36 #include <map>
37 #include <list>
38 #include <boost/utility/value_init.hpp>
39 #include <boost/lexical_cast.hpp>
40 #include <boost/numeric/conversion/cast.hpp>
41 
42 #include "BaseUtils.hpp"
43 
44 
45 namespace identt {
46 namespace utils {
48 public:
49  using pointer=std::shared_ptr<CfgFileOptions>;
50  using ssPairT=std::pair<std::string,std::string>;
51  using ssMapT=std::map<std::string,std::string>;
52  using sListT=std::list<std::string>;
53 
61  static pointer create(const std::string InputFile)
62  {
63  pointer p(new CfgFileOptions(InputFile));
64  return p;
65  }
66 
67  virtual ~CfgFileOptions();
68 
81  bool Check(const std::string Section, const std::string Name);
82 
98  template<typename T>
99  T Find(const std::string Section, const std::string Name, bool NoThrow=false)
100  {
101  auto it = SectionMap.find(MakeKey(Section,Name));
102  if (it != SectionMap.end()) {
103  return ConvertAnyToAny<T>(it->second,NoThrow);
104  }
105 
107  auto jt = InheritMap.find(Section);
108  while ( jt !=InheritMap.end()) {
109  it = SectionMap.find(MakeKey(jt->second,Name));
110  if (it != SectionMap.end()) {
111  return ConvertAnyToAny<T>(it->second,NoThrow);
112  }
113 
115  jt = InheritMap.find(jt->second);
116  }
117  if(!NoThrow)
118  throw identt::ConfigException("Invalid Config Param : " +Name);
119  return T();
120  }
121 
137  template<typename T>
138  T FindList(const std::string Section, const sListT NameList, bool NoThrow=false)
139  {
140  T ValueList;
141  for(auto name : NameList) {
142  ValueList.push_back( this->Find<T::value_type>(Section,name,NoThrow));
143  }
144  return ValueList;
145  }
146 
153  void Show();
154 
168  void Update(const std::string Section, const std::string Name, std::string Value);
169 
182  std::string MakeKey(std::string Section, std::string Name);
183 private:
184  ssMapT SectionMap;
185  ssMapT InheritMap;
190  CfgFileOptions() = default;
191  CfgFileOptions(const CfgFileOptions&)=delete;
192 
200  CfgFileOptions(const std::string InputFile);
201 
214  template<typename T>
215  inline T ConvertAnyToAny(std::string InData, bool NoThrow=false)
216  {
217  T OutData = T();
218 
219  try {
220  OutData=boost::lexical_cast<T>(InData);
221 
222  } catch(std::exception& e) {
223  if(! NoThrow)
224  throw identt::ConfigException("conversion error");
225 
226  } catch(...) {
227  if(! NoThrow)
228  throw identt::ConfigException("conversion error");
229  }
230 
231  return OutData;
232  }
233 };
234 } // namespace utils
235 } // namespace identt
236 #endif
bool Check(const std::string Section, const std::string Name)
Check : Check if Value Exists.
Definition: CfgFileOptions.cc:60
T Find(const std::string Section, const std::string Name, bool NoThrow=false)
Find: Find an entry.
Definition: CfgFileOptions.hpp:99
Represents a JSON value. Use Value for UTF8 encoding and default allocator.
Definition: document.h:67
Definition: BaseUtils.hpp:80
void Show()
Show: Show all entries.
Definition: CfgFileOptions.cc:75
T FindList(const std::string Section, const sListT NameList, bool NoThrow=false)
FindList: Find several entries.
Definition: CfgFileOptions.hpp:138
Definition: CryptoBase.hpp:49
void Update(const std::string Section, const std::string Name, std::string Value)
Update: Update or Add an entry.
Definition: CfgFileOptions.cc:86
std::string MakeKey(std::string Section, std::string Name)
MakeKey: Merge Section and Name.
Definition: CfgFileOptions.cc:95
static pointer create(const std::string InputFile)
create
Definition: CfgFileOptions.hpp:61
Definition: CfgFileOptions.hpp:47