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