Bridge++  Ver. 1.2.x
 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 
16 //====================================================================
18  : m_vlevel(CommonParameters::Vlevel())
19 {
20  // default verbosity from common_parameters.
21 }
22 
23 
24 //====================================================================
25 double Parameters::get_double(const string& key) const
26 {
27  std::map<string, Item<double> >::const_iterator p = m_map_double.find(key);
28 
29  if (p != m_map_double.end()) {
30  return p->second.value();
31  }
32 
33  vout.crucial("get_double: key '%s' not found.\n", key.c_str());
34 
35  return double();
36 }
37 
38 
39 //====================================================================
40 int Parameters::get_int(const string& key) const
41 {
42  std::map<string, Item<int> >::const_iterator p = m_map_int.find(key);
43 
44  if (p != m_map_int.end()) {
45  return p->second.value();
46  }
47 
48  vout.crucial("get_int: key '%s' not found.\n", key.c_str());
49 
50  return int();
51 }
52 
53 
54 //====================================================================
55 std::valarray<double> Parameters::get_double_vector(const string& key) const
56 {
57  std::map<string, Item<std::valarray<double> > >::const_iterator p = m_map_double_vector.find(key);
58 
59  if (p != m_map_double_vector.end()) {
60  return p->second.value();
61  }
62 
63  vout.crucial("get_double_vector: key '%s' not found.\n", key.c_str());
64 
65  return std::valarray<double>();
66 }
67 
68 
69 //====================================================================
70 std::valarray<int> Parameters::get_int_vector(const string& key) const
71 {
72  std::map<string, Item<std::valarray<int> > >::const_iterator p = m_map_int_vector.find(key);
73 
74  if (p != m_map_int_vector.end()) {
75  return p->second.value();
76  }
77 
78  vout.crucial("get_int_vector: key '%s' not found.\n", key.c_str());
79 
80  return std::valarray<int>();
81 }
82 
83 
84 //====================================================================
85 string Parameters::get_string(const string& key) const
86 {
87  std::map<string, Item<string> >::const_iterator p = m_map_string.find(key);
88 
89  if (p != m_map_string.end()) {
90  return p->second.value();
91  }
92 
93  vout.crucial("get_Parameters: key '%s' not found.\n", key.c_str());
94 
95  return string();
96 }
97 
98 
99 //====================================================================
100 Parameters *Parameters::get_Parameters(const string& key) const
101 {
102  std::map<string, Item<Parameters *> >::const_iterator p = m_map_Parameters.find(key);
103 
104  if (p != m_map_Parameters.end()) {
105  return p->second.value();
106  }
107 
108  vout.crucial("Warning: get_Parameters: key '%s' is not used.\n", key.c_str());
109 
110  return 0;
111 }
112 
113 
114 //====================================================================
115 // add by SU
117 {
118  return m_vlevel.value();
119 }
120 
121 
122 //====================================================================
123 // bool Parameters::fetch_double(const string& key, double& val) const
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("Parameters: parameter entry not found: %s.\n", key.c_str());
130  abort();
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("Parameters: parameter entry not found: %s.\n", key.c_str());
147  abort();
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::valarray<double>& val) const
159 {
160  std::map<string, Item<std::valarray<double> > >::const_iterator p = m_map_double_vector.find(key);
161 
162  if (p == m_map_double_vector.end()) {
163  vout.crucial("Parameters: parameter entry not found: %s.\n", key.c_str());
164  abort();
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::valarray<int>& val) const
177 {
178  std::map<string, Item<std::valarray<int> > >::const_iterator p = m_map_int_vector.find(key);
179 
180  if (p == m_map_int_vector.end()) {
181  vout.crucial("Parameters: parameter entry not found: %s.\n", key.c_str());
182  abort();
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("Parameters: parameter entry not found: %s.\n", key.c_str());
200  abort();
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::valarray<int>& value)
281 {
282  std::map<string, Item<std::valarray<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::valarray<double>& value)
290 {
291  std::map<string, Item<std::valarray<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 //====================================================================
316 // add by SU
318 {
319  m_vlevel.put(value);
320 }
321 
322 
323 //====================================================================
324 void Parameters::Register_double(const string& key, const double data)
325 {
326  m_map_double.insert(std::map<string, Item<double> >::value_type(key, Item<double>(data)));
327 }
328 
329 
330 //====================================================================
331 void Parameters::Register_int(const string& key, const int data)
332 {
333  m_map_int.insert(std::map<string, Item<int> >::value_type(key, Item<int>(data)));
334 }
335 
336 
337 //====================================================================
338 void Parameters::Register_double_vector(const string& key, const std::valarray<double>& data)
339 {
340  m_map_double_vector.insert(std::map<string, Item<std::valarray<double> > >::value_type(key, Item<std::valarray<double> >(data)));
341 }
342 
343 
344 //====================================================================
345 void Parameters::Register_int_vector(const string& key, const std::valarray<int>& data)
346 {
347  m_map_int_vector.insert(std::map<string, Item<std::valarray<int> > >::value_type(key, Item<std::valarray<int> >(data)));
348 }
349 
350 
351 //====================================================================
352 void Parameters::Register_string(const string& key, const string& data)
353 {
354  m_map_string.insert(std::map<string, Item<string> >::value_type(key, Item<string>(data)));
355 }
356 
357 
358 //====================================================================
359 void Parameters::Register_Parameters(const string& key, Parameters *const data)
360 {
361  m_map_Parameters.insert(std::map<string, Item<Parameters *> >::value_type(key, Item<Parameters *>(data)));
362 }
363 
364 
365 //====================================================================
366 bool Parameters::is_set(const string& key) const
367 {
368  // assume key is unique, i.e. there is no such case that
369  // two or more items of different types have the same key.
370 
371  {
372  std::map<string, Item<double> >::const_iterator p = m_map_double.find(key);
373  if (p != m_map_double.end()) {
374  return p->second.is_set() == EXIT_SUCCESS;
375  }
376  }
377 
378  {
379  std::map<string, Item<int> >::const_iterator p = m_map_int.find(key);
380 
381  if (p != m_map_int.end()) {
382  return p->second.is_set() == EXIT_SUCCESS;
383  }
384  }
385 
386  {
387  std::map<string, Item<std::valarray<double> > >::const_iterator p = m_map_double_vector.find(key);
388 
389  if (p != m_map_double_vector.end()) {
390  return p->second.is_set() == EXIT_SUCCESS;
391  }
392  }
393 
394  {
395  std::map<string, Item<std::valarray<int> > >::const_iterator p = m_map_int_vector.find(key);
396 
397  if (p != m_map_int_vector.end()) {
398  return p->second.is_set() == EXIT_SUCCESS;
399  }
400  }
401 
402  {
403  std::map<string, Item<string> >::const_iterator p = m_map_string.find(key);
404 
405  if (p != m_map_string.end()) {
406  return p->second.is_set() == EXIT_SUCCESS;
407  }
408  }
409 
410  {
411  std::map<string, Item<Parameters *> >::const_iterator p = m_map_Parameters.find(key);
412 
413  if (p != m_map_Parameters.end()) {
414  return p->second.is_set() == EXIT_SUCCESS;
415  }
416  }
417 
418  {
419  if (key == "verbose_level") {
420  return m_vlevel.is_set() == EXIT_SUCCESS;
421  }
422  }
423 
424  // no such key defined.
425  return false;
426 }
427 
428 
429 #ifdef DEBUG
430 //====================================================================
431 void Parameters::dump(const string& indent_str) const
432 {
433  const char *indent = indent_str.c_str();
434 
435  if (m_map_double.size() > 0) {
436  printf("%s[double]\n", indent);
437  for (std::map<string, Item<double> >::const_iterator p = m_map_double.begin(); p != m_map_double.end(); ++p) {
438  printf("%s key = %s, val = %f, set = %s\n", indent, p->first.c_str(), p->second.value(), (p->second.m_flag_set ? "true" : "false"));
439  }
440  }
441 
442  if (m_map_int.size() > 0) {
443  printf("%s[integer]\n", indent);
444  for (std::map<string, Item<int> >::const_iterator p = m_map_int.begin(); p != m_map_int.end(); ++p) {
445  printf("%s key = %s, val = %d, set = %s\n", indent, p->first.c_str(), p->second.value(), (p->second.m_flag_set ? "true" : "false"));
446  }
447  }
448 
449  if (m_map_double_vector.size() > 0) {
450  printf("%s[double vector]\n", indent);
451  for (std::map<string, Item<std::valarray<double> > >::const_iterator p = m_map_double_vector.begin(); p != m_map_double_vector.end(); ++p) {
452  printf("%s key = %s, val = (", indent, p->first.c_str());
453  for (size_t i = 0; i < p->second.value().size(); ++i) {
454  printf("%f, ", (p->second.value())[i]);
455  }
456  printf("), set = %s\n", (p->second.m_flag_set ? "true" : "false"));
457  }
458  }
459 
460  if (m_map_int_vector.size() > 0) {
461  printf("%s[integer vector]\n", indent);
462  for (std::map<string, Item<std::valarray<int> > >::const_iterator p = m_map_int_vector.begin(); p != m_map_int_vector.end(); ++p) {
463  printf("%s key = %s, val = (", indent, p->first.c_str());
464  for (size_t i = 0; i < p->second.value().size(); ++i) {
465  printf("%d, ", (p->second.value())[i]);
466  }
467  printf("), set = %s\n", (p->second.m_flag_set ? "true" : "false"));
468  }
469  }
470 
471  if (m_map_string.size() > 0) {
472  printf("%s[string]\n", indent);
473  for (std::map<string, Item<string> >::const_iterator p = m_map_string.begin(); p != m_map_string.end(); ++p) {
474  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"));
475  }
476  }
477 
478  if (m_map_Parameters.size() > 0) {
479  printf("%s[Parameters]\n", indent);
480  for (std::map<string, Item<Parameters *> >::const_iterator p = m_map_Parameters.begin(); p != m_map_Parameters.end(); ++p) {
481  printf("%s key = %s, val = %p, set = %s\n", indent, p->first.c_str(), p->second.value(), (p->second.m_flag_set ? "true" : "false"));
482 
483  // dump recursively.
484  if (p->second.value()) {
485  p->second.value()->dump(indent_str + " ");
486  } else {
487  printf("%s<empty value>\n", indent);
488  }
489  }
490  }
491 
492  printf("%s[verbosity]\n", indent);
493  printf("%s value = %d, set = %s\n", indent, m_vlevel.value(), (m_vlevel.m_flag_set ? "true" : "false"));
494 
495  printf("%s--------\n", indent);
496 }
497 
498 
499 #endif
500 
501 //====================================================================
502 //============================================================END=====
bool find_int(const string &) const
Definition: parameters.cpp:220
const T & value() const
Definition: parameters.h:55
int fetch_VerboseLevel(Bridge::VerboseLevel &val) const
Definition: parameters.cpp:211
BridgeIO vout
Definition: bridgeIO.cpp:207
void Register_string(const string &, const string &)
Definition: parameters.cpp:352
std::valarray< int > get_int_vector(const string &key) const
Definition: parameters.cpp:70
void Register_int(const string &, const int)
Definition: parameters.cpp:331
void set_int(const string &key, const int value)
Definition: parameters.cpp:262
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:40
Class for parameters.
Definition: parameters.h:40
std::map< string, Item< std::valarray< int > > > m_map_int_vector
Definition: parameters.h:80
int fetch_int_vector(const string &key, std::valarray< int > &val) const
Definition: parameters.cpp:176
void set_VerboseLevel(Bridge::VerboseLevel value)
Definition: parameters.cpp:317
Parameters * get_Parameters(const string &key) const
Definition: parameters.cpp:100
std::map< string, Item< Parameters * > > m_map_Parameters
Definition: parameters.h:82
int fetch_double_vector(const string &key, std::valarray< double > &val) const
Definition: parameters.cpp:158
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:78
bool is_set(const string &) const
Definition: parameters.cpp:366
std::map< string, Item< double > > m_map_double
Definition: parameters.h:77
double get_double(const string &key) const
Definition: parameters.cpp:25
std::map< string, Item< std::valarray< double > > > m_map_double_vector
Definition: parameters.h:79
std::valarray< double > get_double_vector(const string &key) const
Definition: parameters.cpp:55
int is_set() const
Definition: parameters.h:57
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
void set_double_vector(const string &key, const std::valarray< double > &value)
Definition: parameters.cpp:289
Bridge::VerboseLevel get_VerboseLevel() const
Definition: parameters.cpp:116
void crucial(const char *format,...)
Definition: bridgeIO.cpp:26
std::map< string, Item< string > > m_map_string
Definition: parameters.h:81
void Register_Parameters(const string &, Parameters *const)
Definition: parameters.cpp:359
void put(const std::valarray< U > &value)
Definition: parameters.h:60
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:25
void Register_double_vector(const string &, const std::valarray< double > &)
Definition: parameters.cpp:338
void Register_double(const string &, const double)
Definition: parameters.cpp:324
void Register_int_vector(const string &, const std::valarray< int > &)
Definition: parameters.cpp:345
int fetch_double(const string &key, double &val) const
Definition: parameters.cpp:124
string get_string(const string &key) const
Definition: parameters.cpp:85
void set_int_vector(const string &key, const std::valarray< int > &value)
Definition: parameters.cpp:280
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:83