ANNA Suite  2020b
Multipurpose development suite for Telco applications
Configuration.hpp
Go to the documentation of this file.
1 // ANNA - Anna is Not Nothingness Anymore //
2 // //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
4 // //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7 
8 
9 #ifndef anna_core_util_Configuration_hpp
10 #define anna_core_util_Configuration_hpp
11 
12 #include <stdlib.h>
13 
14 #include <vector>
15 #include <map>
16 #include <string>
17 
18 #include <anna/core/functions.hpp>
21 
22 namespace anna {
23 
28 public:
29  static const char* defaultSection;
30 
35 
39  ~Configuration() { removeAll(); }
40 
47  void load(const char* configFile) noexcept(false);
48 
60  void setDefaultValue(const char* sectionName, const char* variableName, const char* defaultValue)
61  noexcept(false);
62 
74  const char* getValue(const char* sectionName, const char* variableName, const bool strict = false) const
75  noexcept(false);
76 
87  int getIntegerValue(const char* sectionName, const char* variableName, const bool strict = false) const
88  noexcept(false);
89 
98  bool exists(const char* sectionName, const char* variableName) const ;
99 
105  static const char* getClassName() { return "anna::Configuration"; }
106 
107 private:
108  class VariableEx : public Variable {
109  public:
110  typedef std::vector <VariableEx*> Vector;
111 
112  VariableEx(const char* variableName) :
113  Variable(variableName, Variable::Type::String),
114  a_defaultValue(NULL) {}
115 
116  void setDefaultValue(const char* defaultValue) { a_defaultValue = defaultValue; }
117 
118  const char* getDefaultValue() const { return a_defaultValue; }
119 
120  private:
121  const char* a_defaultValue;
122  };
123 
124  std::map <std::string, VariableEx::Vector*> a_sections;
125 
126  Configuration(const Configuration& other); // No implementado
127 
128  void initialize() noexcept(false) {;}
129  void stop() {;}
130 
131  void removeAll() ;
132  bool processSection(const int nline, char* buffer, std::string& currentSection);
133  void processVariable(const int nline, char* buffer, const std::string& currentSection) noexcept(false);
134  VariableEx* createVariable(const std::string& section, const char* variableName) ;
135  VariableEx* find(const std::string& section, const char* variableName) ;
136  const VariableEx* find(const std::string& section, const char* variableName) const
137  {
138  return const_cast <Configuration*>(this)->find(section, variableName);
139  }
140 
141  static char* strip(char* buffer);
142 };
143 
144 }
145 
146 #endif
147 
Definition: Variable.hpp:34
static const char * defaultSection
Definition: Configuration.hpp:29
void setDefaultValue(const char *sectionName, const char *variableName, const char *defaultValue) noexcept(false)
void load(const char *configFile) noexcept(false)
static const char * getClassName()
Definition: Configuration.hpp:105
Configuration()
Definition: Configuration.hpp:34
const char * getValue(const char *sectionName, const char *variableName, const bool strict=false) const noexcept(false)
bool exists(const char *sectionName, const char *variableName) const
Definition: app.hpp:12
int getIntegerValue(const char *sectionName, const char *variableName, const bool strict=false) const noexcept(false)
Definition: Configuration.hpp:27
Definition: Variable.hpp:25
~Configuration()
Definition: Configuration.hpp:39