Bridge++  Ver. 1.3.x
parameters.cpp
Go to the documentation of this file.
1 
14 #include "parameters.h"
15 
16 const std::string Parameters::class_name = "Parameters";
17 
18 //====================================================================
20  : m_vlevel(CommonParameters::Vlevel())
21 {
22  // default verbosity from common_parameters.
23 }
24 
25 
26 //====================================================================
27 double Parameters::get_double(const string& key) const
28 {
29  std::map<string, Item<double> >::const_iterator p = m_map_double.find(key);
30 
31  if (p != m_map_double.end()) {
32  return p->second.value();
33  }
34 
35  vout.crucial("%s: get_double: key '%s' not found.\n", class_name.c_str(), key.c_str());
36 
37  return double();
38 }
39 
40 
41 //====================================================================
42 int Parameters::get_int(const string& key) const
43 {
44  std::map<string, Item<int> >::const_iterator p = m_map_int.find(key);
45 
46  if (p != m_map_int.end()) {
47  return p->second.value();
48  }
49 
50  vout.crucial("%s: get_int: key '%s' not found.\n", class_name.c_str(), key.c_str());
51 
52  return int();
53 }
54 
55 
56 //====================================================================
57 std::vector<double> Parameters::get_double_vector(const string& key) const
58 {
59  std::map<string, Item<std::vector<double> > >::const_iterator p = m_map_double_vector.find(key);
60 
61  if (p != m_map_double_vector.end()) {
62  return p->second.value();
63  }
64 
65  vout.crucial("%s: get_double_vector: key '%s' not found.\n", class_name.c_str(), key.c_str());
66 
67  return std::vector<double>();
68 }
69 
70 
71 //====================================================================
72 std::vector<int> Parameters::get_int_vector(const string& key) const
73 {
74  std::map<string, Item<std::vector<int> > >::const_iterator p = m_map_int_vector.find(key);
75 
76  if (p != m_map_int_vector.end()) {
77  return p->second.value();
78  }
79 
80  vout.crucial("%s: get_int_vector: key '%s' not found.\n", class_name.c_str(), key.c_str());
81 
82  return std::vector<int>();
83 }
84 
85 
86 //====================================================================
87 string Parameters::get_string(const string& key) const
88 {
89  std::map<string, Item<string> >::const_iterator p = m_map_string.find(key);
90 
91  if (p != m_map_string.end()) {
92  return p->second.value();
93  }
94 
95  vout.crucial("%s: get_Parameters: key '%s' not found.\n", class_name.c_str(), key.c_str());
96 
97  return string();
98 }
99 
100 
101 //====================================================================
102 Parameters *Parameters::get_Parameters(const string& key) const
103 {
104  std::map<string, Item<Parameters *> >::const_iterator p = m_map_Parameters.find(key);
105 
106  if (p != m_map_Parameters.end()) {
107  return p->second.value();
108  }
109 
110  vout.crucial("Warning: %s: get_Parameters: key '%s' is not used.\n", class_name.c_str(), key.c_str());
111 
112  return 0;
113 }
114 
115 
116 //====================================================================
118 {
119  return m_vlevel.value();
120 }
121 
122 
123 //====================================================================
124 int Parameters::fetch_double(const string& key, double& val) const
125 {
126  std::map<string, Item<double> >::const_iterator p = m_map_double.find(key);
127 
128  if (p == m_map_double.end()) {
129  vout.crucial("%s: parameter entry not found: %s.\n", class_name.c_str(), key.c_str());
130 
131  return EXIT_FAILURE;
132  }
133 
134  val = p->second.value();
135 
136  return p->second.is_set();
137 }
138 
139 
140 //====================================================================
141 int Parameters::fetch_int(const string& key, int& val) const
142 {
143  std::map<string, Item<int> >::const_iterator p = m_map_int.find(key);
144 
145  if (p == m_map_int.end()) {
146  vout.crucial("%s: parameter entry not found: %s.\n", class_name.c_str(), key.c_str());
147 
148  return EXIT_FAILURE;
149  }
150 
151  val = p->second.value();
152 
153  return p->second.is_set();
154 }
155 
156 
157 //====================================================================
158 int Parameters::fetch_double_vector(const string& key, std::vector<double>& val) const
159 {
160  std::map<string, Item<std::vector<double> > >::const_iterator p = m_map_double_vector.find(key);
161 
162  if (p == m_map_double_vector.end()) {
163  vout.crucial("%s: parameter entry not found: %s.\n", class_name.c_str(), key.c_str());
164 
165  return EXIT_FAILURE;
166  }
167 
168  val.resize(p->second.value().size());
169  val = p->second.value();
170 
171  return p->second.is_set();
172 }
173 
174 
175 //====================================================================
176 int Parameters::fetch_int_vector(const string& key, std::vector<int>& val) const
177 {
178  std::map<string, Item<std::vector<int> > >::const_iterator p = m_map_int_vector.find(key);
179 
180  if (p == m_map_int_vector.end()) {
181  vout.crucial("%s: parameter entry not found: %s.\n", class_name.c_str(), key.c_str());
182 
183  return EXIT_FAILURE;
184  }
185 
186  val.resize(p->second.value().size());
187  val = p->second.value();
188 
189  return p->second.is_set();
190 }
191 
192 
193 //====================================================================
194 int Parameters::fetch_string(const string& key, string& val) const
195 {
196  std::map<string, Item<string> >::const_iterator p = m_map_string.find(key);
197 
198  if (p == m_map_string.end()) {
199  vout.crucial("%s: parameter entry not found: %s.\n", class_name.c_str(), key.c_str());
200 
201  return EXIT_FAILURE;
202  }
203 
204  val = p->second.value();
205 
206  return p->second.is_set();
207 }
208 
209 
210 //====================================================================
212 {
213  val = m_vlevel.value();
214 
215  return m_vlevel.is_set();
216 }
217 
218 
219 //====================================================================
220 bool Parameters::find_int(const string& key) const
221 {
222  return m_map_int.find(key) != m_map_int.end();
223 }
224 
225 
226 //====================================================================
227 bool Parameters::find_double(const string& key) const
228 {
229  return m_map_double.find(key) != m_map_double.end();
230 }
231 
232 
233 //====================================================================
234 bool Parameters::find_int_vector(const string& key) const
235 {
236  return m_map_int_vector.find(key) != m_map_int_vector.end();
237 }
238 
239 
240 //====================================================================
241 bool Parameters::find_double_vector(const string& key) const
242 {
243  return m_map_double_vector.find(key) != m_map_double_vector.end();
244 }
245 
246 
247 //====================================================================
248 bool Parameters::find_string(const string& key) const
249 {
250  return m_map_string.find(key) != m_map_string.end();
251 }
252 
253 
254 //====================================================================
255 bool Parameters::find_Parameters(const string& key) const
256 {
257  return m_map_Parameters.find(key) != m_map_Parameters.end();
258 }
259 
260 
261 //====================================================================
262 void Parameters::set_int(const string& key, const int value)
263 {
264  std::map<string, Item<int> >::iterator p = m_map_int.find(key);
265 
266  if (p != m_map_int.end()) p->second.put(value);
267 }
268 
269 
270 //====================================================================
271 void Parameters::set_double(const string& key, const double value)
272 {
273  std::map<string, Item<double> >::iterator p = m_map_double.find(key);
274 
275  if (p != m_map_double.end()) p->second.put(value);
276 }
277 
278 
279 //====================================================================
280 void Parameters::set_int_vector(const string& key, const std::vector<int>& value)
281 {
282  std::map<string, Item<std::vector<int> > >::iterator p = m_map_int_vector.find(key);
283 
284  if (p != m_map_int_vector.end()) p->second.put(value);
285 }
286 
287 
288 //====================================================================
289 void Parameters::set_double_vector(const string& key, const std::vector<double>& value)
290 {
291  std::map<string, Item<std::vector<double> > >::iterator p = m_map_double_vector.find(key);
292 
293  if (p != m_map_double_vector.end()) p->second.put(value);
294 }
295 
296 
297 //====================================================================
298 void Parameters::set_string(const string& key, const string& value)
299 {
300  std::map<string, Item<string> >::iterator p = m_map_string.find(key);
301 
302  if (p != m_map_string.end()) p->second.put(value);
303 }
304 
305 
306 //====================================================================
307 void Parameters::set_Parameters(const string& key, Parameters *const value)
308 {
309  std::map<string, Item<Parameters *> >::iterator p = m_map_Parameters.find(key);
310 
311  if (p != m_map_Parameters.end()) p->second.put(value);
312 }
313 
314 
315 //====================================================================
317 {
318  m_vlevel.put(value);
319 }
320 
321 
322 //====================================================================
323 void Parameters::Register_double(const string& key, const double data)
324 {
325  m_map_double.insert(std::map<string, Item<double> >::value_type(key, Item<double>(data)));
326 }
327 
328 
329 //====================================================================
330 void Parameters::Register_int(const string& key, const int data)
331 {
332  m_map_int.insert(std::map<string, Item<int> >::value_type(key, Item<int>(data)));
333 }
334 
335 
336 //====================================================================
337 void Parameters::Register_double_vector(const string& key, const std::vector<double>& data)
338 {
339  m_map_double_vector.insert(std::map<string, Item<std::vector<double> > >::value_type(key, Item<std::vector<double> >(data)));
340 }
341 
342 
343 //====================================================================
344 void Parameters::Register_int_vector(const string& key, const std::vector<int>& data)
345 {
346  m_map_int_vector.insert(std::map<string, Item<std::vector<int> > >::value_type(key, Item<std::vector<int> >(data)));
347 }
348 
349 
350 //====================================================================
351 void Parameters::Register_string(const string& key, const string& data)
352 {
353  m_map_string.insert(std::map<string, Item<string> >::value_type(key, Item<string>(data)));
354 }
355 
356 
357 //====================================================================
358 void Parameters::Register_Parameters(const string& key, Parameters *const data)
359 {
360  m_map_Parameters.insert(std::map<string, Item<Parameters *> >::value_type(key, Item<Parameters *>(data)));
361 }
362 
363 
364 //====================================================================
365 void Parameters::Register_Parameters(const string& key, const unique_ptr<Parameters>& data)
366 {
367  return Register_Parameters(key, data.get());
368 }
369 
370 
371 //====================================================================
372 bool Parameters::is_set(const string& key) const
373 {
374  // assume key is unique, i.e. there is no such case that
375  // two or more items of different types have the same key.
376 
377  {
378  std::map<string, Item<double> >::const_iterator p = m_map_double.find(key);
379  if (p != m_map_double.end()) {
380  return p->second.is_set() == EXIT_SUCCESS;
381  }
382  }
383 
384  {
385  std::map<string, Item<int> >::const_iterator p = m_map_int.find(key);
386 
387  if (p != m_map_int.end()) {
388  return p->second.is_set() == EXIT_SUCCESS;
389  }
390  }
391 
392  {
393  std::map<string, Item<std::vector<double> > >::const_iterator p = m_map_double_vector.find(key);
394 
395  if (p != m_map_double_vector.end()) {
396  return p->second.is_set() == EXIT_SUCCESS;
397  }
398  }
399 
400  {
401  std::map<string, Item<std::vector<int> > >::const_iterator p = m_map_int_vector.find(key);
402 
403  if (p != m_map_int_vector.end()) {
404  return p->second.is_set() == EXIT_SUCCESS;
405  }
406  }
407 
408  {
409  std::map<string, Item<string> >::const_iterator p = m_map_string.find(key);
410 
411  if (p != m_map_string.end()) {
412  return p->second.is_set() == EXIT_SUCCESS;
413  }
414  }
415 
416  {
417  std::map<string, Item<Parameters *> >::const_iterator p = m_map_Parameters.find(key);
418 
419  if (p != m_map_Parameters.end()) {
420  return p->second.is_set() == EXIT_SUCCESS;
421  }
422  }
423 
424  {
425  if (key == "verbose_level") {
426  return m_vlevel.is_set() == EXIT_SUCCESS;
427  }
428  }
429 
430  // no such key defined.
431  return false;
432 }
433 
434 
435 #ifdef DEBUG
436 //====================================================================
437 void Parameters::dump(const string& indent_str) const
438 {
439  const char *indent = indent_str.c_str();
440 
441  if (m_map_double.size() > 0) {
442  printf("%s[double]\n", indent);
443  for (std::map<string, Item<double> >::const_iterator p = m_map_double.begin(); p != m_map_double.end(); ++p) {
444  printf("%s key = %s, val = %f, set = %s\n", indent, p->first.c_str(), p->second.value(), (p->second.m_flag_set ? "true" : "false"));
445  }
446  }
447 
448  if (m_map_int.size() > 0) {
449  printf("%s[integer]\n", indent);
450  for (std::map<string, Item<int> >::const_iterator p = m_map_int.begin(); p != m_map_int.end(); ++p) {
451  printf("%s key = %s, val = %d, set = %s\n", indent, p->first.c_str(), p->second.value(), (p->second.m_flag_set ? "true" : "false"));
452  }
453  }
454 
455  if (m_map_double_vector.size() > 0) {
456  printf("%s[double vector]\n", indent);
457  for (std::map<string, Item<std::vector<double> > >::const_iterator p = m_map_double_vector.begin(); p != m_map_double_vector.end(); ++p) {
458  printf("%s key = %s, val = (", indent, p->first.c_str());
459  for (size_t i = 0; i < p->second.value().size(); ++i) {
460  printf("%f, ", (p->second.value())[i]);
461  }
462  printf("), set = %s\n", (p->second.m_flag_set ? "true" : "false"));
463  }
464  }
465 
466  if (m_map_int_vector.size() > 0) {
467  printf("%s[integer vector]\n", indent);
468  for (std::map<string, Item<std::vector<int> > >::const_iterator p = m_map_int_vector.begin(); p != m_map_int_vector.end(); ++p) {
469  printf("%s key = %s, val = (", indent, p->first.c_str());
470  for (size_t i = 0; i < p->second.value().size(); ++i) {
471  printf("%d, ", (p->second.value())[i]);
472  }
473  printf("), set = %s\n", (p->second.m_flag_set ? "true" : "false"));
474  }
475  }
476 
477  if (m_map_string.size() > 0) {
478  printf("%s[string]\n", indent);
479  for (std::map<string, Item<string> >::const_iterator p = m_map_string.begin(); p != m_map_string.end(); ++p) {
480  printf("%s key = %s, val = %s, set = %s\n", indent, p->first.c_str(), p->second.value().c_str(), (p->second.m_flag_set ? "true" : "false"));
481  }
482  }
483 
484  if (m_map_Parameters.size() > 0) {
485  printf("%s[Parameters]\n", indent);
486  for (std::map<string, Item<Parameters *> >::const_iterator p = m_map_Parameters.begin(); p != m_map_Parameters.end(); ++p) {
487  printf("%s key = %s, val = %p, set = %s\n", indent, p->first.c_str(), p->second.value(), (p->second.m_flag_set ? "true" : "false"));
488 
489  // dump recursively.
490  if (p->second.value()) {
491  p->second.value()->dump(indent_str + " ");
492  } else {
493  printf("%s<empty value>\n", indent);
494  }
495  }
496  }
497 
498  printf("%s[verbosity]\n", indent);
499  printf("%s value = %d, set = %s\n", indent, m_vlevel.value(), (m_vlevel.m_flag_set ? "true" : "false"));
500 
501  printf("%s--------\n", indent);
502 }
503 #endif
504 
505 //====================================================================
506 //============================================================END=====
void Register_int_vector(const string &, const std::vector< int > &)
Definition: parameters.cpp:344
bool find_int(const string &) const
Definition: parameters.cpp:220
const T & value() const
Definition: parameters.h:53
int fetch_VerboseLevel(Bridge::VerboseLevel &val) const
Definition: parameters.cpp:211
BridgeIO vout
Definition: bridgeIO.cpp:278
void Register_string(const string &, const string &)
Definition: parameters.cpp:351
void Register_int(const string &, const int)
Definition: parameters.cpp:330
void set_int(const string &key, const int value)
Definition: parameters.cpp:262
static const std::string class_name
Definition: parameters.h:41
void set_double_vector(const string &key, const std::vector< double > &value)
Definition: parameters.cpp:289
bool find_double(const string &) const
Definition: parameters.cpp:227
bool find_Parameters(const string &) const
Definition: parameters.cpp:255
int get_int(const string &key) const
Definition: parameters.cpp:42
Class for parameters.
Definition: parameters.h:38
void put(const std::vector< U > &value)
Definition: parameters.h:57
std::map< string, Item< std::vector< int > > > m_map_int_vector
Definition: parameters.h:75
void set_VerboseLevel(Bridge::VerboseLevel value)
Definition: parameters.cpp:316
Parameters * get_Parameters(const string &key) const
Definition: parameters.cpp:102
std::vector< double > get_double_vector(const string &key) const
Definition: parameters.cpp:57
std::map< string, Item< Parameters * > > m_map_Parameters
Definition: parameters.h:77
std::vector< int > get_int_vector(const string &key) const
Definition: parameters.cpp:72
void set_string(const string &key, const string &value)
Definition: parameters.cpp:298
bool find_string(const string &) const
Definition: parameters.cpp:248
std::map< string, Item< int > > m_map_int
Definition: parameters.h:73
bool is_set(const string &) const
Definition: parameters.cpp:372
std::map< string, Item< double > > m_map_double
Definition: parameters.h:72
double get_double(const string &key) const
Definition: parameters.cpp:27
int is_set() const
Definition: parameters.h:54
pointer get() const
int fetch_string(const string &key, string &val) const
Definition: parameters.cpp:194
Common parameter class: provides parameters as singleton.
bool find_double_vector(const string &) const
Definition: parameters.cpp:241
Bridge::VerboseLevel get_VerboseLevel() const
Definition: parameters.cpp:117
void crucial(const char *format,...)
Definition: bridgeIO.cpp:48
std::map< string, Item< string > > m_map_string
Definition: parameters.h:76
void Register_Parameters(const string &, Parameters *const)
Definition: parameters.cpp:358
void set_double(const string &key, const double value)
Definition: parameters.cpp:271
void set_Parameters(const string &key, Parameters *const value)
Definition: parameters.cpp:307
VerboseLevel
Definition: bridgeIO.h:39
void Register_double_vector(const string &, const std::vector< double > &)
Definition: parameters.cpp:337
int fetch_double_vector(const string &key, std::vector< double > &val) const
Definition: parameters.cpp:158
void Register_double(const string &, const double)
Definition: parameters.cpp:323
void set_int_vector(const string &key, const std::vector< int > &value)
Definition: parameters.cpp:280
int fetch_double(const string &key, double &val) const
Definition: parameters.cpp:124
string get_string(const string &key) const
Definition: parameters.cpp:87
std::map< string, Item< std::vector< double > > > m_map_double_vector
Definition: parameters.h:74
bool find_int_vector(const string &) const
Definition: parameters.cpp:234
int fetch_int(const string &key, int &val) const
Definition: parameters.cpp:141
Item< Bridge::VerboseLevel > m_vlevel
Definition: parameters.h:78
int fetch_int_vector(const string &key, std::vector< int > &val) const
Definition: parameters.cpp:176