10 #ifndef _gu_config_hpp_
11 #define _gu_config_hpp_
13 #include "gu_string_utils.hpp"
14 #include "gu_exception.hpp"
15 #include "gu_utils.hpp"
16 #include "gu_throw.hpp"
17 #include "gu_logger.hpp"
27 extern "C" const char* gu_str2ll (
const char* str,
long long* ll);
33 static const char PARAM_SEP;
34 static const char KEY_VALUE_SEP;
35 static const char ESCAPE;
40 has (
const std::string& key)
const
42 return (params_.find(key) != params_.end());
46 is_set (
const std::string& key)
const
48 param_map_t::const_iterator
const i(params_.find(key));
50 if (i != params_.end())
52 return i->second.is_set();
62 add (
const std::string& key)
64 if (!has(key)) { params_[key] =
Parameter(); }
69 add (
const std::string& key,
const std::string& value)
71 if (!has(key)) { params_[key] =
Parameter(value); }
76 set (
const std::string& key,
const std::string& value)
78 param_map_t::iterator
const i(params_.find(key));
80 if (i != params_.end())
87 log_error << key <<
" not recognized.";
94 set (
const std::string& key,
const char* value)
96 set(key, std::string(value));
102 parse (std::vector<std::pair<std::string, std::string> >& params_vector,
103 const std::string& params_string);
109 parse (
const std::string& params_string);
112 template <
typename T>
void
113 set (
const std::string& key, T val)
115 set_longlong (key, val);
120 get (
const std::string& key)
const
122 param_map_t::const_iterator
const i(params_.find(key));
123 if (i == params_.end())
throw NotFound();
124 if (i->second.is_set())
return i->second.value();
125 log_debug << key <<
" not set.";
130 get (
const std::string& key,
const std::string& def)
const
132 try {
return get(key); }
133 catch (NotSet&) {
return def ; }
137 template <
typename T>
inline T
138 get (
const std::string& key)
const
140 return from_config <T> (
get(key));
143 template <
typename T>
inline T
144 get(
const std::string& key,
const T& def)
const
146 try {
return get<T>(key); }
147 catch (NotSet&) {
return def; }
150 void print (std::ostream& os,
bool include_not_set =
false)
const;
153 template <
typename T>
static inline T
156 const char* str = value.c_str();
158 const char* endptr = gu_str2ll (str, &ret);
160 check_conversion (str, endptr,
"integer");
164 case 1:
return overflow_char (ret);
165 case 2:
return overflow_short (ret);
166 case 4:
return overflow_int (ret);
178 Parameter(
const std::string& value) : value_(value), set_(
true) {}
181 const std::string& value()
const {
return value_; }
182 bool is_set()
const {
return set_ ; }
184 void set(
const std::string& value)
196 typedef std::map <std::string, Parameter> param_map_t;
197 typedef param_map_t::const_iterator const_iterator;
199 const_iterator begin()
const {
return params_.begin(); }
200 const_iterator end()
const {
return params_.end(); }
205 check_conversion (
const char* ptr,
const char* endptr,
const char* type);
208 overflow_char(
long long ret);
211 overflow_short(
long long ret);
214 overflow_int(
long long ret);
216 void set_longlong (
const std::string& key,
long long value);
222 extern "C" const char* gu_str2dbl (
const char* str,
double* dbl);
223 extern "C" const char* gu_str2bool (
const char* str,
bool* bl);
224 extern "C" const char* gu_str2ptr (
const char* str,
void** ptr);
228 std::ostream& operator<<(std::ostream&,
const gu::Config&);
232 template <>
inline double
235 const char* str = value.c_str();
237 const char* endptr = gu_str2dbl (str, &ret);
239 check_conversion (str, endptr,
"double");
244 template <>
inline bool
247 const char* str = value.c_str();
249 const char* endptr = gu_str2bool (str, &ret);
251 check_conversion (str, endptr,
"boolean");
256 template <>
inline void*
259 const char* str = value.c_str();
261 const char* endptr = gu_str2ptr (str, &ret);
263 check_conversion (str, endptr,
"pointer");
268 template <>
inline void
269 Config::set (
const std::string& key,
const void* value)
271 set (key, to_string<const void*>(value));
274 template <>
inline void
275 Config::set (
const std::string& key,
double val)
280 template <>
inline void
281 Config::set (
const std::string& key,
bool val)
283 const char* val_str(val ?
"YES" :
"NO");
Definition: gu_config.hpp:173
static T from_config(const std::string &value)
Definition: gu_config.hpp:154
std::string to_string< double >(const double &x, std::ios_base &(*f)(std::ios_base &))
Definition: gu_utils.hpp:48
Definition: gu_exception.hpp:17
Definition: gu_exception.hpp:16
Definition: gu_config.hpp:29