Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
evalexpr_symbol.cpp
Go to the documentation of this file.
1 
13 #include "evalexpr_symbol.h"
14 
15 using Bridge::vout;
16 
17 bool SymbolTable::find_symbol(const std::string& name)
18 {
19  return table.find(name) != table.end();
20 }
21 
22 
23 bool SymbolTable::put_symbol(const std::string& name, const double value)
24 {
25  if (find_symbol(name)) {
26  vout.detailed("key \"%s\" already exists. overwrite.\n", name.c_str());
27  }
28 
29  SymbolRecord rec;
30  rec.type = VARIABLE;
31  rec.value.val = value;
32  table[name] = rec;
33 
34  return true;
35 }
36 
37 
38 bool SymbolTable::put_symbol(const std::string& name, const function_t tptr)
39 {
40  if (find_symbol(name)) {
41  vout.detailed("key \"%s\" already exists. overwrite.\n", name.c_str());
42  }
43 
44  SymbolRecord rec;
45  rec.type = FUNCTION;
46  rec.value.fptr = tptr;
47  table[name] = rec;
48 
49  return true;
50 }
51 
52 
53 double SymbolTable::get_symbol_value(const std::string& name) const
54 {
55  SymbolMap_t::const_iterator p = table.find(name);
56 
57  if (p != table.end()) {
58  return p->second.value.val;
59  } else {
60  vout.detailed("key \"%s\" not found.\n", name.c_str());
61  return double();
62  }
63 }
64 
65 
66 function_t SymbolTable::get_symbol_function(const std::string& name) const
67 {
68  SymbolMap_t::const_iterator p = table.find(name);
69 
70  if (p != table.end()) {
71  return p->second.value.fptr;
72  } else {
73  vout.detailed("key \"%s\" not found.\n", name.c_str());
74  return (function_t)0;
75  }
76 }
77 
78 
79 void SymbolTable::dump() const
80 {
81  for (SymbolMap_t::const_iterator p = table.begin(); p != table.end(); ++p) {
82  vout.paranoiac("key = %s, ", (p->first).c_str());
83 
84  ValueType t = (p->second).type;
85  if (t == VARIABLE) {
86  vout.paranoiac("type = VARIABLE, value = %f", (p->second).value.val);
87  } else if (t == FUNCTION) {
88  vout.paranoiac("type = FUNCTION, value = %p", (p->second).value.fptr);
89  } else {
90  vout.paranoiac("type = UNKNOWN, ");
91  }
92 
93  vout.paranoiac("\n");
94  }
95 }
function_t get_symbol_function(const std::string &name) const
bool put_symbol(const std::string &name, const double value)
BridgeIO vout
Definition: bridgeIO.cpp:207
void detailed(const char *format,...)
Definition: bridgeIO.cpp:50
double get_symbol_value(const std::string &name) const
void dump() const
SymbolMap_t table
union SymbolTable::SymbolRecord::@2 value
void paranoiac(const char *format,...)
Definition: bridgeIO.cpp:62
double(* function_t)(double)
bool find_symbol(const std::string &name)